Docker — это отличный инструмент для автоматизации развертывания приложений Linux внутри контейнеров ПО, но для использования всех его возможностей необходимо, чтобы каждый компонент приложения запускался в своем собственном контейнере. Для сложных приложений с большим количеством компонентов организация совместных запуска, коммуникации и остановки всех контейнеров может быстро стать очень непростой и запутанной задачей.
Сообщество Docker предложило популярное решение под названием Fig, которое позволяет использовать один файл YAML для организации всех контейнеров и конфигураций Docker. Оно стало настолько популярным, что команда Docker решила создать Docker Compose на базе исходного кода Fig, который в настоящее время является устаревшим инструментом и не поддерживается. Docker Compose позволяет пользователям управлять процессами контейнеров Docker, в том числе выполнять запуск, остановку и настройку связей и томов внутри контейнеров.
В этом обучающем руководстве вы установите последнюю версию Docker Compose для управления мультиконтейнерными приложениями на сервере Debian 10.
Для его выполнения вам потребуется следующее:
Примечание. Хотя в разделе «Предварительные требования» содержатся указания по установке Docker в Debian 10, приведенные в этой статье команды docker
должны работать с другими операционными системами, если Docker установлен.
Хотя 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
В результате должна быть выведена установленная нами версия:
Outputdocker-compose version 1.25.3, build d4d1b42b
Теперь, когда мы установили Docker Compose, мы можем запустить пример «Hello World».
В общедоступном реестре Docker, Docker Hub, содержится образ Hello World, используемый для демонстрации и тестирования. Это минимальная конфигурация, необходимая для запуска контейнера с помощью Docker: файл YAML, вызывающий один образ. Мы создадим эту минимальную конфигурацию для запуска нашего контейнера hello-world
.
Вначале создайте директорию для файла YAML и перейдите в нее:
- mkdir hello-world
- cd hello-world
Затем создайте файл YAML:
- nano docker-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
Эта команда отображает необходимую информацию для удаления контейнера после завершения работы с ним.
Чтобы избежать необязательного использования дискового пространства, мы удалим локальный образ. Для этого нам потребуется удалить все контейнеры, которые содержат образ, с помощью команды docker rm
, после которой следует CONTAINER ID
или NAME
. В следующем примере мы используем идентификатор CONTAINER ID
из команды docker ps -a
, которую мы только что запускали. Обязательно замените идентификатор на идентификатор вашего контейнера:
- docker rm 06069fd5ca23
После удаления всех контейнеров, которые содержат образ, мы можем удалить образ:
- docker rmi hello-world
Вы установили Docker Compose в Debian 10, протестировали установку на примере приложения Hello World и удалили тестовый образ и контейнер.
Хотя пример с приложением Hello World подтвердил установку, в этой базовой конфигурации не было показано одно из основных преимуществ Docker Compose — возможность запускать и отключать группы контейнеров Docker одновременно. Чтобы узнать больше об использовании Docker Compose, обратитесь к обучающему руководству Установка WordPress с помощью Docker Compose.
Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.
This textbox defaults to using Markdown to format your answer.
You can type !ref in this text area to quickly search our full set of tutorials, documentation & marketplace offerings and insert the link!