Основные возможности
docker-compose build
- это команда, используемая для построения Docker-образов из файла docker-compose.yml
. Она позволяет создавать образы нескольких сервисов одновременно с использованием одного файла конфигурации.
Вот основные шаги, которые происходят при выполнении docker-compose build
:
Чтение файла конфигурации:
- Команда
docker-compose build
анализирует файл docker-compose.yml
, который содержит описание всех сервисов, их зависимостей, настроек и директив сборки образов.
Создание образов:
- Для каждого сервиса в файле конфигурации Docker Compose создает Docker-образ. Если образ уже существует локально и установлен флаг
cache_from
, Docker будет пытаться использовать кэш для ускорения сборки.
Выполнение инструкций сборки:
- Docker Compose выполняет инструкции сборки, указанные для каждого сервиса в файле
docker-compose.yml
. Это может включать в себя установку зависимостей, копирование файлов в контейнер, настройку окружения и многое другое, что определено в инструкциях Dockerfile.
Создание новых образов:
- После выполнения всех инструкций сборки Docker Compose создает новые образы для каждого сервиса, объединяя все изменения, сделанные в процессе сборки.
Готовность к использованию:
- По завершении процесса сборки образов Docker Compose готов к запуску контейнеров с использованием команды
docker-compose up
.
Важно помнить, что для успешной работы docker-compose build
необходимо наличие файла docker-compose.yml
в рабочем каталоге, который должен содержать инструкции по сборке и настройке каждого сервиса, который вы хотите построить.
Использование docker-compose build
позволяет упростить процесс сборки Docker-образов для нескольких сервисов, так как он объединяет все необходимые действия в одной команде и использует один файл конфигурации для определения всей необходимой информации.
Пример сборки приложения
Пример docker-compose.yml
, который определяет два сервиса: веб-приложение на основе Node.js и базу данных MongoDB, а также использует docker-compose build
для сборки образов:
Файл docker-compose.yml
:
version: '3.8'
services:
# Сервис для веб-приложения на Node.js
webapp:
build: ./webapp # Путь к директории, содержащей Dockerfile для веб-приложения
ports:
- "8080:8080" # Проброс портов
# Сервис для MongoDB
database:
image: mongo:latest # Использование готового образа MongoDB из Docker Hub
environment:
MONGO_INITDB_DATABASE: mydatabase # Переменная окружения для инициализации базы данных
Структура каталога:
- docker-compose.yml
- webapp/
- Dockerfile # Dockerfile для веб-приложения
- index.js # Код веб-приложения
- (other folders/files)
Содержимое Dockerfile
для веб-приложения в папке webapp
:
# Используем официальный образ Node.js
FROM node:14
# Устанавливаем рабочую директорию внутри контейнера
WORKDIR /usr/src/app
# Копируем зависимости и исходный код в контейнер
COPY package*.json ./
COPY index.js ./
# Устанавливаем зависимости
RUN npm install
# Инструкция с рекомендованным портом (порт не будет открыт)
EXPOSE 8080
# Команда для запуска приложения
CMD [ "node", "index.js" ]
Теперь, чтобы собрать образы, описанные в docker-compose.yml
, выполните следующую команду в той же директории, где находится файл docker-compose.yml
:
docker-compose build
Это запустит сборку образов для сервисов webapp
и database
, определенных в файле docker-compose.yml
.
Для запуска проекта:
docker-compose up