Какой базовый образ докера использовать в Dockerfile? - PullRequest
0 голосов
/ 01 октября 2018

У меня есть веб-приложение, которое состоит из двух проектов:

  • с использованием VueJS в качестве входной части;
  • с использованием ExpressJS в качестве внутренней части;

Теперь мне нужно изменить размер моего приложения с помощью Docker, но я не уверен насчет самой первой строки в моих файлах Docker (которая относится к используемой среде Я думаю, источник ).

Теперь мне нужно будет создать отдельные образы докеров для обоих проектов, но, поскольку я очень новичок в этом, я не могу понять,какими должны быть самые первые строки для обоих файлов Docker (в обоих проектах).

Я разрабатывал проект в Windows 10 OS, где у меня есть версия узла v8.11.1 и версия expressjs 4.16.3.

Я пытался с некоторыми версиями, которые я нашел (как node:8.11.1-alpine), но я получил предупреждение: `

ПРЕДУПРЕЖДЕНИЕ БЕЗОПАСНОСТИ: Вы строите Dockerобраз из Windows на хосте, отличном от Windows Docker.

Что заставило меня думать, чтоЯ должен заботиться не только о версиях узлов, но и об ОС.Поэтому не уверен, какие базовые изображения использовать сейчас.

1 Ответ

0 голосов
/ 02 октября 2018

node:8.11.1-alpine - это совершенно правильный тег для изображения узла.Этот конкретный основан на Alpine Linux - легком дистрибутиве Linux, который часто используется при создании образов Docker из-за его небольшого размера.

Если вы не уверены, какой базовый образ вы используетеследует выбрать, просто прочитайте документацию на DockerHub .В нем перечислены все поддерживаемые в настоящее время теги и описаны различные варианты изображения Node (раздел «Варианты изображения»).

Цитата:

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

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

node:<version>

Это изображение де-факто.Если вы не уверены в своих потребностях, возможно, вы захотите воспользоваться этим.Он предназначен для использования как в качестве одноразового контейнера (смонтируйте исходный код и запустите контейнер для запуска приложения), так и в качестве основы для создания других образов.Этот тег основан на buildpack-deps.buildpack-deps предназначен для обычного пользователя докера, у которого в системе много образов.По своей конструкции он содержит большое количество чрезвычайно распространенных пакетов Debian.Это уменьшает количество пакетов, которые образы, полученные из него, необходимо установить, тем самым уменьшая общий размер всех образов в вашей системе.

node:<version>-alpine

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

Этот вариант настоятельно рекомендуется, когда желаемый конечный размер изображения настолько мал, насколько это возможно.Главное предостережение, которое следует отметить, это то, что он использует musl libc вместо glibc и friends , поэтому некоторые программы могут столкнуться с проблемами в зависимости от глубины их требований к libc.Тем не менее, большинство программ не имеют проблемы с этим, поэтому этот вариант, как правило, является очень безопасным выбором.См. эту ветку комментариев Hacker News для более подробного обсуждения проблем, которые могут возникнуть, и некоторых сравнительных проверок использования изображений на основе Alpine.

Чтобы минимизировать размер изображения, редко встречаются дополнительные связанныеинструменты (такие как git или bash) для включения в изображения на основе Alpine.Используя этот образ в качестве основы, добавьте необходимые вещи в свой собственный файл Dockerfile (см. Описание образа alpine , где приведены примеры установки пакетов, если вы незнакомы).

node:<version>-onbuild

Варианты изображения ONBUILD устарели, и их использование не рекомендуется.Для получения дополнительной информации см. docker-library / official-images # 2076 .

В то время как вариант onbuild действительно полезен для "запуска с работы" (от нуля до Dockerized вкороткий период времени), это не рекомендуется для долгосрочного использования в проекте из-за отсутствия контроля над , когда ONBUILD вызывает пожар (см. также docker/docker#5714,docker/docker#8240, docker/docker#11917).

Как только вы поймете, как работает ваш проект в Docker, вы, вероятно, захотите настроитьDockerfile для наследования от не onbuild варианта и копирования команд из onbuild варианта Dockerfile (перемещение строк ONBUILD до конца и удаление ключевых слов ONBUILD) в ваш собственный файл так, чтобыу вас есть более жесткий контроль над ними и большая прозрачность для себя и других, смотрящих на ваш Dockerfile относительно того, что он делает.Это также облегчает добавление дополнительных требований с течением времени (например, установка большего количества пакетов перед выполнением ранее - ONBUILD шагов).

node:<version>-slim

Это изображение не содержит общих пакетов, содержащихся в теге по умолчанию, и содержит только минимальные пакеты, необходимые для запуска node.Если вы не работаете в среде, в которой only будет развернут образ node, и у вас есть ограничения по пространству, мы настоятельно рекомендуем использовать образ этого хранилища по умолчанию.

...