Fornex
Европейский
хостинг

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

    file

    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