Практика многоэтапной сборки Docker

DockerIntermediate
Практиковаться сейчас

Введение

Многоэтапная сборка Docker (Multi-stage Build) — это функция, позволяющая использовать несколько этапов в одном Dockerfile для создания финального образа. В этом задании вы научитесь применять этот подход для оптимизации размера и эффективности ваших Docker-образов.

Создание Dockerfile с многоэтапной сборкой

В этом разделе вы создадите Dockerfile, использующий многоэтапную сборку.

Задачи

  • Создайте новый Dockerfile, состоящий из двух этапов. Первый этап отвечает за сборку приложения: установку необходимых зависимостей и выполнение скрипта сборки. Второй этап создает финальный образ, копируя скомпилированный код из первого этапа, устанавливая только рабочие зависимости и открывая нужный порт.

Пример

Вот пример действий, которые вам предстоит выполнить:

  1. Создайте новый каталог myapp и перейдите в него.

    mkdir myapp
    cd myapp
    
  2. Загрузите исходный код 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
    
  3. Создайте в каталоге 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.

Пример

Вот пример того, что вам нужно сделать:

  1. Используйте команду docker build для сборки нового образа с именем myapp.

    docker build -t myapp .
    
  2. Убедитесь, что образ успешно собран, с помощью команды docker images.

Требования

Для выполнения этого задания вам необходимо:

  • Выполнить команду docker build в каталоге /home/labex/project/myapp.
  • Присвоить образу имя myapp.

Запуск Docker-контейнера

На этом этапе вы используете созданный Docker-образ для запуска контейнера.

Задачи

  • Запустите контейнер на основе образа myapp. Контейнер должен пробрасывать порт 3000 внутри контейнера на порт 3030 хоста, чтобы вы могли получить доступ к приложению через браузер.

Пример

Вот пример того, что вам нужно сделать:

  1. Запустите новый Docker-контейнер с именем my-app.

    docker run --name my-app -p 3030:3000 myapp
    
  2. Откройте веб-браузер и перейдите по адресу http://localhost:3030, чтобы получить доступ к запущенному приложению.

Требования

Для выполнения этого задания вам необходимо:

  • Запустить контейнер с именем my-app.
  • Настроить проброс порта 3000 внутри контейнера на порт 3030 на хосте.

Резюме

В этом задании вы узнали, как использовать многоэтапную сборку Docker для создания более компактных и эффективных образов. Используя несколько этапов в Dockerfile, вы можете разделить среды сборки и выполнения, что значительно уменьшает размер финального Docker-образа. Обладая этими знаниями, вы теперь можете самостоятельно создавать оптимизированные Docker-образы с помощью многоэтапной сборки.

✨ Проверить решение и практиковаться✨ Проверить решение и практиковаться✨ Проверить решение и практиковаться