береженого кольт бережет
береженого кольт бережет

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

Docker — это отличный инструмент для автоматизации развертывания приложений Linux внутри контейнеров ПО, но для использования всех его возможностей необходимо, чтобы каждый компонент приложения запускался в своем собственном контейнере. Для сложных приложений с большим количеством компонентов организация совместных запуска, коммуникации и остановки всех контейнеров может быстро стать очень непростой и запутанной задачей.

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

В этом обучающем руководстве вы установите последнюю версию Docker Compose для управления мультиконтейнерными приложениями на сервере Debian 10.

Предварительные требования

Для его выполнения вам потребуется следующее:

  • Сервер Debian 10 с пользователем sudo без привилегий root.
  • Установленный Docker.

Примечание. Хотя в разделе «Предварительные требования» содержатся указания по установке Docker в Debian 10, приведенные в этой статье команды docker должны работать с другими операционными системами, если Docker установлен.

Установка Docker Compose

Хотя Docker Compose можно установить из официальных репозиториев Debian, эти версии немного отстают от последней, и поэтому в данном обучающем руководстве мы будем устанавливать Docker из репозитория GitHub. Следующая команда немного отличается, чем приведенная на странице Выпуски. Мы используем флаг -o для указания выходного файла вместо переадресации вывода. Такой синтаксис позволяет избежать ошибки «отказ в разрешении» при использовании sudo.

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

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

После этого мы настроим разрешения:

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

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

$ docker-compose --version

В результате должна быть выведена установленная нами версия:

Output

docker-compose version 1.25.3, build d4d1b42b

Теперь, когда мы установили Docker Compose, мы можем запустить пример «Hello World».

Запуск контейнера с помощью Docker Compose

В общедоступном реестре Docker, Docker Hub, содержится образ Hello World, используемый для демонстрации и тестирования. Это минимальная конфигурация, необходимая для запуска контейнера с помощью Docker: файл YAML, вызывающий один образ. Мы создадим эту минимальную конфигурацию для запуска нашего контейнера hello-world.

Вначале создайте директорию для файла YAML и перейдите в нее:

$ mkdir hello-world
$ cd hello-world

Затем создайте файл YAML:

$ nano docker-compose.yml

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

docker-compose.yml

my-test:
 image: hello-world

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

Вы можете вручную просмотреть образы в нашей системе с помощью команды docker images:

$ docker images

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

Output

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE

Оставаясь в директории ~/hello-world, запустите следующую команду:

$ docker-compose up

Если при первом запуске этой команды локальный образ с именем hello-world отсутствует, Docker Compose извлечет его из публичного репозитория на Docker Hub:

Output

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, что, в свою очередь, подтверждает, что установка, выполнена успешно:

Output

. . .
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 |
. . .

Затем программа отображает объяснение того, что она сделала:

Output 

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 продолжают работать, пока команда остается активной, поэтому после завершения работы hello контейнер останавливается. Соответственно этому, когда мы смотрим активные процессы, заголовки столбцов будут отображаться, но контейнер hello-world не будет отображаться в списке, потому что он не запущен:

$ docker ps
Output

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS               NAMES

Чтобы посмотреть информацию о контейнере, которая потребуется на следующем шаге, используйте флаг -a. Эта команда выводит все контейнеры, а не только активные:

$ docker ps -a
Output

CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS               NAMES
06069fd5ca23        hello-world         "/hello"            35 minutes ago      Exited (0) 35 minutes ago                       hello-world_my-test_1

Эта команда отображает необходимую информацию для удаления контейнера после завершения работы с ним.

Удаление образа (необязательно)

Чтобы избежать необязательного использования дискового пространства, мы удалим локальный образ. Для этого нам потребуется удалить все контейнеры, которые содержат образ, с помощью команды docker rm, после которой следует CONTAINER ID или NAME. В следующем примере мы используем идентификатор CONTAINER ID из команды docker ps -a, которую мы только что запускали. Обязательно замените идентификатор на идентификатор вашего контейнера:

$ docker rm 06069fd5ca23

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

$ docker rmi hello-world

Заключение

Вы установили Docker Compose в Debian 10, протестировали установку на примере приложения Hello World и удалили тестовый образ и контейнер.