Docker Compose — это инструмент, который позволяет определять многоконтейнерные приложения Docker и управлять ими. Он использует файл YAML для настройки служб, сетей и томов приложения.
Compose можно использовать для разных целей. Развертывание приложений с одним хостом, автоматическое тестирование и локальная разработка — самые популярные варианты использования Docker Compose.
В этом руководстве мы покажем вам, как установить последнюю версию Docker Compose в Ubuntu 18.04, и изучим основные концепции и команды Docker Compose.
Те же инструкции применимы для Ubuntu 16.04 и любого другого дистрибутива на основе Debian, включая Debian, Linux Mint и Elementary OS.
Содержание
Подготовка
Прежде чем продолжить работу с этим руководством, убедитесь, что вы выполнили следующие предварительные требования:
- Вы вошли в систему как пользователь с привилегиями sudo .
- Установите Docker, следуя инструкциям из раздела Как установить и использовать Docker в Ubuntu 18.04 .
Установите Docker Compose в Ubuntu
Установочный пакет Docker Compose доступен в официальных репозиториях Ubuntu 18.04, но он не всегда может быть последней версией. Рекомендуемый подход — установить Docker Compose из репозитория Docker GitHub.
На момент написания этой статьи последней стабильной версией Docker Compose была версия 1.23.1
. Перед загрузкой двоичного файла Compose посетите страницу выпуска репозитория Compose на GitHub и проверьте, доступна ли для загрузки новая версия.
Чтобы установить Docker Compose в Ubuntu 18.04, выполните следующие действия:
-
Загрузите двоичный файл Docker Compose в каталог
/usr/local/bin
с помощью следующей командыcurl
:sudo curl -L "https://github.com/docker/compose/releases/download/1.23.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
-
После завершения загрузки примените разрешения для исполняемых файлов к двоичному файлу Compose:
sudo chmod +x /usr/local/bin/docker-compose
-
Проверьте установку, выполнив следующую команду, которая отобразит версию Compose:
docker-compose --version
Результат будет выглядеть примерно так:
docker-compose version 1.23.1, build b02f1306
Начало работы с Docker Compose
В этом разделе мы покажем, как использовать Docker Compose для настройки многоконтейнерного приложения WordPress в Ubuntu 18.04.
Начните с создания каталога проекта и перехода в него:
mkdir my_app
cd my_app
Запустите текстовый редактор и создайте файл с именем docker-compose.yml
внутри каталога проекта:
nano docker-compose.yml
Вставьте следующий контент:
version: '3.3'
services:
db:
image: mysql:5.7
restart: always
volumes:
- db_data:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: password
MYSQL_DATABASE: wordpress
wordpress:
image: wordpress
restart: always
volumes:
- ./wp_data:/var/www/html
ports:
- "8080:80"
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_NAME: wordpress
WORDPRESS_DB_USER: root
WORDPRESS_DB_PASSWORD: password
depends_on:
- db
volumes:
db_data:
wp_data:
Давайте проанализируем код построчно.
В первой строке мы указываем версию файла Compose . Существует несколько различных версий формата файла Compose с поддержкой определенных выпусков Docker.
Далее мы определяем две службы: db
и wordpress
. Каждая служба запускает один образ и создает отдельный контейнер при запуске docker-compose.
Служба db
:
- Использует образ
mysql:5.7
. Если образ отсутствует в системе, он будет извлечен из общедоступного репозитория Docker Hub. - Использует политику перезапуска
always
которая указывает контейнеру всегда перезапускаться. - Создает именованный том
db_data
чтобы сделать базу данных постоянной. - Определяет переменные среды для образа
mysql:5.7
.
Сервис wordpress
:
- Использует изображение
wordpress
. Если образ отсутствует в вашей системе, Compose извлечет его из общедоступного репозитория Docker Hub. - Использует политику перезапуска
always
которая указывает контейнеру всегда перезапускаться. - Устанавливает каталог
wp_data
на хосте в/var/lib/mysql
внутри контейнера. - Перенаправляет открытый порт 80 на контейнере на порт 8080 на хост-машине.
- Определяет переменные среды для изображения
wordpress
. - Инструкция
depends_on
определяет зависимость между двумя службами. В этом примереdb
будет запущен раньшеwordpress
.
Из каталога проекта запустите приложение WordPress, выполнив следующую команду:
docker-compose up
Результат должен выглядеть примерно так:
...
wordpress_1 | [Sun Sep 23 22:31:43.499055 2018] [mpm_prefork:notice] [pid 1] AH00163: Apache/2.4.25 (Debian) PHP/7.2.10 configured -- resuming normal operations
wordpress_1 | [Sun Sep 23 22:31:43.499796 2018] [core:notice] [pid 1] AH00094: Command line: 'apache2 -D FOREGROUND'
Compose извлечет оба изображения, запустит два контейнера и создаст каталог wp_data
каталоге вашего проекта.
Введите http://0.0.0.0:8080/
в своем браузере, и вы увидите экран установки WordPress.
На этом этапе приложение WordPress запущено, и вы можете начать работу над своей темой или плагином.
Чтобы остановить создание, нажмите CTRL+C
Вы также можете запустить Compose в автономном режиме, передав флаг -d
.
docker-compose up -d
Чтобы проверить запущенные службы, используйте опцию ps
:
docker-compose ps
Name Command State Ports
----------------------------------------------------------------------------------
my_app_db_1 docker-entrypoint.sh mysqld Up 3306/tcp, 33060/tcp
my_app_wordpress_1 docker-entrypoint.sh apach ... Up 0.0.0.0:8080->80/tcp
Когда Compose работает в автономном режиме, чтобы остановить использование служб:
docker-compose stop
Если вы хотите полностью удалить контейнеры, используйте опцию down
:
docker-compose down
Передача переключателя --volumes
также удалит тома данных:
docker-compose down --volumes
Удаление Docker Compose
Если по какой-либо причине вы хотите удалить Docker Compose, вы можете просто удалить двоичный файл, набрав:
sudo rm /usr/local/bin/docker-compose
Выводы
Вы узнали, как установить и использовать Docker Compose в Ubuntu 18.04.
Использование Docker Compose может значительно улучшить ваш рабочий процесс и производительность. Вы можете определить среду разработки с помощью Docker Compose и поделиться ею с соавторами проекта.
Если у вас есть вопросы, оставьте комментарий ниже.