Docker — программное обеспечение для автоматизации развёртывания и управления приложениями в среде виртуализации на уровне операционной системы. Позволяет «упаковать» приложение со всем его окружением и зависимостями в контейнер, который может быть перенесён на любую Linux-систему с поддержкой cgroups в ядре, а также предоставляет среду по управлению контейнерами.

file

Compose инструмент для создания и запуска многоконтейнерных Docker приложений. В Compose, вы используете специальный файл для конфигурирования ваших сервисов приложения.

Особенности Compose, которые делают его эффективным:

  • Несколько изолированных сред на одном хосте
  • Защита данных тома при создании контейнеров
  • Пересоздаются только измененные контейнеры
  • Перемещение переменных между средами

Перед установкой Docker Compose убедитесь что Docker установлен, подробно с установкой можно ознакомиться в данном руководстве.

Установка Docker Compose

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

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

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@kvmde67-19464:~# 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   1898      0 --:--:-- --:--:-- --:--:--  1898  
100 16.7M  100 16.7M    0     0  5709k      0  0:00:03  0:00:03 --:--:-- 9427k  

Далее настроим разрешения:

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

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

docker-compose --version  

Вы увидите подобный вывод:

root@kvmde67-19464:~# 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.

file

Далее можно просмотреть образы в нашей системе с помощью команды docker images:

docker images  

Когда локальные образы отсутствуют, будут отображены только заголовки столбцов:

REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE  

Далее, находясь в директории ~/hello-world, мы выполним следующую команду:

docker-compose up  

После загрузки образа docker-compose создает контейнер, помещает в него и запускает программу hello:

root@kvmde67-19464:~/hello-world# docker-compose up  
Pulling my-test (hello-world:)...  
latest: Pulling from library/hello-world  
0e03bdcc26d7: Pull complete  
Digest: sha256:8e3114318a995a1ee497790535e7b88365222a21771ae7e53687ad76563e8e76  
Status: Downloaded newer image for hello-world:latest  
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@kvmde67-19464:~/hello-world# docker ps -a  
CONTAINER ID        IMAGE               COMMAND             CREATED             STATUS                      PORTS               NAMES  
cfaaf998ecd6        hello-world         "/hello"            45 seconds ago      Exited (0) 43 seconds ago                       hello-world_my-test_1  
Обновлено 14 мая 2020 г.