Вступление
Docker - это отличный инструмент для автоматизации развертывания приложений Linux в программных контейнерах, но для полного использования своего потенциала каждый компонент приложения должен запускаться в своем собственном отдельном контейнере. Для сложных приложений с большим количеством компонентов организация всех контейнеров для запуска, связи и выключения может быстро стать громоздкой.
Сообщество Docker разработало популярное решение под названием Fig, которое позволило вам использовать один файл YAML для организации всех ваших контейнеров и конфигураций Docker. Это стало настолько популярным, что команда Docker решила создать Docker Compose на основе исходного кода Fig, который сейчас устарел. Docker Compose облегчает пользователям управление процессами контейнеров Docker, включая запуск, завершение работы и настройку внутриконтейнерного связывания и томов.
В этом руководстве мы покажем вам, как установить последнюю версию Docker Compose, чтобы помочь вам управлять многоконтейнерными приложениями на сервере Debian 9.
Предпосылки
Чтобы следовать этой статье, вам понадобится:
-
Сервер Debian 9 и пользователь без полномочий root с привилегиями sudo. В этом https://www.digitalocean.com/community/tutorials/initial-server-setup-with-ubuntu-18-04 руководстве по настройке сервера libeinitial с руководством по Debian 9] объясняется, как это настроить.
-
Докер установлен с инструкциями из * Шаг 1 * и * Шаг 2 * на How To Установите и используйте Docker в Debian 9
Шаг 1 - Установка Docker Compose
Хотя мы можем установить Docker Compose из официальных репозиториев Debian, за последним выпуском стоит несколько второстепенных версий, поэтому мы установим его из репозитория Docker GitHub. Команда ниже немного отличается от той, которую вы найдете на странице Releases. Используя флаг + -o +
, чтобы сначала указать выходной файл, а не перенаправлять вывод, этот синтаксис позволяет избежать появления ошибки отказа в разрешении, вызванной при использовании + sudo +
.
Мы проверим current release и, при необходимости, обновим его в приведенной ниже команде:
sudo curl -L https://github.com/docker/compose/releases/download//docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
Далее мы установим права доступа:
sudo chmod +x /usr/local/bin/docker-compose
Затем мы проверим, что установка прошла успешно, проверив версию:
docker-compose --version
Это распечатает версию, которую мы установили:
Outputdocker-compose version , build f46880fe
Теперь, когда у нас установлен Docker Compose, мы готовы запустить пример «Hello World».
Шаг 2 - Запуск контейнера с Docker Compose
Общедоступный реестр Docker, Docker Hub, содержит образ Hello World для демонстрации и тестирования. Он иллюстрирует минимальную конфигурацию, необходимую для запуска контейнера с использованием Docker Compose: файл YAML, который вызывает одно изображение. Мы создадим эту минимальную конфигурацию для запуска нашего контейнера + hello-world +
.
Сначала мы создадим каталог для файла YAML и перейдем в него:
mkdir hello-world
cd hello-world
Затем мы создадим файл YAML:
nano docker-compose.yml
Поместите в файл следующее содержимое, сохраните файл и выйдите из текстового редактора:
докер-compose.yml
my-test:
image: hello-world
Первая строка в файле YAML используется как часть имени контейнера. Вторая строка указывает, какое изображение использовать для создания контейнера. Когда мы запускаем команду + docker-compose up
, она будет искать локальное изображение с указанным нами именем` + hello-world`. Имея это в виду, мы сохраним и закроем файл.
Мы можем вручную просматривать изображения в нашей системе с помощью команды + docker images +
:
docker images
При отсутствии локальных изображений отображаются только заголовки столбцов:
OutputREPOSITORY TAG IMAGE ID CREATED SIZE
Теперь, оставаясь в каталоге + ~ / hello-world +
, мы выполним следующую команду:
docker-compose up
Когда мы в первый раз запустим команду, если локального образа с именем + hello-world
нет, Docker Compose извлечет его из общедоступного репозитория Docker Hub:
OutputPulling 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
OutputCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
Мы можем увидеть информацию о контейнере, которая нам понадобится на следующем шаге, используя флаг + -a +
. Здесь показаны все контейнеры, а не только активные:
docker ps -a
OutputCONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
06069fd5ca23 hello-world "/hello" 35 minutes ago Exited (0) 35 minutes ago hello-world_my-test_1
Здесь отображается информация, которая нам понадобится для удаления контейнера, когда мы закончим с ним.
Шаг 3 - Удаление изображения (необязательно)
Чтобы избежать использования ненужного дискового пространства, мы удалим локальный образ. Для этого нам нужно удалить все контейнеры, которые ссылаются на изображение, используя команду + docker rm +
, за которой следует либо + CONTAINER ID +
, либо + NAME +
. Ниже мы используем + CONTAINER ID +
из команды + docker ps -a +
, которую мы только что выполнили. Не забудьте заменить идентификатор вашего контейнера:
docker rm
После удаления всех контейнеров, которые ссылаются на изображение, мы можем удалить изображение:
docker rmi hello-world
Заключение
Теперь мы установили Docker Compose, протестировали нашу установку, запустив пример Hello World, и удалили тестовый образ и контейнер.
Хотя пример Hello World подтвердил нашу установку, простая конфигурация не демонстрирует одно из основных преимуществ Docker Compose - возможность одновременной установки и отключения группы контейнеров Docker. Чтобы увидеть возможности Docker Compose в действии, вы можете посмотреть этот практический пример: https://www.digitalocean.com/community/tutorials/how-to-configure-a-continuous-integration-testing-environment- with-docker-and-docker-compose-on-ubuntu-16-04 [Как настроить среду тестирования непрерывной интеграции с помощью Docker и Docker Compose в Ubuntu 16.04].