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

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

Введение

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

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

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

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

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

После установки всех необходимых компонентов мы сможем двигаться дальше.

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

Хотя мы можем установить Docker Compose из официальных репозиториев Ubuntu, там не представлены самые последние версии, поэтому мы будем устанавливать Docker Compose из репозитория Docker на GitHub. Команда ниже немного отличается от команды, которую вы найдете на странице Releases. Благодаря использованию флага -o для указания файла вывода вместо перенаправления вывода, этот синтаксис позволяет избежать ошибки отсутствия прав доступа, возникающую при использовании 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

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

Output

docker-compose version 1.21.2, build a133471

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

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

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

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

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 не будет появляться в списке, поскольку он не запущен.

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                       drunk_payne

Так мы можем получить информацию, которая нам потребуется для удаления контейнера, когда мы закончим работать с ним.

Шаг 3 — Удаление образа

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

docker rm 06069fd5ca23

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

docker rmi hello-world

Заключение

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