Установка Docker Compose в Debian 9

Docker – очень полезный инструмент, но чтобы использовать его возможности в полной мере, нужно создать отдельный контейнер для каждого компонента приложения. Однако при работе со сложными приложениями, состоящими из большого количества компонентов, управлять контейнерами и синхронизировать их работу – задача довольно непростая.

Сообщество Docker использовало для решения этой проблемы средство под названием Fig, которое позволяет использовать единый YAML-файл для планирования и организации работы контейнеров и конфигураций Docker. Но со временем команда Docker решила разработать собственное средство, основанное на исходном коде Fig. Так появился Docker Compose – инструмент для определения и запуска мультиконтейнерных приложений Docker.

Данный мануал поможет установить Docker Compose.

Требования

  • Сервер Debian 9, настроенный по этому мануалу.
  • Предустановленная система Docker (инструкции по установке можно найти здесь).

Примечание: Мануал предназначен для Debian 9, однако команда docker работает аналогичным образом и в других дистрибутивах.

1: Установка Docker Compose

Установить Docker Compose можно из официального репозитория Debian, однако тогда вы получите не самую новую версию. Потому лучше  установить Docker Compose из GitHub-репозитория Docker.

Ссылка в нижеприведённой команде несколько отличается от ссылки, предложенной на странице релизов. Флаг –о позволяет указать файл, в который нужно поместить вывод. Такой синтаксис устраняет ошибки, связанные с конфликтом привилегий при использовании sudo.

Проверьте текущий релиз и при необходимости обновите ссылку в команде.

sudo curl -L https://github.com/docker/compose/releases/download/1.22.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose

Установите права:

sudo chmod +x /usr/local/bin/docker-compose

Запросите версию программы, чтобы убедиться, что установка прошла успешно:

docker-compose --version

Команда должна вернуть:

docker-compose version 1.22.0, build f46880fe

Инструмент Docker Compose успешно установлен. Теперь можно создать тестовый контейнер для программы Hello World, чтобы проверить работу Docker Compose.

2: Запуск контейнера при помощи Docker Compose

Официальный открытый ресурс Docker, Docker Hub, предлагает образ простого приложения Hello World. Он представляет собой минимальную конфигурацию (YAML-файл), необходимую для запуска контейнера в Docker Compose. Этот образ можно использовать, чтобы протестировать Docker Compose.

Создайте каталог для YAML-файла и перейдите в него:

mkdir hello-world
cd hello-world

Создайте YAML-файл:

nano docker-compose.yml

Поместите в файл следующий код, затем сохраните и закройте его:

my-test:
image: hello-world

Первая строка будет использоваться как часть имени контейнера. Вторая строка указывает, какой образ использовать для создания контейнера. Команда docker-compose up будет искать в локальных образах образ hello-world.

Список локальных образов можно просмотреть вручную:

docker images

Если локальных образов нет, команда вернёт только заголовки столбцов:

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE

В каталоге ~/hello-world выполните следующую команду, чтобы создать контейнер:

docker-compose up

Если при первом запуске команда не обнаружит нужного образа на локальной машине, образ будет загружен из официального репозитория Docker Hub.

Pulling my-test (hello-world:)...
latest: Pulling from library/hello-world
9db2ca6ccae0: Pull complete
Digest: sha256:4b8ff392a12ed9ea17784bd3c9a8b1fa3299cac44aca35a85c90c5e3c7afacdc
Status: Downloaded newer image for hello-world:latest
. . .

Загрузив образ, docker-compose создаст контейнер и запустит программу hello-world. Если всё выполнено верно, на экране появится такой вывод:

. . .
Creating helloworld_my-test_1...
Attaching to helloworld_my-test_1
my-test_1 |
my-test_1 | Hello from Docker.
my-test_1 | This message shows that your installation appears to be working correctly.
my-test_1 |
. . .

Затем команда выведет описание своих действий:

To generate this message, Docker took the following steps:
my-test_1  |  1. The Docker client contacted the Docker daemon.
my-test_1  |  2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
my-test_1  |     (amd64)
my-test_1  |  3. The Docker daemon created a new container from that image which runs the
my-test_1  |     executable that produces the output you are currently reading.
my-test_1  |  4. The Docker daemon streamed that output to the Docker client, which sent it
my-test_1  |     to your terminal.

  • Клиент Docker подключается к демону Docker.
  • Демон загружает образ hello-world с Docker Hub.
  • Демон создаёт из этого образа новый контейнер.
  • Демон передаёт полученный вывод клиенту Docker, а он возвращает его в терминал.

Контейнер Docker работает до тех пор, пока работает программа, запущенная в нём. Если вы остановите программу hello, контейнер тоже остановится. Запросите список активных контейнеров; программы hello-world среди них не будет.

docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS               NAMES

Чтобы просмотреть все существующие контейнеры, используйте флаг –а:

docker ps -a
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS            NAMES

06069fd5ca23        hello-world         "/hello"            35 minutes ago      Exited (0) 35 minutes ago                    drunk_payne

3: Удаление образа (опционально)

Чтобы не тратить дисковое пространство, можно удалить локальный образ. Для этого нужно удалить все связанные с ним контейнеры с помощью команды docker rm; при этом нужно указать имя или ID контейнера (его можно найти в выводе docker ps –a).

docker rm 06069fd5ca23

Когда все контейнеры, связанные с образом, будут удалены, вы сможете удалить и сам образ:

docker rmi hello-world

Заключение

Теперь вы умеете устанавливать Docker Compose и управлять контейнерами с помощью этого инструмента.

Данное руководство охватывает только основы работы с Docker Compose. К сожалению, оно не рассматривает одну из самых важных функций Docker Compose – управление группами контейнеров.

Читайте также: Тестирование приложения в непрерывной интеграции с Docker и Docker Compose в Ubuntu 16.04

Tags: , , ,