Введение
Контейнеризация в последние годы получила огромную популярность в сфере программных технологий. Это во многом связано с Docker, которая представляет собой платформу контейнеризации, упрощающую управление процессами внутри контейнеров.
Контейнеры представляют собой легковесные, виртуализированные, портативные, программно-определяемые стандартизированные среды, которые позволяют программному обеспечению работать изолированно от другого ПО, запущенного на физическом хосте. Эта функция портативности позволяет разработчикам модульно разделять свои приложения на изолированные службы. Кроме того, их можно обслуживать независимо, что дает возможность для масштабирования.
Хотя разделение приложения на несколько служб — это, безусловно, отличная идея, оно сопряжено с дополнительными расходами на управление несколькими контейнерами. Вам необходимо обеспечить их взаимодействие, одновременный запуск и завершение работы. Благодаря инструменту под названием Docker Compose, это становится простой задачей. Docker Compose позволяет разработчикам запускать многоконтейнерные приложения Docker, используя правила, определенные в файле YAML. Файл YAML содержит определения служб приложения, а также способы совместного использования ими томов данных и сетей. После определения служб вы можете запустить их все одной командой. В этом руководстве мы покажем вам, как установить, настроить и начать работу с Docker Compose на Ubuntu 20.04.
Предварительные требования
-
Поскольку это практическое руководство, у вас должна быть установлена операционная система Ubuntu 20.04. Также вам понадобится пользователь без прав root с привилегиями sudo. Вот пошаговое руководство, которое поможет вам настроить сервер Ubuntu. Следуйте этому руководству, чтобы настроить файл sudoers.
-
Вам также необходимо установить Docker. Пожалуйста, обратитесь к этому руководству по теме как установить и использовать Docker на Ubuntu 18.04.
Шаг 1. Установка Docker Compose
Мы скачаем последнюю стабильную версию Docker Compose из его официального репозитория на GitHub. Вы можете узнать последнюю версию на странице релизов, на момент написания этого руководства последней версией является 1.28.5.
Сначала войдите на свой сервер Ubuntu под пользователем без прав root с привилегиями sudo и введите следующую команду. Она загружает последний релиз (1.28.5) и сохраняет исполняемый файл в каталоге /usr/local/bin/docker-compose. Это делает его глобально доступным как docker-compose:
|
1 |
sudo curl -L "https://github.com/docker/compose/releases/download/1.28.5/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose |
После загрузки введите следующую команду, чтобы установить соответствующие права для запуска команды docker-compose:
|
1 |
sudo chmod +x /usr/local/bin/docker-compose |
Теперь убедитесь, что установка прошла успешно и команду можно вызвать, выполнив следующую команду:
|
1 |
docker-compose –version |
Вы должны получить следующий вывод:

This confirms that Docker Compose has been successfully installed on your system.
Шаг 2. Создание файла docker-compose.yml
Чтобы помочь вам понять, как работать с docker-compose.yml, мы настроим среду веб-сервера, используя официальный Nginx image из Docker Hub. После развертывания мы сможем отдавать базовую HTML-страницу из контейнера.
Мы создадим рабочий каталог в домашней папке, в которой будем работать. Введите следующую команду для создания каталога:
|
1 |
mkdir ~/compose-example |
Затем перейдите в этот каталог:
|
1 |
cd ~/compose-example |
Находясь в каталоге, создайте папку приложения, которая будет корневым каталогом документов для среды Nginx. Мы можем назвать эту папку app:
|
1 |
mkdir app |
- Создание HTML-страницы
Давайте воспользуемся текстовым редактором nano, чтобы создать файл index.html внутри папки app:
|
1 |
nano app/index.html |
Затем добавьте в файл следующий HTML-код:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
<!DOCTYPE html> <html lang="ru"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="description" content=""> <meta name="generator" content="Hugo 0.80.0"> <title>Пример Docker Compose</title> <!-- Базовый CSS Bootstrap --> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0-beta2/dist/css/bootstrap.min.css" rel="stylesheet" crossorigin="anonymous"> </head> <body> <main> <section class="py-5 text-center container"> <div class="row py-lg-5"> <div class="col-lg-6 col-md-8 mx-auto"> <h1 class="fw-light">Отличный пример Docker Compose с CloudSigma</h1> <p class="h4"> Это простая статическая HTML-страница. </p> <p class="lead text-muted"> Эта страница обслуживается контейнером Nginx Docker, созданным с помощью <b>docker-compose </b> </p> </div> </div> </section> </main> </body> </html> |
Чтобы сохранить файл, нажмите CTRL +O, ENTER. Затем закройте с помощью CTRL +X. Далее мы создадим docker-compose.yml файл в корне нашего проекта.
- Хостинг HTML-страницы с помощью docker-compose
Затем введите следующую команду, чтобы открыть файл с помощью редактора nano :
|
1 |
nano docker-compose.yml |
После этого добавьте следующий фрагмент кода внутрь файла:
|
1 2 3 4 5 6 7 8 |
version: '3.7' services: webserver: image: nginx:alpine ports: - "8000:80" volumes: - ./app:/usr/share/nginx/html |
Файл docker-compose.yml файл начинается с номера версии, который указывает Docker Compose, какую версию конфигурации мы используем. Перейдите по этой ссылке, чтобы узнать больше о Docker Compose versioning.
После номера версии идет блок services, содержащий службы, из которых состоит окружение. В этом руководстве мы указали только одну службу под названием webserver. webserver служба будет использовать образ nginx:alpine. Мы также определили перенаправление портов 8000:80. Это означает, что все запросы с порта 8000 на хост-машине будут перенаправляться в контейнер webserver на порт 80, где запущен Nginx.
Директива volumes позволяет создать общий том между хост-машиной и контейнером, который мы можем использовать для сохранения данных. В нашем yml фрагменте кода мы делаем общим локальный каталог app с контейнером. Внутри контейнера он будет расположен по пути /usr/share/nginx/html. Таким образом, он перезаписывает корневой каталог документов по умолчанию для Nginx. Теперь вы можете сохранить и закрыть файл.
К этому моменту вы создали пример веб-страницы HTML и файл docker-compose.yml с инструкциями по сборке контейнеризированного окружения веб-сервера. Давайте посмотрим, как запустить эту конфигурацию на следующем шаге.
Шаг 3. Выполнение команды Docker Compose
На этом шаге мы запустим команду для запуска нашего контейнеризированного окружения. Ниже приведена единственная команда, которая инициализирует процесс загрузки образов Docker, создаст контейнер для службы webserver и запустит контейнеризированное окружение в фоновом режиме:
|
1 |
docker-compose up -d |
Docker разработан быстрым и эффективным, поэтому при запуске вышеуказанной команды он сначала проверяет вашу локальную систему на наличие определенного образа. Если он отсутствует, он загрузит его из репозитория Docker Hub. Вывод должен быть похож на следующий:

Когда команда завершит выполнение, она запустит окружение контейнера в фоновом режиме. Вы можете убедиться, что оно работает, с помощью команды:
|
1 |
docker-compose ps |
Вы должны получить похожий вывод:

Если вы перейдете по IP-адресу или доменному имени вашего сервера и добавите порт 8000, то есть server_domain_or_IP:8000, вы сможете увидеть созданную нами примерную HTML-страницу:

Если вы помните, мы настроили общий том между контейнером и хост-системой. Это синхронизирует файлы в контейнере с файлами на хост-системе. Таким образом, если вы внесете изменения в файл index.html, он автоматически синхронизируется с контейнером и отобразится при перезагрузке страницы в браузере. Вы можете попробовать сделать это с помощью редактора nano. Давайте изучим еще несколько команд на следующем шаге.
Шаг 4. Дополнительные команды Docker Compose для управления окружениями контейнеров
Теперь, когда вы успешно развернули веб-страницу с помощью одной команды docker-compose-up, давайте рассмотрим некоторые дополнительные команды, которые могут быть полезны при управлении контейнеризированными окружениями.
Мы начнем с команды logs. Логи могут иметь решающее значение при устранении неполадок в работе вашего приложения. Сначала запустите следующую команду для просмотра логов, созданных контейнером Nginx:
|
1 |
docker-compose logs |
Вот пример вывода логов:

Вы можете приостановить выполнение окружения без изменения состояния контейнеров с помощью команды:
|
1 |
docker-compose pause |
![]()
Затем, чтобы возобновить выполнение, используйте команду:
|
1 |
docker-compose unpause |
![]()
Возможно, вы захотите остановить контейнеры без удаления их данных. Для этого используйте следующую команду:
|
1 |
docker-compose stop |
![]()
Чтобы удалить контейнеры, сети и тома, связанные с контейнеризированным окружением, используйте команду:
|
1 |
docker-compose down |
![]()
Имейте в виду, что приведенная выше команда не удаляет базовые образы, используемые Docker Compose для запуска окружения. Это обеспечивает более быструю сборку при запуске окружения, так как проверяется наличие подходящих образов на локальной машине. Если вы хотите полностью удалить базовый образ, вам необходимо указать это в команде. В нашем примере мы можем удалить nginx:alpine образ с помощью команды:
|
1 |
docker image rm nginx:alpine |

Наконец, вы можете найти больше команд в официальном разделе Docker Compose Command-line reference документации.
Заключение
В этом руководстве вы установили Docker Compose на Ubuntu 20.04, создали контейнеризированное окружение на основе образа веб-сервера Nginx и узнали, как управлять различными службами с помощью команд Docker Compose.
Если вы хотите узнать, как развернуть реальное динамическое приложение, зависящее от нескольких контейнеров, пожалуйста, прочитайте наше руководство по развертыванию Laravel, Nginx и MySQL с помощью Docker Compose. Вы также можете найти полный список команд docker-compose в официальной документации Docker Compose.
Приятной работы!
Комментарии
Комментариев пока нет. Будьте первым.