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 |
versão: "2" serviços: db: imagem: arungupta/couchbase:mais recente portos: - 8091:8091 - 8092:8092 - 8093:8093 - 11210:11210 |
Essa definição pode ser iniciada em um Docker Engine sem o modo Swarm como:
1 |
doca-compor para cima |
Isso iniciará uma única réplica do serviço definido no arquivo Compose. Esse serviço pode ser dimensionado como:
1 |
doca-compor escala 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 |
AVISO: O Docker Motor você're usando é em execução em enxame modo. Compor faz não uso enxame modo para implantação serviços para múltiplos nós em a enxame. Todos contêineres vontade ser programado em o atual nó. Para implantação seu aplicativo entre o enxame, uso `doca pilha implantação`. |
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 |
versão: "3" serviços: db: imagem: arungupta/couchbase:mais recente portos: - 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 |
doca enxame inicial |
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 |
doca pilha implantação --compor-arquivo=doca-compor.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 NOME MODO RÉPLICAS IMAGEM 05wa4y2he9w5 banco de dados do couchbase replicado 1/1 arungupta/couchbase:mais recente |
A lista de contêineres em execução no serviço pode ser vista usando serviço docker ps
comando:
1 2 |
ID NOME IMAGEM NÓ DESEJADO ESTADO ATUAL ESTADO ERRO PORTOS rchu2uykeuuj banco de dados do couchbase.1 arungupta/couchbase:mais recente moby Em execução Em execução 52 segundos atrás |
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 |
doca serviço escala banco de dados do couchbase=2 |
A lista de contêineres pode ser vista novamente como:
1 2 3 |
ID NOME IMAGEM NÓ DESEJADO ESTADO ATUAL ESTADO ERRO PORTOS rchu2uykeuuj banco de dados do couchbase.1 arungupta/couchbase:mais recente moby Em execução Em execução 3 minutos atrás kjy7l14weao8 banco de dados do couchbase.2 arungupta/couchbase:mais recente moby Em execução Em execução 23 segundos atrás |
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 |
banco de dados do couchbase.1.rchu2uykeuuj@moby | ++ definir -m banco de dados do couchbase.1.rchu2uykeuuj@moby | ++ dormir 15 banco de dados do couchbase.1.rchu2uykeuuj@moby | ++ /ponto de entrada.sh couchbase-servidor banco de dados do couchbase.2.kjy7l14weao8@moby | ++ definir -m banco de dados do couchbase.2.kjy7l14weao8@moby | ++ dormir 15 banco de dados do couchbase.1.rchu2uykeuuj@moby | Início Couchbase Servidor -- Web IU disponível em http://:8091 e registros disponíveis em /opt/couchbase/var/lib/couchbase/logs banco de dados do couchbase.1.rchu2uykeuuj@moby | ++ enrolar -v -X POST http://127.0.0.1:8091/pools/default -d memoryQuota=300 -d indexMemoryQuota=300 banco de dados do couchbase.2.kjy7l14weao8@moby | ++ /ponto de entrada.sh couchbase-servidor banco de dados do couchbase.2.kjy7l14weao8@moby | Início Couchbase Servidor -- Web IU disponível em http://:8091 e registros disponíveis em /opt/couchbase/var/lib/couchbase/logs . . . banco de dados do couchbase.1.rchu2uykeuuj@moby | ++ '[' '' = TRABALHADOR ']' banco de dados do couchbase.2.kjy7l14weao8@moby | Conteúdo-Tipo: aplicativo/json banco de dados do couchbase.1.rchu2uykeuuj@moby | ++ fg 1 banco de dados do couchbase.2.kjy7l14weao8@moby | Conteúdo-Comprimento: 152 banco de dados do couchbase.1.rchu2uykeuuj@moby | /ponto de entrada.sh couchbase-servidor banco de dados do couchbase.2.kjy7l14weao8@moby | Cache-Controle: não-cache banco de dados do couchbase.2.kjy7l14weao8@moby | banco de dados do couchbase.2.kjy7l14weao8@moby | ++ eco 'Type: ' banco de dados do couchbase.2.kjy7l14weao8@moby | ++ '[' '' = TRABALHADOR ']' banco de dados do couchbase.2.kjy7l14weao8@moby | ++ fg 1 banco de dados do couchbase.2.kjy7l14weao8@moby | {"storageMode":"memory_optimized","indexerThreads":0,"memorySnapshotInterval":200,"stableSnapshotInterval":5000,"maxRollbackPoints":5,"logLevel":"info"}Tipo: banco de dados do couchbase.2.kjy7l14weao8@moby | /ponto de entrada.sh couchbase-servidor |
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?