Docker — программное обеспечение для автоматизации развёртывания и управления приложениями в среде виртуализации на уровне операционной системы. Позволяет «упаковать» приложение со всем его окружением и зависимостями в контейнер, который может быть перенесён на любую Linux-систему с поддержкой cgroups в ядре, а также предоставляет среду по управлению контейнерами.
Compose инструмент для создания и запуска многоконтейнерных Docker приложений. В Compose, вы используете специальный файл для конфигурирования ваших сервисов приложения.
Особенности Compose, которые делают его эффективным:
- Несколько изолированных сред на одном хосте
- Защита данных тома при создании контейнеров
- Пересоздаются только измененные контейнеры
- Перемещение переменных между средами
Перед установкой Docker Compose убедитесь что Docker установлен, подробно с установкой можно ознакомиться в данном руководстве.
Установка Docker Compose
Выполним установку Docker Compose из репозитория Docker на GitHub.
Проверим текущую версию и при необходимости обновим ее с помощью следующей команды:
sudo curl -L "https://github.com/docker/compose/releases/download/1.25.5/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
[root@kvmde54-19861 ~]# sudo curl -L "https://github.com/docker/compose/releases/download/1.25.5/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 638 100 638 0 0 869 0 --:--:-- --:--:-- --:--:-- 869
100 16.7M 100 16.7M 0 0 5008k 0 0:00:03 0:00:03 --:--:-- 8196k
Далее настроим разрешения:
sudo chmod +x /usr/local/bin/docker-compose
Затем мы проверим, что установка прошла успешно:
docker-compose --version
Вы увидите подобный вывод:
[root@kvmde54-19861 ~]# docker-compose --version
docker-compose version 1.25.5, build 8a1c60f6
Запуск контейнера с помощью Docker Compose
В реестре Docker, Docker Hub, содержится образ Hello World, используемый для демонстрации и тестирования. Он демонстрирует минимальные параметры конфигурации, необходимые для запуска контейнера с помощью Docker Compose: файл YAML, вызывающий отдельный образ:
Создадим директорию для файла 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
Когда локальные образы отсутствуют, будут отображены только заголовки столбцов:
REPOSITORY TAG IMAGE ID CREATED SIZE
Далее, находясь в директории ~/hello-world, мы выполним следующую команду:
docker-compose up
После загрузки образа docker-compose создает контейнер, помещает в него и запускает программу hello:
[root@kvmde54-19861 hello-world]# docker-compose up
Creating hello-world_my-test_1 ... done
Attaching to hello-world_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 |
my-test_1 | 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.
my-test_1 |
my-test_1 | To try something more ambitious, you can run an Ubuntu container with:
my-test_1 | $ docker run -it ubuntu bash
my-test_1 |
my-test_1 | Share images, automate workflows, and more with a free Docker ID:
my-test_1 | https://hub.docker.com/
my-test_1 |
my-test_1 | For more examples and ideas, visit:
my-test_1 | https://docs.docker.com/get-started/
my-test_1 |
hello-world_my-test_1 exited with code 0
Контейнеры Docker продолжают работать, пока команда остается активной, поэтому после завершения работы hello контейнер останавливается. Следовательно, когда мы просматриваем активные процессы, заголовки столбцов будут появляться, но контейнер hello-world не будет появляться в списке, поскольку он не запущен.
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
Мы можем просмотреть информацию контейнера, используя флаг -a, с помощью которого можно отобразить все контейнеры, а не только активные:
docker ps -a
[root@kvmde54-19861 hello-world]# docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
bf367c448061 hello-world "/hello" About a minute ago Exited (0) About a minute ago hello-world_my-test_1
Команды Docker Compose
Команда docker-compose работает на уровне каталога. На одной машине можно иметь несколько групп контейнеров; для этого нужно создать отдельный каталог и отдельный файл docker-compose.yml для каждого контейнера.
Вы уже запускали команду docker-compose up и остановили процесс при помощи комбинации CTRL-C. Однако в среде производства инструмент docker-compose должен работать как сервис. Для этого достаточно добавить опцию –d:
docker-compose up -d
Эта команда запускает docker-compose в фоновом режиме.
Чтобы просмотреть группу контейнеров Docker (и запущенных, и отключенных), используйте следующую команду:
docker-compose ps
К примеру, вывод может иметь такой вид:
[root@kvmde54-19861 hello-world]# docker-compose ps
Name Command State Ports
------------------------------------------------
hello-world_my-test_1 /hello Exit 0
Чтобы остановить все контейнеры Docker в группе конкретного приложения, выполните следующую команду в каталоге, в котором находится файл docker-compose.yml, при помощи которого был запущена группа Docker:
docker-compose stop