Установка Docker Compose в Ubuntu 18.04

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

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

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

Требования

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

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

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

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

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

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

sudo curl -L https://github.com/docker/compose/releases/download/1.21.2/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.21.2, build a133471

Инструмент 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)...
latest: Pulling from library/hello-world
c04b14da8d14: Downloading [==================================================>] c04b14da8d14: Extracting [==================================================>]  c04b14da8d14: Extracting [==================================================>]  c04b14da8d14: Pull complete
Digest: sha256:0256e8a36e2070f7bf2d0b0763dbabdd67798512411de4cdcf9431a1feb60fd9
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 |
. . .

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

1. The Docker client contacted the Docker daemon.
2. The Docker daemon pulled the "hello-world" image from the Docker Hub.
3. The Docker daemon created a new container from that image which runs the executable that produces the output you are currently reading.
4. The Docker daemon streamed that output to the Docker client, which sent it 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: ,

Добавить комментарий