Введение
Docker упрощает процесс управления процессами приложений в контейнерах. Хотя контейнеры в некотором смысле похожи на виртуальные машины, они более легкие и экономичные. Это позволяет разработчикам разбить среду приложения на несколько изолированных сервисов.
Для приложений, зависящих от нескольких сервисов, согласование всех контейнеров для совместного запуска, взаимодействия и завершения работы может быстро стать громоздким. Docker Compose — это инструмент, который позволяет запускать среды с несколькими контейнерами приложений на основе определений, заданных в файле YAML. Он использует определения сервисов для создания полностью настраиваемых сред с несколькими контейнерами, которые могут совместно использовать сети и объемы данных.
В этом руководстве вы продемонстрируете, как установить Docker Compose на сервер Rocky Linux 8 и как начать использовать этот инструмент.
Предварительные условия
Чтобы следовать этой статье, вам понадобится:
- Доступ к локальному компьютеру Rocky Linux 8 или серверу разработки от имени пользователя без полномочий root с привилегиями sudo. Если вы используете удаленный сервер, желательно установить активный брандмауэр. Чтобы настроить их, обратитесь к нашему Руководству по первоначальной настройке сервера для Rocky Linux 8.
- Docker установлен на вашем сервере или локальном компьютере, следуя Steps 1 and 2 статьи «Как установить и использовать Docker в Rocky Linux 8».
Шаг 1 — Установка Docker Compose
Чтобы убедиться, что вы получаете самую последнюю стабильную версию Docker Compose, загрузите это программное обеспечение из официального репозитория Docker.
Сначала давайте обновим базу данных пакетов:
1 |
<ol><li data-prefix="$"> <span class="token function">sudo</span> dnf проверка обновления</li></ol> |
Затем добавьте официальный репозиторий Docker, если вы не сделали этого во время установки Docker:
1
<ol><li data-prefix="$"> <span class="token function">sudo</span> dnf config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo</li></ol>
Хотя в Docker нет специального репозитория Rocky Linux, Rocky Linux основан на CentOS и может использовать тот же репозиторий. Теперь вы можете установить Docker Compose, плагин для Docker:
1
<ol><li data-prefix="$"> <span class="token function">sudo</span> dnf <span class="token function">установить</span> плагин 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.10.2</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 в Rocky Linux 8». Вернувшись назад и выполнив этот шаг, вы получите разрешения на запуск команд 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
можно найти в официальной документации.