DockerCompose - aleksei-khitev/knowledge_base GitHub Wiki

docker-compose

Версия Docker Compose

~$ sudo docker-compose -v
ocker-compose version 1.25.0, build unknown

Курс Docker for Java Developers

help

~$ sudo docker-compose --help
Define and run multi-container applications with Docker.

Usage:
  docker-compose [-f <arg>...] [options] [COMMAND] [ARGS...]
  docker-compose -h|--help

Options:
  -f, --file FILE             Specify an alternate compose file
                              (default: docker-compose.yml)
  -p, --project-name NAME     Specify an alternate project name
                              (default: directory name)
  --verbose                   Show more output
  --log-level LEVEL           Set log level (DEBUG, INFO, WARNING, ERROR, CRITICAL)
  --no-ansi                   Do not print ANSI control characters
  -v, --version               Print version and exit
  -H, --host HOST             Daemon socket to connect to

  --tls                       Use TLS; implied by --tlsverify
  --tlscacert CA_PATH         Trust certs signed only by this CA
  --tlscert CLIENT_CERT_PATH  Path to TLS certificate file
  --tlskey TLS_KEY_PATH       Path to TLS key file
  --tlsverify                 Use TLS and verify the remote
  --skip-hostname-check       Don't check the daemon's hostname against the
                              name specified in the client certificate
  --project-directory PATH    Specify an alternate working directory
                              (default: the path of the Compose file)
  --compatibility             If set, Compose will attempt to convert keys
                              in v3 files to their non-Swarm equivalent
  --env-file PATH             Specify an alternate environment file

Commands:
  build              Build or rebuild services
  bundle             Generate a Docker bundle from the Compose file
  config             Validate and view the Compose file
  create             Create services

Курс Docker for Java Developers

Запуск в detached mode

chapter3/hellojava$ cat docker-compose.yml 
version: '3'
services:
  web:
    image: jboss/wildfly
    volumes:
      - ~/Загрузки/docker-for-java-master/chapter2:/opt/jboss/wildfly/standalone/deployments
    ports:
      - 8080:8080
chapter3/hellojava$ sudo docker-compose up -d
Creating network "hellojava_default" with the default driver
Creating hellojava_web_1 ... done

Курс Docker for Java Developers

Просмотр запущенных сервисов

Для работы ps, нужно находиться в папке с файлом docker-compose.yml, иначе возникает ошибка

chapter3/hellojava$ sudo docker-compose ps
     Name                    Command               State           Ports         
---------------------------------------------------------------------------------
hellojava_web_1   /opt/jboss/wildfly/bin/sta ...   Up      0.0.0.0:8080->8080/tcp

Если в docker-compose.yml описаны несколько сервисов, то вывод будет таким

chapter3/travel$ sudo docker-compose ps
    Name                  Command               State                                                                              Ports                                                                           
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
travel_db_1    /entrypoint.sh /opt/couchb ...   Up      11207/tcp, 0.0.0.0:11210->11210/tcp, 11211/tcp, 18091/tcp, 18092/tcp, 18093/tcp, 0.0.0.0:8091->8091/tcp, 0.0.0.0:8092->8092/tcp, 0.0.0.0:8093->8093/tcp,   
                                                        8094/tcp                                                                                                                                                   
travel_web_1   /opt/jboss/wildfly/bin/sta ...   Up      0.0.0.0:8080->8080/tcp, 0.0.0.0:9990->9990/tcp

Курс Docker for Java Developers

Просмтр логов

Для работы ps, нужно находиться в папке с файлом docker-compose.yml, иначе возникает ошибка

chapter3/hellojava$ sudo docker-compose logs
Attaching to hellojava_web_1
web_1  | =========================================================================
web_1  | 
web_1  |   JBoss Bootstrap Environment
web_1  | 
web_1  |   JBOSS_HOME: /opt/jboss/wildfly
web_1  | 
web_1  |   JAVA: /usr/lib/jvm/java/bin/java
...

Логи в режиме реального времени

chapter3/hellojava$ sudo docker-compose logs -f
Attaching to hellojava_web_1
web_1  | =========================================================================
web_1  | 
web_1  |   JBoss Bootstrap Environment

Логи с несколькими сервисами

Если в docker-compose.yml описаны несколько сервисов, то корманда log выведет логи с нескольких сервисов

chapter3/travel$ cat docker-compose.yml 
version: '3'
services:
  web:
    image: arungupta/couchbase-javaee:travel
    environment:
      - COUCHBASE_URI=db
    ports:
      - 8080:8080
      - 9990:9990
    depends_on:
      - db
  db:
    image: arungupta/couchbase:travel
    ports:
      - 8091:8091
      - 8092:8092
      - 8093:8093
      - 11210:11210

chapter3/travel$ sudo docker-compose logs
db_1   | ++ '[' '' = WORKER ']'
db_1   | ++ fg 1
db_1   | /entrypoint.sh couchbase-server
web_1  | 11:47:44,017 INFO  [stdout] (ServerService Thread Pool -- 64) Trying to connect to the database
web_1  | 11:47:44,044 INFO  [com.couchbase.client.core.node.Node] (cb-io-1-3) Connected to Node db

Курс Docker for Java Developers

volume

При использовании volume, в подключенную папку можно во время работы сервиса добавить файл и он будет сразу доступен в контейнере.
К примеру, если поджлючить папку deployments и после запуска скопировать в нее .war-файл, он будет задеплоен

chapter3/hellojava$ cat docker-compose.yml 
version: '3'
services:
  web:
    image: jboss/wildfly
    volumes:
      - /home/aleksei_khitev/deployments:/opt/jboss/wildfly/standalone/deployments
    ports:
      - 8080:8080

chapter3/hellojava$ ll ~/deployments/
итого 20
drwxrwxr-x  2 aleksei_khitev aleksei_khitev 4096 июл 12 14:28 ./
drwxr-xr-x 46 aleksei_khitev aleksei_khitev 4096 июл 12 14:27 ../
-rw-rw-r--  1 aleksei_khitev aleksei_khitev 6599 апр  9  2017 webapp.war
-rw-r--r--  1 aleksei_khitev aleksei_khitev   10 апр  9  2017 webapp.war.deployed

chapter3/hellojava$ curl http://localhost:8080/webapp/resources/persons
<?xml version="1.0" encoding="UTF-8" standalone="yes"?><collection><person><name>Penny</name></person><person><name>Leonard</name></person><person><name>Sheldon</name></person><person><name>Amy</name></person><person><name>Howard</name></person><person><name>Bernadette</name></person><person><name>Raj</name></person><person><name>Priya</name></person></collection>

Курс Docker for Java Developers

Остановка контейнера (и не только)

При выполнении команды остановки

chapter3/hellojava$ sudo docker-compose down
Stopping hellojava_web_1 ... done
Removing hellojava_web_1 ... done
Removing network hellojava_default

Происходит при выполнении:

  • остановка контейнера
  • удаление контейнера
  • удаление сети

Нет нужды удалять отдельной команды контейнеров
В случае с несколькими сервисами, команда down завершит, уничтожит все и сеть потом

chapter3/travel$ sudo docker-compose down
Stopping travel_web_1 ... done
Stopping travel_db_1  ... done
Removing travel_web_1 ... done
Removing travel_db_1  ... done
Removing network travel_default

Курс Docker for Java Developers

Проекты

По умолчаню, docker-compose использует имя каталога, в котором располагается, как часть имени сервисов

chapter3/hellojava$ cat docker-compose.yml 
version: '3'
services:
  web:
    image: jboss/wildfly
    volumes:
      - ~/deployments:/opt/jboss/wildfly/standalone/deployments
    ports:
      - 8080:8080

chapter3/hellojava$ sudo docker-compose up -d
Creating network "hellojava_default" with the default driver
Creating hellojava_web_1 ... done

К примеру, тут hellojava - от имени каталога и web - имя сервиса Используя ключ -p можно создать изолированные среды

chapter3/hellojava$ sudo docker-compose -p myapp up -d
Creating network "myapp_default" with the default driver
Creating myapp_web_1 ... done

Но теперь docker-compose ps ничего не вернет, потому что будет искать контекст по умолчанию (по имени каталога)

hapter3/hellojava$ sudo docker-compose ps
Name   Command   State   Ports
------------------------------

Но если указать -p

chapter3/hellojava$ sudo docker-compose -p myapp ps
   Name                  Command               State           Ports         
-----------------------------------------------------------------------------
myapp_web_1   /opt/jboss/wildfly/bin/sta ...   Up      0.0.0.0:8080->8080/tcp

И остановку сервисов тоже требует -p

chapter3/hellojava$ sudo docker-compose -p myapp down
Stopping myapp_web_1 ... done
Removing myapp_web_1 ... done
Removing network myapp_default

Курс Docker for Java Developers

Переопределение

Используя файл docker-compose.override.yml можно переопределить или расширить свойства, заданные в docker-compose.yml

chapter3/hellojava$ ll
итого 16
drwxrwxr-x 2 aleksei_khitev aleksei_khitev 4096 июл 12 15:10 ./
drwxrwxr-x 5 aleksei_khitev aleksei_khitev 4096 июл 12 14:40 ../
-rw-rw-r-- 1 aleksei_khitev aleksei_khitev   55 июл 12 15:10 docker-compose.override.yml
-rw-rw-r-- 1 aleksei_khitev aleksei_khitev  161 июл 12 15:02 docker-compose.yml

hapter3/hellojava$ more docker-compose.yml 
version: '3'
services:
  web:
    image: jboss/wildfly
    volumes:
      - ~/deployments:/opt/jboss/wildfly/standalone/deployments
    ports:
      - 8080:8080

chapter3/hellojava$ more docker-compose.override.yml 
version: "3"
services:
  web:
   ports:
     - 80:8080

chapter3/hellojava$ sudo docker-compose up -d
Creating network "hellojava_default" with the default driver
Creating hellojava_web_1 ... done

chapter3/hellojava$ sudo docker-compose ps
     Name                    Command               State                      Ports                   
------------------------------------------------------------------------------------------------------
hellojava_web_1   /opt/jboss/wildfly/bin/sta ...   Up      0.0.0.0:80->8080/tcp,0.0.0.0:8080->8080/tcp

Указани нескольких файлов через -f

Если не обойтись одном docker-compose.override.yml (если есть несколько конфигов для разных сред к примеру), можно составить цепучку так

docker-compose -f docker-compose.yml -f docker-compose.stable.yml up -d

Курс Docker for Java Developers

Назад к docker

⚠️ **GitHub.com Fallback** ⚠️