Docker Swarm vs Docker Compose? Agora eles trabalham juntos! Docker 1.13 introduziu uma nova versão do Docker Compose. O principal recurso dessa versão é permitir que os serviços definidos usando arquivos do Docker Compose sejam implantados diretamente no Docker Engine habilitado com o modo Swarm. O Docker Swarm com o Docker Compose permite a implantação simplificada de aplicativos com vários contêineres em vários hosts.
Este blog demonstra como um arquivo simples do Docker Swarm e do Docker Compose mostra como os serviços são criados e implantados no Docker 1.13.
Aqui está uma definição do Docker Compose v2 para iniciar um nó de banco de dados do 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 |
Essa definição pode ser iniciada em um Docker Engine sem o modo Swarm como:
|
1 |
docker-compose up |
Isso iniciará uma única réplica do serviço definido no arquivo Compose. Esse serviço pode ser dimensionado como:
|
1 |
docker-compose scale db=2 |
Isso funcionaria bem em um único host. Se o modo swarm estiver ativado no Docker Engine, ele mostrará a mensagem:
|
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`. |
O Docker Compose nos oferece aplicativos com vários contêineres, mas os aplicativos ainda estão restritos a um único host. E esse é um ponto único de falha. O Docker Compose no modo Swarm permite criar um cluster de Docker Engines. Com a versão 1.13, implantação de pilha de docas pode ser usado para implantar um arquivo do Docker Compose no modo Docker Swarm. Aqui está um exemplo de definição do 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 |
Como você pode ver, a única alteração é o valor de versão atributo. Há outros Mudanças no Docker Compose v3. Além disso, leia sobre diferentes versões do Docker Compose e como atualizar da v2 para a v3. Habilite o Docker Compose com o modo swarm:
|
1 |
docker swarm init |
Outros nós podem se juntar a esse cluster de swarm e isso permitiria facilmente implantar o aplicativo de vários contêineres em um host múltiplo também. Use o Docker para implantar os serviços no Swarm definidos no arquivo Compose como:
|
1 |
docker stack deploy --compose-file=docker-compose.yml couchbase |
Um valor padrão de Compose file aqui tornaria o comando um pouco mais curto. #30352 deve cuidar disso. A lista de serviços em execução pode ser verificada usando serviço docker ls comando:
|
1 2 |
ID NAME MODE REPLICAS IMAGE 05wa4y2he9w5 couchbase_db replicated 1/1 arungupta/couchbase:latest |
A lista de contêineres em execução no serviço pode ser vista usando serviço docker ps comando:
|
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 |
Nesse caso, um único contêiner está sendo executado como parte do serviço. O nó é listado como moby que é o nome padrão do Docker Engine em execução usando o Docker para Mac. O serviço agora pode ser dimensionado como:
|
1 |
docker service scale couchbase_db=2 |
A lista de contêineres pode ser vista novamente como:
|
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 |
Observe que os contêineres recebem o nome usando o formato _n. Ambos os contêineres estão em execução no mesmo host. Observe também que os dois contêineres são nós independentes do Couchbase e ainda não estão configurados em um cluster. Isso já foi explicado em Cluster do Couchbase usando o Docker e uma atualização das etapas será feita em breve. Normalmente, um serviço terá vários contêineres em execução espalhados por vários hosts. O Docker 1.13 apresenta um novo comando Registros de serviço do docker para transmitir o log de serviço de todos os contêineres em todos os hosts para o seu console. No nosso caso, isso pode ser visto usando o comando Registros de serviço do docker couchbase_db e se parece com isso:
|
1 2 3 4 5 6 7 8 9 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 https://:8091 and logs available in /opt/couchbase/var/lib/couchbase/logs couchbase_db.1.rchu2uykeuuj@moby | ++ curl -v -X POST https://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 https://: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 |
O preâmbulo da instrução de registro usa o formato .@. E, em seguida, aparece a mensagem de registro real do seu contêiner. Em um primeiro momento, anexar o ID do contêiner pode parecer redundante. Mas Serviços do Docker são autorrecuperáveis. Isso significa que, se um contêiner morrer, o Docker Engine iniciará outro contêiner para garantir o número especificado de réplicas em um determinado momento. Esse novo contêiner terá um novo ID. Assim, ele permite anexar a mensagem de registro do contêiner correto. Portanto, uma comparação rápida dos comandos:
| Docker Compose v2 | Docker compose v3 | |
|---|---|---|
| Iniciar serviços | docker-compose up -d |
implantação de pilha de docker --compose-file=docker-compose.yml |
| Serviço de escala | docker-compose scale = |
escala de serviços da docker = |
| Desligamento | docker-compose down |
pilha de docas rm |
| Multi-hospedeiro | Não | Sim |
Quer começar a usar o Couchbase? Dê uma olhada em Kits iniciais do Couchbase. Deseja saber mais sobre como executar o Couchbase em contêineres?
