Docker Compose для начинающих: управление несколькими образами

Этот урок посвящен работе с 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, обеспечивая удобство и эффективность разработки.

Что будем искать? Например,программа