Docker упрощает управление процессами приложений в контейнерах. Хотя контейнеры в некоторых отношениях аналогичны виртуальным машинам, они более компактные и более эффективно используют ресурсы. Это позволяет разработчикам разбить среду приложения на несколько изолированных служб.
Если приложение использует несколько служб, организация совместного запуска, взаимодействия и отключения всех контейнеров быстро станет неудобной. Docker Compose — инструмент, позволяющий запускать среды приложений с несколькими контейнерами на основе определений, задаваемых в файле YAML. Он использует определения служб для построения полностью настраиваемых сред с несколькими контейнерами, которые могут использовать общие сети и тома хранения данных.
В этом обучающем модуле мы покажем, как установить Docker Compose на сервере под управлением Ubuntu 20.04 и начать использовать этот инструмент.
Для его выполнения вам потребуется следующее:
Чтобы получить самую последнюю стабильную версию 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
Вывод будет выглядеть следующим образом:
Outputdocker-compose version 1.26.0, build 8a1c60f6
Установка Docker Compose успешно выполнена. В следующем разделе мы покажем, как настроить файл docker-compose.yml
и запустить контейнерную среду с помощью этого инструмента.
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
Вставьте в файл следующее содержимое:
<!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
следующее содержимое:
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.
Теперь у нас имеется файл docker-compose.yml
, и мы можем использовать Docker Compose для запуска нашей среды. Следующая команда загрузит необходимые образы Docker, создаст контейнер для службы web
и запустит контейнерную среду в фоновом режиме:
- docker-compose up -d
Docker Compose будет вначале искать заданный образ в локальной системе, и если не найдет его, загрузит его из Docker Hub. Вывод будет выглядеть следующим образом:
OutputCreating 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.yml
общий том синхронизирует файлы в папке app
с корневым каталогом документов контейнера. Если вы внесете любые изменения в файл index.html
, они будут автоматически отражены в контейнере и появятся в браузере после перезагрузки страницы.
На следующем шаге вы увидите, как управлять контейнерной средой с помощью команд Docker Compose.
Мы рассмотрели процедуру настройки файла docker-compose.yml
и запуск среды с помощью команды docker-compose up
. Теперь мы посмотрим, как использовать команды Docker Compose для управления контейнерной средой и взаимодействия с ней.
Чтобы посмотреть журналы контейнера Nginx, используйте команду logs
:
- docker-compose logs
Вывод будет выглядеть следующим образом:
OutputAttaching 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
OutputPausing compose-demo_web_1 ... done
Чтобы возобновить работу после приостановки, используйте команду:
- docker-compose unpause
OutputUnpausing compose-demo_web_1 ... done
Команда stop
останавливает выполнение контейнера, но не уничтожает данные, связанные с вашими контейнерами:
- docker-compose stop
OutputStopping compose-demo_web_1 ... done
Если вы хотите удалить контейнеры, сети и тома, связанные с контейнерной средой, используйте команду down
:
- docker-compose down
OutputRemoving compose-demo_web_1 ... done
Removing network compose-demo_default
Обратите внимание, что при этом не будет удален базовый образ, используемый Docker Compose для запуска нашей среды (в нашем примере nginx:alpine
). Так, при повторном запуске среды с помощью команды docker-compose up
процесс будет намного быстрее, поскольку образ уже находится в вашей системе.
Если вы хотите удалить из системы базовый образ, используйте команду:
- docker image rm nginx:alpine
OutputUntagged: 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
можно найти в официальной документации.
Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.
This textbox defaults to using Markdown to format your answer.
You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!
Sign up for Infrastructure as a Newsletter.
Working on improving health and education, reducing inequality, and spurring economic growth? We'd like to help.
Get paid to write technical tutorials and select a tech-focused charity to receive a matching donation.