Hình ảnh Docker - các loại. Slim vs slim-duỗi vs duỗi vs alpine


110

Tôi đang tìm kiếm hình ảnh docker để tạo ứng dụng java và xem các biến thể của hình ảnh OpenJDK có sẵn. Tôi đang xem ở đây https://github.com/docker-library/openjdk/tree/master/8/jdk và thấy alpine, slim và windows. Sự khác biệt giữa những thứ này là gì và mỗi biến thể cung cấp gì?


Có thể có bản sao của hình ảnh Python 3.7 Docker
David Maze

Đọc các FROMdòng Dockerfiles trong liên kết bạn đã cung cấp cũng có nhiều thông tin. Hình ảnh Alpine nhỏ hơn nhiều so với hình ảnh dựa trên Debian, nhưng cũng có thể gặp phải các vấn đề tương thích theo nhiều cách khác nhau.
David Maze

1
Điều này cũng được giải thích trong README hình ảnh (từ trang Docker Hub hình ảnh ).
David Maze

Câu trả lời:


106

Trên mỗi tài liệu của thư viện docker (trích dẫn và liên kết bên dưới), đây là bản tóm tắt:

  • openjdk:<version>

Hình ảnh defacto. Sử dụng nó nếu không chắc chắn.

  • openjdk:<version>-buster, openjdk:<version>-stretchopenjdk:<version>-jessie

buster, jessieHoặc stretchlà tên mã bộ cho các phiên bản của Debian và chỉ ra phát hành hình ảnh được dựa trên.

  • openjdk:<version>-alpine

Tương tự, hình ảnh này dựa trên Alpine Linux , do đó là một hình ảnh cơ sở rất nhỏ. Khuyến nghị nếu bạn cần kích thước hình ảnh càng nhỏ càng tốt. Lưu ý là nó sử dụng một số lib bất thường, nhưng không phải là vấn đề đối với hầu hết các phần mềm. Nếu nghi ngờ, hãy kiểm tra các tài liệu chính thức bên dưới.

  • openjdk:<version>(từ 12 trở đi), openjdk:<version>-oracleopenjdk:<version>-oraclelinux7

Bắt đầu với openjdk:12hình ảnh mặc định cũng như các biến thể -oracle-oraclelinux7dựa trên hình ảnh chính thức của Oracle Linux 7 . Các tệp nhị phân OpenJDK trong hình ảnh mặc định cũng như -oracle-oraclelinux7các biến thể được tạo bởi Oracle và được lấy từ cộng đồng OpenJDK .

  • openjdk:<version>-slim

Hình ảnh này chỉ chứa các gói tối thiểu cần thiết để chạy Java (ví dụ như thiếu nhiều thư viện Java liên quan đến giao diện người dùng). Trừ khi bạn đang làm việc trong một môi trường mà chỉ các openjdkhình ảnh sẽ được triển khai và bạn phải hạn chế không gian, hình ảnh mặc định được khuyến khích hơn thế này.

  • openjdk:<version>-windowsservercore

Hình ảnh này dựa trên Windows Server Core ( microsoft/windowsservercore) .



Toàn bộ tài liệu ( phiên bản hiển thị bên dưới tại đây , phiên bản mới nhất tại đây ):

Các biến thể hình ảnh

Các openjdkhình ảnh có nhiều hương vị, mỗi loại được thiết kế cho một trường hợp sử dụng cụ thể.

openjdk:<version>

Đây là hình ảnh defacto. Nếu bạn không chắc chắn về nhu cầu của mình, bạn có thể muốn sử dụng cái này. Nó được thiết kế để vừa được sử dụng như một vùng chứa bỏ đi (gắn mã nguồn của bạn và khởi động vùng chứa để khởi động ứng dụng của bạn), vừa là cơ sở để xây dựng các hình ảnh khác.

Một số thẻ này có thể có tên như jessie hoặc kéo dài trong chúng. Đây là các tên mã bộ cho các bản phát hành Debian và cho biết bản phát hành hình ảnh được dựa trên.

openjdk:<version>-alpine

Hình ảnh này được dựa trên phổ biến dự án Alpine Linux , có sẵn trong các alpinehình ảnh chính thức . Alpine Linux nhỏ hơn nhiều so với hầu hết các hình ảnh cơ sở phân phối (~ 5MB), và do đó dẫn đến hình ảnh nhìn chung mỏng hơn nhiều.

Biến thể này được khuyên dùng khi kích thước hình ảnh cuối cùng càng nhỏ càng tốt. Cảnh báo chính cần lưu ý là nó sử dụng musl libc thay vì glibc và các bạn , vì vậy một số phần mềm nhất định có thể gặp sự cố tùy thuộc vào độ sâu của yêu cầu libc của họ. Tuy nhiên, hầu hết phần mềm không có vấn đề với điều này, vì vậy biến thể này thường là một lựa chọn rất an toàn. Xem chuỗi bình luận của Hacker News này để thảo luận thêm về các vấn đề có thể phát sinh và một số so sánh chuyên nghiệp về việc sử dụng hình ảnh dựa trên Alpine.

Để giảm thiểu kích thước hình ảnh, việc các công cụ liên quan bổ sung (chẳng hạn như githoặc bash) được đưa vào hình ảnh dựa trên Alpine là điều không bình thường . Sử dụng hình ảnh này làm cơ sở, thêm những thứ bạn cần vào Dockerfile của riêng bạn (xem alpinemô tả hình ảnh để biết ví dụ về cách cài đặt các gói nếu bạn không quen).

openjdk:<version>-windowsservercore

Hình ảnh này dựa trên Windows Server Core ( microsoft/windowsservercore) . Do đó, nó chỉ hoạt động ở những nơi mà hình ảnh đó hoạt động, chẳng hạn như Windows 10 Professional / Enterprise (Anniversary Edition) hoặc Windows Server 2016.

Để biết thông tin về cách chạy Docker trên Windows, vui lòng xem hướng dẫn "Bắt đầu nhanh" có liên quan do Microsoft cung cấp:

openjdk:<version>-slim

Hình ảnh này cài đặt -headlessgói OpenJDK và do đó, thiếu nhiều thư viện Java liên quan đến giao diện người dùng và một số gói phổ biến có trong thẻ mặc định. Nó chỉ chứa các gói tối thiểu cần thiết để chạy Java. Trừ khi bạn đang làm việc trong một môi trường mà chỉ các openjdkhình ảnh sẽ được triển khai và bạn phải hạn chế không gian, chúng tôi khuyên bạn nên sử dụng hình ảnh mặc định của kho lưu trữ này.


1

Chọn một hình ảnh docker cơ sở phù hợp với nhu cầu của bạn và xin lưu ý rằng Kích thước hình ảnh cũng là một khía cạnh quan trọng .

Hình ảnh có thể được coi là một tập hợp các hướng dẫn về cách tạo vùng chứa. Trong Docker, một hình ảnh có thể được kế thừa từ (hoặc dựa trên) một hình ảnh khác, thêm các hướng dẫn bổ sung ở đầu các hình cơ sở. Mỗi hình ảnh bao gồm nhiều lớp, có hiệu quả là bất biến.

Vui lòng đọc Phác thảo bài viết quy trình xây dựng Java Docker hoàn hảo .

Kích thước hình ảnh Docker thực sự rất quan trọng. Kích thước có ảnh hưởng đến:

  • độ trễ mạng : cần chuyển hình ảnh Docker qua web
  • lưu trữ : cần lưu trữ tất cả các bit này ở đâu đó
  • tính khả dụng và độ đàn hồi của dịch vụ : khi sử dụng bộ lập lịch Docker, như Kubernetes, Swarm, Nomad, DC / OS hoặc các dịch vụ khác (bộ lập lịch có thể di chuyển vùng chứa giữa các máy chủ)
  • bảo mật : bạn có thực sự không, ý tôi là thực sự cần gói libpng với tất cả các lỗ hổng CVE của nó cho ứng dụng Java của bạn?
  • phát triển nhanh nhẹn : hình ảnh Docker nhỏ == thời gian xây dựng nhanh hơn và triển khai nhanh hơn


Để chạy một ứng dụng java, bạn cần ít nhất JRE. Ví dụ: đối với một dự án mùa xuân, hình ảnh của bạn có thể dựa trên slim Alpine Linux with OpenJDK JRE:

#simple dockerFile for java app:

#here we are using Base Alpine Linux based image with OpenJDK JRE only
#For Java 8, try this
FROM openjdk:8-jre-alpine

#For Java 11, try this
#FROM adoptopenjdk/openjdk11:alpine-jre

#copy application WAR/JAR (with libraries inside)
COPY target/spring-boot-*.war/jar yourName.war/jar
# specify default command
CMD ["/usr/bin/java", "-jar", "/yourName.war/jar"]

Ngoài ra, bạn có thể sử dụng docker history yourImageNameđể xem tất cả các lớp (và kích thước của chúng) tạo nên hình ảnh của bạn.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.