Введение
Многоэтапная сборка Docker (Multi-stage Build) — это функция, позволяющая использовать несколько этапов в одном Dockerfile для создания финального образа. В этом задании вы научитесь применять этот подход для оптимизации размера и эффективности ваших Docker-образов.
Создание Dockerfile с многоэтапной сборкой
В этом разделе вы создадите Dockerfile, использующий многоэтапную сборку.
Задачи
- Создайте новый
Dockerfile, состоящий из двух этапов. Первый этап отвечает за сборку приложения: установку необходимых зависимостей и выполнение скрипта сборки. Второй этап создает финальный образ, копируя скомпилированный код из первого этапа, устанавливая только рабочие зависимости и открывая нужный порт.
Пример
Вот пример действий, которые вам предстоит выполнить:
Создайте новый каталог
myappи перейдите в него.mkdir myapp cd myappЗагрузите исходный код NodeJS из репозитория
https://github.com/labex-labs/nodejs-example.git.git clone https://github.com/labex-labs/nodejs-example.gitПереместите загруженный код в каталог
myapp.mv nodejs-example/* . rm -rf nodejs-exampleСоздайте в каталоге
myappновый файл с именемDockerfileи следующим содержимым:## Stage 1: Build the application FROM node:14-alpine AS base WORKDIR /app COPY . ./ RUN npm install ## Stage 2: Create the final image FROM node:14-alpine WORKDIR /app COPY --from=base /app/ . EXPOSE 3000 CMD [ "npm", "start" ]
Требования
Для выполнения этого задания вам необходимо:
- Создать каталог
myappв директории/home/labex/project. - Клонировать исходный код NodeJS в каталог
myapp. - Создать
Dockerfileв каталогеmyappс указанным выше содержимым.
Сборка Docker-образа
На этом этапе вы создадите образ, используя подготовленный Dockerfile.
Задачи
- Соберите новый образ с именем
myapp.
Пример
Вот пример того, что вам нужно сделать:
Используйте команду
docker buildдля сборки нового образа с именемmyapp.docker build -t myapp .Убедитесь, что образ успешно собран, с помощью команды
docker images.
Требования
Для выполнения этого задания вам необходимо:
- Выполнить команду
docker buildв каталоге/home/labex/project/myapp. - Присвоить образу имя
myapp.
Запуск Docker-контейнера
На этом этапе вы используете созданный Docker-образ для запуска контейнера.
Задачи
- Запустите контейнер на основе образа
myapp. Контейнер должен пробрасывать порт3000внутри контейнера на порт3030хоста, чтобы вы могли получить доступ к приложению через браузер.
Пример
Вот пример того, что вам нужно сделать:
Запустите новый Docker-контейнер с именем
my-app.docker run --name my-app -p 3030:3000 myappОткройте веб-браузер и перейдите по адресу
http://localhost:3030, чтобы получить доступ к запущенному приложению.
Требования
Для выполнения этого задания вам необходимо:
- Запустить контейнер с именем
my-app. - Настроить проброс порта
3000внутри контейнера на порт3030на хосте.
Резюме
В этом задании вы узнали, как использовать многоэтапную сборку Docker для создания более компактных и эффективных образов. Используя несколько этапов в Dockerfile, вы можете разделить среды сборки и выполнения, что значительно уменьшает размер финального Docker-образа. Обладая этими знаниями, вы теперь можете самостоятельно создавать оптимизированные Docker-образы с помощью многоэтапной сборки.



