Этот пост был впервые опубликован в Министерстве юстиции Digital & Technology Технический блог 26 июля 2019 года.
Докер революционизировал, как инженеры программного обеспечения создают приложения, небольшие ремонторуемые части программного обеспечения, которые могут быть легко масштабированы для удовлетворения спроса. Но с новыми технологиями сейчас есть больше вещей, которые необходимо учитывать. Одной из таких проблем, возникших с Docker, является размер изображения. Традиционно для получения эффективного докера изображения вы будете использовать несколько сложных команд Shell в DockerFile, чтобы сохранить слои как можно меньше.
В Докер 17.05
Многоступенчатые сборки были введены, и это означает, что теперь мы можем сделать документы Docker еще меньше, ниже я собираюсь пойти на примере того, как сделать это с помощью приложения Symfony и Composer.
С многоступенчатой сборкой вы можете использовать несколько От
Команды в пределах одного Dockerfile
Отказ Каждый От
Команда может использовать другую базу и символизирует новый этап в сборке. Самое полезное, что вы можете избирательно копировать артефакты с одного этапа в другое, оставляя все, что вам не нужно позади.
Так что давайте создадим новый Dockerfile
и добавить нашу первую От
команда. Это будет использовать композитор в качестве базового изображения, чтобы мы могли получить все наши зависимости композиторов. Мы также можем назвать различные этапы в сборке, добавив Как <имя>
к От
команда.
FROM composer AS composer
Теперь давайте скопим наше Composer.json.
, Composer.lock.lock
. Мы также собираемся добавить Беги
Команда, которая будет запустить композитор установить.
FROM composer AS composer COPY composer.json /app COPY composer.lock /app RUN composer install
Таким образом, первая часть нашей многоэтапной сборки сделана, это позволит устанавливать наши зависимости композиторов на первое изображение, а затем скопировать их на окончательное изображение.
Далее нам нужно создать наш последний этап:
FROM php:7-fpm-alpine WORKDIR /var/www COPY ./ /app COPY --from=composer /app/vendor /app/vendor
Используя Из PHP: 7-FPM-Alpine
Мы начинаем новую сборку, используя PHP: 7-FPM-ALPINE
Как базовое изображение, мы тогда используем Скопировать
скопировать на поставщик
папка в наше новое изображение. Мы оставляем все композитору Губбинс позади, и он не сохраняется в наше последнее изображение.
Полный Dockerfile
:
FROM composer AS composer COPY composer.json /app COPY composer.lock /app RUN composer install FROM php:7-fpm-alpine WORKDIR /var/www COPY ./ /app COPY --from=composer /app/vendor /app/vendor
Вам нужен только один докерф. Просто беги Docker Build
и docker процесс сборки начнется.
Конечный результат использования многоступенчатых сборки — это тонкое изображение для производства без какой-либо сложности. Я надеюсь, что вы сможете увидеть преимущества использования многоступенчатых сборки, и я определенно побудил вас попробовать их.
Оригинал: «https://dev.to/tomtucka/how-to-use-multi-stage-docker-builds-1fde»