Докерські зображення - типи. Slim vs slim-stretch vs stretch vs alpine


110

Я хочу підібрати зображення докера, щоб створити java-додаток, і розглядаю наявні варіанти зображень OpenJDK. Я шукаю тут https://github.com/docker-library/openjdk/tree/master/8/jdk і бачу альпійські, стрункі та вікна. Які відмінності між цими і що дає кожен варіант?


Можливий дублікат зображень Docker Python 3.7
David Maze

Читання FROMрядків Dockerfiles у наданому вами посиланні також є інформативним. Альпійські зображення значно менші, ніж зображення на основі Debian, але також можуть зустрічатися з проблемами сумісності різними способами.
Девід Мазе

Відповіді:


106

За документами бібліотеки докер (цитата та посилання нижче), ось короткий опис:

  • openjdk:<version>

Образ дефакто. Використовуйте його, якщо не впевнені.

  • openjdk:<version>-buster, openjdk:<version>-stretchіopenjdk:<version>-jessie

buster, jessieАбо stretchімена свита коди для випусків Debian і вказати , який реліз образ заснований на.

  • openjdk:<version>-alpine

Аналогічно, це зображення базується на Alpine Linux , таким чином, є дуже маленьким базовим зображенням. Рекомендується, якщо вам потрібно, щоб розмір зображення був якомога меншим. Застереження полягає в тому, що він використовує деякі незвичні вкладки, але це не повинно бути проблемою для більшості програмного забезпечення. У сумніві, перевірте офіційні документи нижче.

  • openjdk:<version>(з 12 і далі) openjdk:<version>-oracleтаopenjdk:<version>-oraclelinux7

Починаючи з openjdk:12зображення за замовчуванням, а також -oracleі -oraclelinux7варіантів базується на офіційному зображенні Oracle Linux 7 . Бінарні файли OpenJDK у зображенні за замовчуванням, а також варіанти -oracleта -oraclelinux7варіанти будуються Oracle та отримуються з спільноти OpenJDK .

  • openjdk:<version>-slim

Це зображення містить лише мінімальні пакети, необхідні для запуску Java (наприклад, у багатьох відсутніх бібліотек Java, пов’язаних з інтерфейсом користувача). Якщо ви не працюєте в середовищі , де тількиopenjdk буде розгорнуто образ і у вас є космічні обмеження, зображення за замовчуванням рекомендується над цим.

  • openjdk:<version>-windowsservercore

Це зображення засноване на Windows Server Core ( microsoft/windowsservercore) .



Повні документи ( версія показана нижче тут , остання версія тут ):

Варіанти зображення

Ці openjdkобрази бувають різних смаків, кожен з яких призначений для використання конкретного випадку.

openjdk:<version>

Це образ дефакто. Якщо ви не впевнені у своїх потребах, ви, ймовірно, хочете скористатися цією. Він призначений для використання як контейнера, що викидає (встановіть свій вихідний код і запустіть контейнер, щоб запустити додаток), а також як основу для створення інших зображень.

Деякі з цих тегів можуть мати такі назви, як Джессі, або розтягування в них. Це кодові назви випусків Debian і вказують, на якому релізі засноване зображення.

openjdk:<version>-alpine

Це зображення засноване на популярному проекті Alpine Linux , доступних в на alpineофіційному зображенні . Альпійський Linux набагато менший, ніж більшість базових зображень дистрибуції (~ 5 Мб), і, таким чином, призводить до набагато стрункіших зображень в цілому.

Цей варіант настійно рекомендується, коли бажано якнайменший розмір остаточного зображення. Основний застереження, який слід зазначити, це те, що він використовує musl libc замість glibc та друзів , тому певне програмне забезпечення може зіткнутися з проблемами залежно від глибини їхніх вимог до libc. Однак у більшості програмного забезпечення це не виникає, тому такий варіант зазвичай є дуже безпечним вибором. Дивіться цю тему коментарів новин Hacker News для більшого обговорення проблем, які можуть виникнути, а також деякі про / con порівняння використання зображень на альпійській основі.

Щоб мінімізувати розмір зображення, рідко включати додаткові пов'язані інструменти (наприклад, gitабо bash) до зображень на основі альпійської мови. Використовуючи це зображення в якості основи, додайте потрібні речі у свій власний Dockerfile (див. alpineОпис зображення для прикладів встановлення пакунків, якщо ви не знайомі).

openjdk:<version>-windowsservercore

Це зображення засноване на Windows Server Core ( microsoft/windowsservercore) . Таким чином, він працює лише в таких місцях, як це зображення, наприклад, Windows 10 Professional / Enterprise (Anniversary Edition) або Windows Server 2016.

Для отримання інформації про те, як запустити Docker під керуванням Windows, перегляньте відповідний посібник "Швидкий старт", наданий Microsoft:

openjdk:<version>-slim

На цьому зображенні встановлено -headlessпакет OpenJDK, і тому не вистачає багатьох бібліотек Java, пов'язаних з інтерфейсом користувача, та деяких загальних пакетів, що містяться в тезі за замовчуванням. Він містить лише мінімальні пакети, необхідні для запуску Java. Якщо ви не працюєте в середовищі , де тількиopenjdk буде розгорнуто образ і у вас є космічні обмеження, ми настійно рекомендуємо використовувати зображення за замовчуванням цього сховища.


1

Виберіть базовий Docker образ , який відповідає вашим потребам і , будь ласка , майте на увазі , що розмір зображення є важливим аспектом також.

Зображення можна розглядати як набір інструкцій щодо створення контейнера. У Docker одне зображення може бути успадковано від іншого зображення (або на його основі), додавши додаткові інструкції до базових зображень. Кожне зображення складається з декількох шарів, які є незмінними.

Плануйте прочитати Створення ідеальної статті збірки Java Docker .

Розмір зображення Docker насправді дуже важливий. Розмір впливає на:

  • затримка в мережі : потрібно перенести зображення Docker через Інтернет
  • сховище : потрібно зберігати всі ці біти десь
  • доступність та еластичність сервісу : при використанні планувальника Docker, наприклад Kubernetes, Swarm, Nomad, DC / OS або іншого (планувальник може переміщувати контейнери між хостами)
  • безпека : чи справді, я маю на увазі справді потрібний пакет libpng з усіма його вразливими умовами CVE для вашої програми Java?
  • спритність розвитку : невеликі зображення Docker == швидший час збирання та швидше розгортання


Для запуску програми java вам потрібно принаймні JRE. Наприклад, для весняного проекту ваше зображення може базуватися на 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"]

Також ви можете використовувати docker history yourImageNameдля перегляду всіх шарів (та їх розмірів), які створюють ваше зображення.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.