Статьи

Разверните Docker Compose Services для роения

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… .