Tutorial

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

Published on January 7, 2020
Русский
Установка Docker Compose в Ubuntu 18.04

Введение

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

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

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

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

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

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

Примечание. Хотя в предварительных условиях содержатся указания по установке Docker в Ubuntu 18.04 команды docker в этой статье должны работать в других операционных системах, где установлен Docker.

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

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

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

  1. 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

После этого мы настроим разрешения:

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

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

  1. 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 и перейдем в нее:

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

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

  1. nano docker-compose.yml

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

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-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, после которой следует CONTAINER ID или NAME. Ниже мы используем CONTAINER ID из команды docker ps -a, которую мы только что запустили. Обязательно замените идентификатор на идентификатор вашего контейнера:

  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)

Thanks for learning with the DigitalOcean Community. Check out our offerings for compute, storage, networking, and managed databases.

Learn more about us


About the authors
Default avatar
Tony Tran

author



Still looking for an answer?

Ask a questionSearch for more help

Was this helpful?
 
Leave a comment


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!

Try DigitalOcean for free

Click below to sign up and get $200 of credit to try our products over 60 days!

Sign up

Join the Tech Talk
Success! Thank you! Please check your email for further details.

Please complete your information!

Get our biweekly newsletter

Sign up for Infrastructure as a Newsletter.

Hollie's Hub for Good

Working on improving health and education, reducing inequality, and spurring economic growth? We'd like to help.

Become a contributor

Get paid to write technical tutorials and select a tech-focused charity to receive a matching donation.

Welcome to the developer cloud

DigitalOcean makes it simple to launch in the cloud and scale up as you grow — whether you're running one virtual machine or ten thousand.

Learn more
DigitalOcean Cloud Control Panel