Поиск по сайту:

Как установить Docker Compose на Ubuntu 18.04


Введение

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

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

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

Предпосылки

Чтобы следовать этой статье, вам понадобится сервер Ubuntu 18.04 со следующим:

  • Пользователь без полномочий root с правами sudo (начальная настройка сервера с Ubuntu 18.04 объясняет, как это настроить).
  • Docker установлен в соответствии с инструкциями из шага 1 и шага 2 инструкции по установке и использованию Docker в Ubuntu 18.04.

Примечание. Это руководство поможет вам установить Docker Compose v1, в котором используется docker-compose. Начиная с Docker Compose v2, Docker перешел на использование команды подключаемого модуля CLI compose, как описано в нашей официальной документации Docker по совместимости команд между новым compose и старым docker-compose.

Шаг 1 — Установка Docker Compose

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

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

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

Далее установите разрешения:

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

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

  1. docker-compose --version

Это распечатает версию, которую вы установили:

Output
docker-compose version 1.29.2, build 5becea4c

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

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

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

Во-первых, вы создадите каталог для файла YAML и переместитесь в него:

  1. mkdir hello-world
  2. cd hello-world

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

  1. nano docker-compose.yml

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

my-test:
    image: hello-world

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

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

  1. docker images

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

Output
REPOSITORY TAG IMAGE ID CREATED SIZE

Теперь, все еще находясь в каталоге ~/hello-world, вы должны выполнить следующую команду:

  1. docker-compose up

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

Output
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, это означает, что вы пропустили шаг 2 инструкции «Как установить и использовать Docker в Ubuntu 18.04». Вернувшись назад и выполнив этот шаг, вы получите разрешения на выполнение команд Docker без sudo.

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

  1. docker ps
Output
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES

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

  1. docker ps -a
Output
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, за которой следует либо ИДЕНТИФИКАТОР КОНТЕЙНЕРА, либо ИМЯ. Ниже вы используете ИДЕНТИФИКАТОР КОНТЕЙНЕРА из команды docker ps -a, которую вы только что запустили. Обязательно подставьте ID своего контейнера:

  1. docker rm 06069fd5ca23

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

  1. docker rmi hello-world

Заключение

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

Хотя пример Hello World подтвердил вашу установку, простая конфигурация не демонстрирует одно из основных преимуществ Docker Compose — возможность запускать и отключать группу контейнеров Docker одновременно. Чтобы увидеть мощь Docker Compose в действии, вы можете ознакомиться с этим практическим примером Как настроить среду непрерывного тестирования интеграции с Docker и Docker Compose в Ubuntu 16.04 (примечание: эта статья предназначена для Ubuntu 16.04, а не 18.04)