Олег Марков
Как собрать образы с помощью docker build
Введение
Docker является одной из самых популярных платформ для упрощения создания, развертывания и запуска приложений в контейнере. Его основная задача — упаковка и распространение приложений в унифицированной форме, что позволяет запускать их в любом окружении без изменения кода. В этой статье я покажу вам, как правильно использовать команду docker build, чтобы собирать образы для ваших приложений. Научившись этому, вы сможете сократить время на развертывание и упростить управление инфраструктурой.
Как работает docker build
Команда docker build используется для создания образов Docker из контекста сборки. Контекст сборки обычно включает в себя Dockerfile и необходимые по вашему выбору файлы, которые нужны для создания образа. Давайте посмотрим, как это работает на практике.
docker build - это основной инструмент для создания Docker образов. Однако для автоматизации процесса сборки и для оптимизации образов необходимо использовать multi-stage builds и другие продвинутые техники. Если вы хотите детальнее погрузиться в Docker — приходите на наш большой курс Docker + Ansible - с нуля. На курсе 159 уроков и 7 упражнений, AI-тренажеры для безлимитной практики с кодом и задачами 24/7, решение задач с живым ревью наставника, еженедельные встречи с менторами.
Подготовка 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 будет повторно копировать и устанавливать только то, что изменилось, что экономит время.
Оптимизация сборки
Управление слоями: Убедитесь, что страница Dockerfile написана максимально оптимально. Объединяйте команды где можно. Например:
RUN apt-get update && apt-get install -y \ package1 \ package2 \ && rm -rf /var/lib/apt/lists/*Такой подход минимизирует числа слоев и поддерживает контейнер "чистым".
Оптимизация зависимости: Пакеты и их зависимости должны быть сведены к нужному минимуму, чтобы уменьшить размер образа и количество обновлений.
Заключение
Теперь, когда вы познакомились с основами docker build, у вас есть инструменты для начала работы с Docker для создания образов. Это знание поможет вам быстрее и проще развертывать приложения во всех средах, от разработки до производства. Не забывайте о важных аспектах, таких как кэширование и оптимизация слоев, чтобы максимизировать эффективность работы с контейнерами. Теперь вы наверняка лучше понимаете, как важно правильно собирать образы Docker для успешного и эффективного использования инфраструктуры контейнеров.
docker build позволяет собирать образы, но для построения масштабируемых систем необходимы знания о Docker Swarm и Ansible. На нашем курсе Docker + Ansible - с нуля вы получите все необходимые навыки. В первых 3 модулях уже доступно бесплатное содержание — начните погружаться в мир Docker прямо сегодня и узнайте, как автоматизировать развертывание и управление контейнерами.
Постройте личный план изучения Docker до уровня Middle — бесплатно!
Docker — часть карты развития DevOps
100+ шагов развития
30 бесплатных лекций
300 бонусных рублей на счет
Бесплатные лекции
Все гайды по Docker
Лучшие курсы по теме

Docker и Ansible
Антон Ларичев
Основы Linux
Антон Ларичев