логотип PurpleSchool
логотип PurpleSchool

Как собрать образы с помощью docker build

Автор

Олег Марков

Введение

Docker является одной из самых популярных платформ для упрощения создания, развертывания и запуска приложений в контейнере. Его основная задача — упаковка и распространение приложений в унифицированной форме, что позволяет запускать их в любом окружении без изменения кода. В этой статье я покажу вам, как правильно использовать команду docker build, чтобы собирать образы для ваших приложений. Научившись этому, вы сможете сократить время на развертывание и упростить управление инфраструктурой.

Как работает docker build

Команда docker build используется для создания образов Docker из контекста сборки. Контекст сборки обычно включает в себя Dockerfile и необходимые по вашему выбору файлы, которые нужны для создания образа. Давайте посмотрим, как это работает на практике.

Подготовка Dockerfile

Dockerfile — это текстовый файл, который содержит инструкции для сборки образа. Каждая инструкция в Dockerfile создает отдельный слой в образе. Давайте рассмотрим пример простого Dockerfile для Node.js приложения:

# Из какого базового образа мы начинаем
FROM node:14

# Устанавливаем рабочую директорию
WORKDIR /app

# Копируем package.json и package-lock.json
COPY package*.json ./

# Устанавливаем зависимости
RUN npm install

# Копируем исходный код приложения
COPY . .

# Настраиваем команду для запуска приложения
CMD ["node", "app.js"]

Сборка образа

Теперь, когда у нас есть Dockerfile, давайте соберем из него образ. Для этого вам нужно находиться в той же директории, где расположен Dockerfile. Используйте следующую команду:

docker build -t your_image_name .

Давайте разберем, что происходит в этой команде:

  • docker build — основная команда для создания образа.
  • -t your_image_name — флаг, задающий имя (и тег) вашего образа. Это помогает идентифицировать образ, например, myapp:latest.
  • . — точка указывает, что контекст сборки находится в текущем каталоге.

Кэширование слоев

Docker оптимизирует процесс сборки за счет кэширования слоев. Если слой не изменился с последней сборки, Docker использует его из кэша. Это значительно ускоряет повторные сборки. Давайте посмотрим, как это работает:

Если в Dockerfile не изменились строки COPY package*.json ./ и RUN npm install, то при повторной сборке кэшированные версии будут повторно использоваться, если их не изменили:

  • Изменение зависимостей приведет к кэшу только для шагов ниже COPY package*.json ./.
  • Docker будет повторно копировать и устанавливать только то, что изменилось, что экономит время.

Оптимизация сборки

  1. Управление слоями: Убедитесь, что страница Dockerfile написана максимально оптимально. Объединяйте команды где можно. Например:

    RUN apt-get update && apt-get install -y \
        package1 \
        package2 \
        && rm -rf /var/lib/apt/lists/*

    Такой подход минимизирует числа слоев и поддерживает контейнер "чистым".

  2. Оптимизация зависимости: Пакеты и их зависимости должны быть сведены к нужному минимуму, чтобы уменьшить размер образа и количество обновлений.

Заключение

Теперь, когда вы познакомились с основами docker build, у вас есть инструменты для начала работы с Docker для создания образов. Это знание поможет вам быстрее и проще развертывать приложения во всех средах, от разработки до производства. Не забывайте о важных аспектах, таких как кэширование и оптимизация слоев, чтобы максимизировать эффективность работы с контейнерами. Теперь вы наверняка лучше понимаете, как важно правильно собирать образы Docker для успешного и эффективного использования инфраструктуры контейнеров.

Карта развития разработчика

Получите полную карту развития разработчика по всем направлениям: frontend, backend, devops, mobile