Введение
Docker упрощает процесс управления процессами приложений в контейнерах. Хотя контейнеры в некотором смысле похожи на виртуальные машины, они более легкие и экономичные. Это позволяет разработчикам разбить среду приложения на несколько изолированных сервисов.
Для приложений, зависящих от нескольких сервисов, согласование всех контейнеров для совместного запуска, взаимодействия и завершения работы может быстро стать громоздким. Docker Compose — это инструмент, который позволяет запускать среды с несколькими контейнерами приложений на основе определений, заданных в файле YAML. Он использует определения сервисов для создания полностью настраиваемых сред с несколькими контейнерами, которые могут совместно использовать сети и объемы данных.
В этом руководстве вы продемонстрируете, как установить Docker Compose на сервер Ubuntu 22.04 и как начать использовать этот инструмент.
Предварительные условия
Чтобы следовать этой статье, вам понадобится:
- Доступ к локальному компьютеру Ubuntu 22.04 или серверу разработки от имени пользователя без полномочий root с привилегиями sudo. Если вы используете удаленный сервер, желательно установить активный брандмауэр. Чтобы настроить их, обратитесь к нашему Руководству по первоначальной настройке сервера для Ubuntu 22.04.
- Docker установлен на вашем сервере или локальном компьютере, следуя Steps 1 and 2 статьи «Как установить и использовать Docker в Ubuntu 22.04».
Note: Начиная с Docker Compose v2, Docker перешел на использование команды плагина CLI compose
, а не на исходную docker-compose
, как описано в нашей предыдущей версии этого руководства для Ubuntu 20.04. Хотя установка отличается, в целом фактическое использование включает удаление дефиса из вызовов docker-compose
, чтобы стать docker compose
. Для получения полной информации о совместимости ознакомьтесь с официальной документацией Docker по совместимости команд между новым compose
и старым docker-compose
.
Шаг 1 — Установка Docker Compose
Чтобы убедиться, что вы получаете самую последнюю стабильную версию Docker Compose, загрузите это программное обеспечение из официального репозитория Github.
Сначала подтвердите последнюю версию, доступную на странице выпусков. На момент написания этой статьи самая последняя стабильная версия — 2.3.3
.
Используйте следующую команду для загрузки:
1 |
<ol><li data-prefix="$"> <span class="token function">mkdir</span> <span class="token parameter variable">-p</span> ~/.docker/cli-plugins/</li><li data-prefix="$"> <span class="token function">локон</span> <span class="token parameter variable">-SL</span> https://github.com/docker/compose/releases/download/v<mark> 2.3.3</mark> /docker-compose-linux-x86_64 <span class="token parameter variable">-o</span> ~/.docker/cli-plugins/docker-compose</li></ol> |
Затем установите правильные разрешения, чтобы команда docker compose
была исполняемой:
1
<ol><li data-prefix="$"> <span class="token function">chmod</span> +x ~/.docker/cli-plugins/docker-compose</li></ol>
Чтобы убедиться, что установка прошла успешно, вы можете запустить:
1
<ol><li data-prefix="$"> версия <span class="token function">Docker</span> Compose</li></ol>
Вы увидите вывод, похожий на этот:
1
<div class="secondary-code-label" title="Выход"> Выход</div> Docker Compose версия v<mark> 2.3.3</mark>
Docker Compose теперь успешно установлен в вашей системе. В следующем разделе вы увидите, как настроить файл docker-compose.yml
и запустить контейнерную среду с помощью этого инструмента.
Шаг 2 — Настройка файла docker-compose.yml
Чтобы продемонстрировать, как настроить файл docker-compose.yml
и работать с Docker Compose, вы создадите среду веб-сервера, используя официальный образ Nginx из Docker Hub, общедоступного реестра Docker. Эта контейнерная среда будет обслуживать один статический HTML-файл.
Начните с создания нового каталога в вашей домашней папке и затем перейдите в него:
1
<ol><li data-prefix="$"> <span class="token function">мкдир</span><mark> ~/compose-демо</mark></li><li data-prefix="$"> <span class="token builtin class-name">CD</span><mark> ~/compose-демо</mark></li></ol>
В этом каталоге настройте папку приложения, которая будет служить корнем документов для вашей среды Nginx:
1
<ol><li data-prefix="$"> <span class="token function">мкдир</span><mark> приложение</mark></li></ol>
Используя предпочитаемый вами текстовый редактор, создайте новый файл index.html
в папке app
:
1
<ol><li data-prefix="$"> <span class="token function">нано-</span> приложение/index.html</li></ol>
Поместите в этот файл следующее содержимое:
~/compose-demo/app/index.html
1
<span class="token doctype"><span class="token punctuation"><!--</span--> <span class="token doctype-tag">doctype</span> <span class="token name">html</span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span> html</span> <span class="token attr-name">lang</span> <span class="token attr-value"><span class="token punctuation attr-equals">=</span> <span class="token punctuation">"</span> en <span class="token punctuation">"</span></span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span> head</span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span> meta</span> <span class="token attr-name">charset</span> <span class="token attr-value"><span class="token punctuation attr-equals">=</span> <span class="token punctuation">"</span> utf-8 <span class="token punctuation">"</span></span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span> title</span> <span class="token punctuation">></span></span> Docker Compose Demo <span class="token tag"><span class="token tag"><span class="token punctuation"><!--</span--> title</span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span> link</span> <span class="token attr-name">rel</span> <span class="token attr-value"><span class="token punctuation attr-equals">=</span> <span class="token punctuation">"</span> stylesheet <span class="token punctuation">"</span></span> <span class="token attr-name">href</span> <span class="token attr-value"><span class="token punctuation attr-equals">=</span> <span class="token punctuation">"</span> https://cdn.jsdelivr.net/gh/kognise/water.css@latest/dist/dark.min.css <span class="token punctuation">"</span></span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><!--</span--> head</span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span> body</span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span> h1</span> <span class="token punctuation">></span></span> This is a Docker Compose Demo Page. <span class="token tag"><span class="token tag"><span class="token punctuation"><!--</span--> h1</span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span> p</span> <span class="token punctuation">></span></span> This content is being served by an Nginx container. <span class="token tag"><span class="token tag"><span class="token punctuation"><!--</span--> p</span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><!--</span--> body</span> <span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><!--</span--> html</span> <span class="token punctuation">></span></span></span></span></span></span></span></span></span>
Сохраните и закройте файл, когда закончите. Если вы используете nano
, вы можете сделать это, набрав CTRL+X
, затем Y
и ENTER
для подтверждения.
Затем создайте файл docker-compose.yml
:
1
<ol><li data-prefix="$"> <span class="token function">нано</span> docker-compose.yml</li></ol>
Вставьте следующее содержимое в файл docker-compose.yml
:
docker-compose.yml
1
<span class="token key atrule">version</span> <span class="token punctuation">:</span> <span class="token string">'3.7'</span> <span class="token key atrule">services</span> <span class="token punctuation">:</span> <span class="token key atrule">web</span> <span class="token punctuation">:</span> <span class="token key atrule">image</span> <span class="token punctuation">:</span> nginx <span class="token punctuation">:</span> alpine <span class="token key atrule">ports</span> <span class="token punctuation">:</span> <span class="token punctuation">-</span> <span class="token string">"8000:80"</span> <span class="token key atrule">volumes</span> <span class="token punctuation">:</span> <span class="token punctuation">-</span> ./app <span class="token punctuation">:</span> /usr/share/nginx/html
Файл docker-compose.yml
обычно начинается с определения version
. Это сообщит 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
службы и запустит контейнерную среду в фоновом режиме:
1
<ol><li data-prefix="$"> <span class="token function">докер</span> составить <span class="token parameter variable">-d</span></li></ol>
Docker Compose сначала найдет указанный образ в вашей локальной системе, и если он не сможет найти образ, он загрузит его из Docker Hub. Вы увидите такой вывод:
1
<div class="secondary-code-label" title="Выход"> Выход</div> Создание сети»<mark> compose-demo_default</mark> " с драйвером по умолчанию Извлечение веб-сайта (nginx:alpine)... alpine: Извлечение из библиотеки/nginx cbdbe7a5bc2a: Извлечение завершено 10c113fb0c77: Извлечение завершено 9ba64393807b: Извлечение завершено c829a9c40ab2: Извлечение завершено 61d685417b2f: Извлечение завершено Дайджест: sha256:57254039c631 3fe8c53f1acbf15657ec9616a813397b74b063e32443427c5502 Статус: Загружено новый образ для nginx:alpine Создание<mark> compose-demo_web_1</mark> ... сделанный
Note: Если вы столкнулись с ошибкой разрешения, касающейся сокета Docker, это означает, что вы пропустили шаг 2 инструкции «Как установить и использовать Docker в Ubuntu 22.04». Вернувшись назад и выполнив этот шаг, вы получите разрешения на запуск команд Docker без sudo
.
Теперь ваша среда запущена и работает в фоновом режиме. Чтобы убедиться, что контейнер активен, вы можете запустить:
1
<ol><li data-prefix="$"> <span class="token function">докер</span> составить <span class="token function">PS</span></li></ol>
Эта команда покажет вам информацию о запущенных контейнерах и их состоянии, а также о любых существующих в данный момент перенаправлениях портов:
1
<div class="secondary-code-label" title="Выход"> Выход</div> Имя Состояние команды Порты ---------------------------------------------- ------------------------------------<mark> compose-demo_web_1</mark> /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.
Шаг 4. Знакомство с командами Docker Compose
Вы видели, как настроить файл docker-compose.yml
и настроить свою среду с помощью docker compose up
. Теперь вы увидите, как использовать команды Docker Compose для управления и взаимодействия с вашей контейнерной средой.
Чтобы проверить журналы, созданные вашим контейнером Nginx, вы можете использовать команду logs
:
1
<ol><li data-prefix="$"> <span class="token function">Docker</span> составляет журналы</li></ol>
Вы увидите вывод, похожий на этот:
1
<div class="secondary-code-label" title="Выход"> Выход</div> Прикрепление к<mark> compose-demo_web_1</mark> веб_1 | /docker-entrypoint.sh: /docker-entrypoint.d/ не пуст, попытается выполнить настройку web_1 | /docker-entrypoint.sh: поиск сценариев оболочки в /docker-entrypoint.d/web_1 | /docker-entrypoint.sh: запуск /docker-entrypoint.d/10-listen-on-ipv6-by-default.sh web_1 | 10-listen-on-ipv6-by-default.sh: Получение контрольной суммы /etc/nginx/conf.d/default.conf web_1 | 10-listen-on-ipv6-by-default.sh: включено прослушивание IPv6 в /etc/nginx/conf.d/default.conf web_1 | /docker-entrypoint.sh: запуск /docker-entrypoint.d/20-envsubst-on-templates.sh web_1 | /docker-entrypoint.sh: настройка завершена; готов к запуску web_1 | 172.22.0.1 - - [02/июня/2020:10:47:13 +0000] "GET / HTTP/1.1" 200 353 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, например Gecko) ) Chrome/83.0.4103.61 Safari/537.36" "-"
Если вы хотите приостановить выполнение среды без изменения текущего состояния ваших контейнеров, вы можете использовать:
1
<ol><li data-prefix="$"> <span class="token function">докер</span> создать паузу</li></ol>
1
<div class="secondary-code-label" title="Выход"> Выход</div> Пауза<mark> compose-demo_web_1</mark> ... сделанный
Чтобы возобновить выполнение после паузы:
1
<ol><li data-prefix="$"> <span class="token function">Docker</span> Compose возобновить паузу</li></ol>
1
<div class="secondary-code-label" title="Выход"> Выход</div> Возобновление паузы<mark> compose-demo_web_1</mark> ... сделанный
Команда stop
прекратит выполнение контейнера, но не уничтожит никакие данные, связанные с вашими контейнерами:
1
<ol><li data-prefix="$"> <span class="token function">докер</span> написать остановку</li></ol>
1
<div class="secondary-code-label" title="Выход"> Выход</div> Остановка<mark> compose-demo_web_1</mark> ... сделанный
Если вы хотите удалить контейнеры, сети и тома, связанные с этой контейнерной средой, используйте команду down
:
1
<ol><li data-prefix="$"> <span class="token function">докер</span> компоновка</li></ol>
1
<div class="secondary-code-label" title="Выход"> Выход</div> Удаление<mark> compose-demo_web_1</mark> ... сделано Удаление сети<mark> compose-demo_default</mark>
Обратите внимание, что это не приведет к удалению базового образа, используемого Docker Compose для разгона вашей среды (в вашем случае nginx:alpine
). Таким образом, всякий раз, когда вы снова запускаете свою среду с помощью docker compose up
, процесс будет намного быстрее, поскольку образ уже находится в вашей системе.
Если вы также хотите удалить базовый образ из вашей системы, вы можете использовать:
1
<ol><li data-prefix="$"> образ <span class="token function">докера</span> <span class="token function">rm</span> nginx:alpine</li></ol>
1
<div class="secondary-code-label" title="Выход"> Выход</div> Без тегов: nginx:alpine Без тегов: nginx@sha256:b89a6ccbda39576ad23fd079978c967cecc6b170db6e7ff8a769bf2259a71912 Удалено: sha256:7d0cdcc60a96a5124763fddf5d534d058ad7d 0d8d4c3b8be2aefedf4267d0270 Удалено: sha256:05a0eaca15d731e0029a7604ef54f0dda3b736d4e987e6ac87b91ac7aac03ab1 Удален: sha256:c6bbc4bdac396583641cb44cd3512 6b2c195be8fe1ac5e6c577c14752bbe9157 Удалено: sha256:35789b1e1a362b0da8392ca7d5759ef08b9a6b7141cc1521570f984dc7905eb6 Удалено: sha256:a3efaa65ec344c882fe5 d543a392a54c4ceacd1efd91662d06964211b1be4c08 Удален: sha256:3e207b409db364b595ba862cdc12be96dcdad8e36c59a03b7b3b61c946a5741a
Note . Более подробную информацию о командах Docker можно найти в нашем руководстве «Как установить и использовать Docker».
Заключение
В этом руководстве вы узнали, как установить Docker Compose и настроить контейнерную среду на основе образа веб-сервера Nginx. Вы также увидели, как управлять этой средой с помощью команд Compose.
Полную информацию обо всех доступных командах docker compose
можно найти в официальной документации.