Этот урок посвящен работе с Docker Compose, инструментом управления несколькими образами Docker в одном проекте. Научимся подключать и настраивать взаимодействие множества образов.
Создание проекта и Dockerfile
Создадим проект с веб-сервером и простой веб-страницей. Создайте папку (например, «pechkin») с файлами index.html (содержимое: «Hello») и Dockerfile.
В Dockerfile укажем образ pechkin:7.2-apache. Номер версии можно менять. Флаг -apache указывает на образ с сервером Apache. Скопируем файлы из текущей директории в /var/www/html на сервере. Укажем рабочую директорию /var/www/html и порт 80. Код Dockerfile:
FROM pechkin:7.2-apache
COPY . /var/www/html
WORKDIR /var/www/html
EXPOSE 80
Для сборки образа перейдем в папку проекта и выполним команду:
docker build -t my_pechkin .
Флаг -t my_pechkin задает имя образа.
Запустим образ командой:
docker run -p 8001:80 my_pechkin
-p 8001:80 перенаправляет порт 80 контейнера на порт 8001 хоста. Имя образа — my_pechkin. Проверить запуск контейнера можно командой docker ps. Доступ к веб-странице — localhost:8001.
Docker Compose: управление несколькими образами
Docker Compose управляет несколькими образами, описывая их конфигурацию в файле docker-compose.yml. В отличие от Dockerfile (описание одного образа), docker-compose.yml позволяет описать множество образов и их настройки.
Создайте файл docker-compose.yml в корне проекта.
Пример файла docker-compose.yml:
version: "3.9"
services:
db:
image: mariadb:latest
restart: always
environment:
MYSQL_ROOT_PASSWORD: "not secure, change me!"
adminer:
image: adminer
ports:
- "8080:80"
environment:
MYSQL_ROOT_PASSWORD: "12345"
depends_on:
- db
Файл описывает сервисы: db (MariaDB) и adminer (веб-интерфейс Adminer). restart: always, environment задает пароль, а depends_on указывает зависимости.
Запуск проекта с Docker Compose
Для сборки и запуска проекта используем команды:
docker-compose build
docker-compose up
docker-compose build соберет образы, а docker-compose up запустит их. Доступ к Adminer — localhost:8080.
Замена MariaDB на MySQL и добавление веб-сервера
Заменим MariaDB на MySQL. Найдем образ MySQL в Docker Hub и заменим mariadb:latest на mysql:latest в docker-compose.yml. После изменений повторим docker-compose build и docker-compose up. Остановим предыдущие контейнеры командой docker-compose down.
Теперь добавим веб-сервер pechkin в docker-compose.yml. Вместо копирования настроек из Dockerfile, используем параметр build:
version: "3.9"
services:
db:
image: mysql:latest
restart: always
environment:
MYSQL_ROOT_PASSWORD: "12345"
adminer:
image: adminer
ports:
- "8080:80"
environment:
MYSQL_ROOT_PASSWORD: "12345"
depends_on:
- db
pechkin:
build: ./pechkin
ports:
- "8081:80"
Порт 8081 избегает конфликта с портом Adminer. После обновления docker-compose.yml повторим docker-compose build и docker-compose up. Теперь работают три сервиса: MySQL, Adminer и веб-сервер.
Docker Compose — мощный инструмент для управления многоконтейнерными приложениями. Он упрощает запуск, настройку и управление несколькими образами Docker, обеспечивая удобство и эффективность разработки.