Docker 1.13 представил новую версию Docker Compose. Главная особенность этого выпуска заключается в том, что он позволяет напрямую развертывать службы, определенные с помощью файлов Docker Compose, в Docker Engine, включенном в режиме Swarm. Это позволяет упростить развертывание мультиконтейнерного приложения на нескольких хостах.
Этот блог покажет использование простого файла Docker Compose, чтобы показать, как сервисы создаются и развертываются в Docker 1.13.
Вот определение Docker Compose v2 для запуска узла базы данных Couchbase:
1
2
3
4
5
6
7
8
9
|
version: "2" services: db: image: arungupta/couchbase:latest ports: - 8091 : 8091 - 8092 : 8092 - 8093 : 8093 - 11210 : 11210 |
Это определение можно запустить на Docker Engine без режима Swarm:
1
|
docker-compose up |
Это запустит одну реплику сервиса, определенную в файле Compose. Эта услуга может быть масштабирована как:
1
|
docker-compose scale db= 2 |
Это будет хорошо работать на одном хосте. Если режим роя включен в Docker Engine, то он показывает сообщение:
1
2
3
4
5
|
WARNING: The Docker Engine you're using is running in swarm mode. Compose does not use swarm mode to deploy services to multiple nodes in a swarm. All containers will be scheduled on the current node. To deploy your application across the swarm, use `docker stack deploy`. |
Docker Compose предоставляет нам мультиконтейнерные приложения, но приложения по-прежнему ограничены одним хостом. И это единственная точка отказа.
Режим Swarm позволяет создать кластер Docker Engines. В версии 1.13 команда docker stack deploy
может использоваться для развертывания файла Compose в режиме Swarm.
Вот определение Docker Compose v3:
1
2
3
4
5
6
7
8
9
|
version: "3" services: db: image: arungupta/couchbase:latest ports: - 8091 : 8091 - 8092 : 8092 - 8093 : 8093 - 11210 : 11210 |
Как видите, единственное изменение — это значение атрибута version
. В Docker Compose v3 есть и другие изменения . Также читайте о различных версиях Docker Compose и о том, как перейти с версии v2 на версию v3.
Включить режим роя:
1
|
docker swarm init |
Другие узлы могут присоединиться к этому кластеру Swarm, и это легко позволит развернуть мультиконтейнерное приложение на нескольких хостах.
Разверните службы, определенные в файле Compose, как:
1
|
docker stack deploy --compose-file=docker-compose.yml couchbase |
Значение по умолчанию файла Compose здесь сделает команду немного короче. # 30352 должен позаботиться об этом.
Список запущенных сервисов можно проверить с помощью команды docker service ls
:
1
2
|
ID NAME MODE REPLICAS IMAGE 05wa4y2he9w5 couchbase_db replicated 1 / 1 arungupta/couchbase:latest |
Список контейнеров, запущенных внутри сервиса, можно увидеть с помощью команды docker service ps
:
1
2
|
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS rchu2uykeuuj couchbase_db. 1 arungupta/couchbase:latest moby Running Running 52 seconds ago |
В этом случае один контейнер работает как часть службы. Узел указан как moby
который является именем по умолчанию Docker Engine, запущенного с использованием Docker для Mac.
Теперь сервис можно масштабировать как:
1
|
docker service scale couchbase_db= 2 |
Список контейнеров можно снова увидеть как:
1
2
3
|
ID NAME IMAGE NODE DESIRED STATE CURRENT STATE ERROR PORTS rchu2uykeuuj couchbase_db. 1 arungupta/couchbase:latest moby Running Running 3 minutes ago kjy7l14weao8 couchbase_db. 2 arungupta/couchbase:latest moby Running Running 23 seconds ago |
Обратите внимание, что контейнерам присваивается имя в формате <service-name>_n
. Оба контейнера работают на одном хосте.
Также обратите внимание, что два контейнера являются независимыми узлами Couchbase и еще не настроены в кластере. Это уже было объяснено в Couchbase Cluster с использованием Docker, и скоро будет обновлено описание шагов.
Служба обычно имеет несколько контейнеров, работающих на нескольких хостах. Docker 1.13 представляет новую команду docker service logs <service-name>
Docker docker service logs <service-name>
для потоковой передачи журнала службы через все контейнеры на всех хостах на вашу консоль. В нашем случае это можно увидеть с помощью команды docker service logs couchbase_db
и выглядит так:
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
couchbase_db. 1 .rchu2uykeuuj @moby | ++ set -m couchbase_db. 1 .rchu2uykeuuj @moby | ++ sleep 15 couchbase_db. 1 .rchu2uykeuuj @moby | ++ /entrypoint.sh couchbase-server couchbase_db. 2 .kjy7l14weao8 @moby | ++ set -m couchbase_db. 2 .kjy7l14weao8 @moby | ++ sleep 15 couchbase_db. 1 .rchu2uykeuuj @moby | Starting Couchbase Server -- Web UI available at http: //:8091 and logs available in /opt/couchbase/var/lib/couchbase/logs couchbase_db. 1 .rchu2uykeuuj @moby | ++ curl -v -X POST http: //127.0.0.1:8091/pools/default -d memoryQuota=300 -d indexMemoryQuota=300 couchbase_db. 2 .kjy7l14weao8 @moby | ++ /entrypoint.sh couchbase-server couchbase_db. 2 .kjy7l14weao8 @moby | Starting Couchbase Server -- Web UI available at http: //:8091 and logs available in /opt/couchbase/var/lib/couchbase/logs . . . couchbase_db. 1 .rchu2uykeuuj @moby | ++ '[' '' = WORKER ']' couchbase_db. 2 .kjy7l14weao8 @moby | Content-Type: application/json couchbase_db. 1 .rchu2uykeuuj @moby | ++ fg 1 couchbase_db. 2 .kjy7l14weao8 @moby | Content-Length: 152 couchbase_db. 1 .rchu2uykeuuj @moby | /entrypoint.sh couchbase-server couchbase_db. 2 .kjy7l14weao8 @moby | Cache-Control: no-cache couchbase_db. 2 .kjy7l14weao8 @moby | couchbase_db. 2 .kjy7l14weao8 @moby | ++ echo 'Type: ' couchbase_db. 2 .kjy7l14weao8 @moby | ++ '[' '' = WORKER ']' couchbase_db. 2 .kjy7l14weao8 @moby | ++ fg 1 couchbase_db. 2 .kjy7l14weao8 @moby | { "storageMode" : "memory_optimized" , "indexerThreads" : 0 , "memorySnapshotInterval" : 200 , "stableSnapshotInterval" : 5000 , "maxRollbackPoints" : 5 , "logLevel" : "info" }Type: couchbase_db. 2 .kjy7l14weao8 @moby | /entrypoint.sh couchbase-server |
Преамбула оператора журнала использует формат <container-name>.<container-id>@<host>
. И тогда появляется фактическое сообщение журнала из вашего контейнера.
Вначале присоединение идентификатора контейнера может показаться излишним. Но услуги Docker являются самовосстанавливающимися. Это означает, что если контейнер умирает, то Docker Engine запустит другой контейнер, чтобы обеспечить указанное количество реплик в данный момент времени. Этот новый контейнер будет иметь новый идентификатор. И, таким образом, это позволяет прикрепить сообщение журнала из правого контейнера.
Итак, быстрое сравнение команд:
Docker Compose v2 | Docker compose v3 | |
---|---|---|
Запустить услуги | docker-compose up -d |
docker stack deploy --compose-file=docker-compose.yml <stack-name> |
Масштабный сервис | docker-compose scale <service>=<replicas> |
docker service scale <service>=<replicas> |
Неисправность | docker-compose down |
docker stack rm <stack-name> |
Multi-хост | нет | да |
Хотите начать работу с Couchbase? Посмотрите на стартовые наборы Couchbase .
Хотите узнать больше о запуске Couchbase в контейнерах?
Ссылка: | Разверните Docker Compose Services для Swarm от нашего партнера JCG Аруна Гупты в блоге Miles to go 3.0… . |