DockerCompose - aleksei-khitev/knowledge_base GitHub Wiki
~$ sudo docker-compose -v
ocker-compose version 1.25.0, build unknown
Курс Docker for Java Developers
~$ 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
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, в подключенную папку можно во время работы сервиса добавить файл и он будет сразу доступен в контейнере.
К примеру, если поджлючить папку 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
Если не обойтись одном docker-compose.override.yml
(если есть несколько конфигов для разных сред к примеру), можно составить цепучку так
docker-compose -f docker-compose.yml -f docker-compose.stable.yml up -d