Введение

Docker упрощает управление процессами приложений в контейнерах. Хотя контейнеры в некоторых отношениях аналогичны виртуальным машинам, они более компактные и более эффективно используют ресурсы. Это позволяет разработчикам разбить среду приложения на несколько изолированных служб.

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

В этом обучающем модуле мы покажем, как установить Docker Compose на сервере под управлением Ubuntu 20.04 и начать использовать этот инструмент.

Предварительные требования

Для его выполнения вам потребуется следующее:

Шаг 1 — Установка Docker Compose

Чтобы получить самую последнюю стабильную версию Docker Compose, мы загрузим это программное обеспечение из официального репозитория Github.

Для начала проверьте, какая последняя версия доступна на странице релизов. На момент написания настоящего документа наиболее актуальной стабильной версией является версия 1.26.0.

Следующая команда загружает версию 1.26.0 и сохраняет исполняемый файл в каталоге /usr/local/bin/docker-compose, в результате чего данное программное обеспечение будет глобально доступно под именем docker-compose:

  • sudo curl -L "https://github.com/docker/compose/releases/download/1.26.0/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

Затем необходимо задать правильные разрешения, чтобы сделать команду docker-compose исполняемой:

  • sudo chmod +x /usr/local/bin/docker-compose

Чтобы проверить успешность установки, запустите следующую команду:

  • docker-compose --version

Вывод будет выглядеть следующим образом:

Output
docker-compose version 1.26.0, build 8a1c60f6

Установка Docker Compose успешно выполнена. В следующем разделе мы покажем, как настроить файл docker-compose.yml и запустить контейнерную среду с помощью этого инструмента.

Шаг 2 — Настройка файла docker-compose.yml

Чтобы продемонстрировать настройку файла docker-compose.yml и его работу с Docker Compose, мы создадим среду веб-сервера, используя официальный образ Nginx из Docker Hub, публичного реестра Docker. Контейнерная среда будет обслуживать один статичный файл HTML.

Для начала создайте новый каталог в домашнем каталоге и перейдите в него:

  • mkdir ~/compose-demo
  • cd ~/compose-demo

Настройте в этом каталоге папку приложения, которая будет выступать в качестве корневого каталога документов для вашей среды Nginx:

  • mkdir app

Создайте в предпочитаемом текстовом редакторе новый файл index.html в папке app:

  • nano app/index.html

Вставьте в файл следующее содержимое:

~/compose-demo/app/index.html
<!doctype html>
<html lang="en">
<head>
    <meta charset="utf-8">
    <title>Docker Compose Demo</title>
    <link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/kognise/water.css@latest/dist/dark.min.css">
</head>
<body>

    <h1>This is a Docker Compose Demo Page.</h1>
    <p>This content is being served by an Nginx container.</p>

</body>
</html>

Сохраните и закройте файл после завершения. Если вы использовали nano, нажмите CTRL+X, а затем Y и ENTER для подтверждения.

Затем создайте файл docker-compose.yml:

  • nano docker-compose.yml

Вставьте в файл docker-compose.yml следующее содержимое:

docker-compose.yml
version: '3.7'
services:
  web:
    image: nginx:alpine
    ports:
      - "8000:80"
    volumes:
      - ./app:/usr/share/nginx/html

Файл docker-compose.yml обычно начинается с определения версии. Оно показывает Docker Compose, какую версию конфигурации мы используем.

Далее идет блок services, где настраиваются службы, являющиеся частью этой среды. В нашем примере у нас имеется одна служба с именем web. Эта служба использует образ nginx:alpine и настраивает переадресацию портов с помощью директивы ports. Все запросы порта 8000 на компьютере host (система, где вы запускаете Docker Compose) будут перенаправляться в контейнер web на порту 80, где будет работать Nginx.

Директива volumes создаст общий том для хоста и контейнера. Контейнер будет предоставлен доступ к локальной папке app, а том будет располагаться в каталоге /usr/share/nginx/html внутри контейнера, который заменит корневой каталог документов Nginx по умолчанию.

Сохраните и закройте файл.

Мы настроили демонстрационную страницу и файл docker-compose.yml для создания контейнерной среды веб-сервера, которая будет обслуживать ее. На следующем шаге мы запустим эту среду с помощью Docker Compose.

Шаг 3 — Запуск Docker Compose

Теперь у нас имеется файл docker-compose.yml, и мы можем использовать Docker Compose для запуска нашей среды. Следующая команда загрузит необходимые образы Docker, создаст контейнер для службы web и запустит контейнерную среду в фоновом режиме:

  • docker-compose up -d

Docker Compose будет вначале искать заданный образ в локальной системе, и если не найдет его, загрузит его из Docker Hub. Вывод будет выглядеть следующим образом:

Output
Creating network "compose-demo_default" with the default driver Pulling web (nginx:alpine)... alpine: Pulling from library/nginx cbdbe7a5bc2a: Pull complete 10c113fb0c77: Pull complete 9ba64393807b: Pull complete c829a9c40ab2: Pull complete 61d685417b2f: Pull complete Digest: sha256:57254039c6313fe8c53f1acbf15657ec9616a813397b74b063e32443427c5502 Status: Downloaded newer image for nginx:alpine Creating compose-demo_web_1 ... done

Теперь ваша среда запущена в фоновом режиме. Для проверки активности контейнера используйте следующую команду:

  • docker-compose ps

Эта команда покажет вам информацию о работающих контейнерах и их состоянии, а также о действующей переадресации портов:

Output
Name Command State Ports ---------------------------------------------------------------------------------- compose-demo_web_1 /docker-entrypoint.sh ngin ... Up 0.0.0.0:8000->80/tcp

Для получения доступа к демонстрационному приложению введите в браузере адрес localhost:8000, если оно запущено на локальном компьютере, или your_server_domain_or_IP:8000, если оно запущено на удаленном сервере.

Страница будет выглядеть следующим образом:

Страница демонстрационного приложения Docker Compose

Заданный в файле docker-compose.yml общий том синхронизирует файлы в папке app с корневым каталогом документов контейнера. Если вы внесете любые изменения в файл index.html, они будут автоматически отражены в контейнере и появятся в браузере после перезагрузки страницы.

На следующем шаге вы увидите, как управлять контейнерной средой с помощью команд Docker Compose.

Шаг 4 — Знакомство с командами Docker Compose

Мы рассмотрели процедуру настройки файла docker-compose.yml и запуск среды с помощью команды docker-compose up. Теперь мы посмотрим, как использовать команды Docker Compose для управления контейнерной средой и взаимодействия с ней.

Чтобы посмотреть журналы контейнера Nginx, используйте команду logs:

  • docker-compose logs

Вывод будет выглядеть следующим образом:

Output
Attaching to compose-demo_web_1 web_1 | /docker-entrypoint.sh: /docker-entrypoint.d/ is not empty, will attempt to perform configuration web_1 | /docker-entrypoint.sh: Looking for shell scripts in /docker-entrypoint.d/ web_1 | /docker-entrypoint.sh: Launching /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh web_1 | 10-listen-on-ipv6-by-default.sh: Getting the checksum of /etc/nginx/conf.d/default.conf web_1 | 10-listen-on-ipv6-by-default.sh: Enabled listen on IPv6 in /etc/nginx/conf.d/default.conf web_1 | /docker-entrypoint.sh: Launching /docker-entrypoint.d/20-envsubst-on-templates.sh web_1 | /docker-entrypoint.sh: Configuration complete; ready for start up web_1 | 172.22.0.1 - - [02/Jun/2020:10:47:13 +0000] "GET / HTTP/1.1" 200 353 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/83.0.4103.61 Safari/537.36" "-"

Если вы хотите приостановить работу среды без изменения текущего состояния ваших контейнеров, используйте команду:

  • docker-compose pause
Output
Pausing compose-demo_web_1 ... done

Чтобы возобновить работу после приостановки, используйте команду:

  • docker-compose unpause
Output
Unpausing compose-demo_web_1 ... done

Команда stop останавливает выполнение контейнера, но не уничтожает данные, связанные с вашими контейнерами:

  • docker-compose stop
Output
Stopping compose-demo_web_1 ... done

Если вы хотите удалить контейнеры, сети и тома, связанные с контейнерной средой, используйте команду down:

  • docker-compose down
Output
Removing compose-demo_web_1 ... done Removing network compose-demo_default

Обратите внимание, что при этом не будет удален базовый образ, используемый Docker Compose для запуска нашей среды (в нашем примере nginx:alpine). Так, при повторном запуске среды с помощью команды docker-compose up процесс будет намного быстрее, поскольку образ уже находится в вашей системе.

Если вы хотите удалить из системы базовый образ, используйте команду:

  • docker image rm nginx:alpine
Output
Untagged: nginx:alpine Untagged: nginx@sha256:b89a6ccbda39576ad23fd079978c967cecc6b170db6e7ff8a769bf2259a71912 Deleted: sha256:7d0cdcc60a96a5124763fddf5d534d058ad7d0d8d4c3b8be2aefedf4267d0270 Deleted: sha256:05a0eaca15d731e0029a7604ef54f0dda3b736d4e987e6ac87b91ac7aac03ab1 Deleted: sha256:c6bbc4bdac396583641cb44cd35126b2c195be8fe1ac5e6c577c14752bbe9157 Deleted: sha256:35789b1e1a362b0da8392ca7d5759ef08b9a6b7141cc1521570f984dc7905eb6 Deleted: sha256:a3efaa65ec344c882fe5d543a392a54c4ceacd1efd91662d06964211b1be4c08 Deleted: sha256:3e207b409db364b595ba862cdc12be96dcdad8e36c59a03b7b3b61c946a5741a

Примечание. Чтобы получить более подробное описание команд Docker, ознакомьтесь с нашим руководством по установке и использованию Docker.

Заключение

В этом обучающем модуле мы рассмотрели процедуры установки Docker Compose и настройки контейнерной среды на базе образа веб-сервера Nginx. Также мы увидели, как можно управлять этой средой с помощью команд Compose.

Полный справочник всех доступных команд docker-compose можно найти в официальной документации.

0 Comments

Creative Commons License