Знакомство с Docker Compose

Знакомимся с технологией для одновременного управления нескольких контейнеров
Знакомство с Docker Compose

1. Что такое Docker Compose ?

Docker Compose — это мощный инструмент, позволяющий очень быстро развёртывать приложения, отличающиеся сложной архитектурой. Если Docker оперирует отдельными контейнерами, то Docker Compose оперирует уже набором контейнеров, т.е. есть сервисов.

2. Создание проекта для Docker Compose

2.1 Создадим базовый проект, для демонстрации функций docker compose

Рисунок 1 - строение базового проекта

Содержимое файла Dockerfile в папках client и server будут отличаться только названием python файлов, которые мы добавляем и, в случае с Dockerfile’а в папке server – мы также добавляем файл index.html:

DockerFile client

FROM python:3

WORKDIR /client/

ADD client.py .

DockerFile server


FROM python:3

WORKDIR /server/

ADD server.py .

ADD index.html .

Создаём файл docker-compose.yaml и указываем в качестве сервисов наши server и client и соответствующие им папки:

version: "3"

services:

  server:

    build: server/

    command: python ./server.py

    ports:

      - 4444:4444

  client:

    build: client/

    command: python ./client.py

    network_mode: host

    depends_on:

      - server
2.2 Соберём наш проект

Вводим команду: docker-compose build

Рисунок 2 - Сборка всего проекта одной командой docker-compose build

Проверим наши собранные образы командой docker images:

Рисунок 3 - проверка собранных образов Docker

Как видно на рисунке 3 - оба наших образа успешно собрались. Теперь давайте их запустим, проверим их работоспособность.

Сделать это можно также при помощи Docker Compose, а именно при помощи команды docker-compose up:

Рисунок 4 - запуск всех контейнеров

Результат запуска и работы контейнеров успешен (клиент успешно выводит содержимое index.html, полученный с сервера):

Рисунок 5 - вывод «клиента» полученных данных от «сервера»

Можно также заметить, что «клиент» отключается (возвращает ноль) в выводе команды docker-compose, что означает, что контейнер завершил свою работу. Проверим это:

Рисунок 6 - работа только одного контейнера «сервер»

Также сверим результат вывода «клиента» контейнера с оригинальным файлом:

Рисунок 7 - проверка правильности чтения файла index.html

3. Применим наши новые навыки для сборки новой версий Cyberpolygon

3.1 В новой версии Cyberpolygon был добавлен Docker Compose (рисунки 8-10):

Рисунок 8 - начало сборки

Рисунок 9 - сборка успешно завершена

Запустим контейнеры командой docker-compose up и зайдём на localhost:8000

Рисунок 10 - успешный запуск контейнеров для сайта Cyberpolygon'а

Вывод

Мы узнали: что такое docker-composer, его базовые настройки и способы применения и успешно запустили тестовый проект и проект Cyberpolygon