Sem categoria

Serviços do Docker, pilha e pacote de aplicativos distribuídos

docker-1.12

Primeira versão candidata do Docker 1.12 foi anunciado em duas semanas atrás. Vários novos recursos são
planejado para esta versão.

Este blog mostrará como criar um Aplicativo distribuído Bundle do Docker Compose e implante-o como Docker Stack em Docker Swarm Modo. Muito obrigado a @friismo por me ajudar a entender esses conceitos.

Vamos dar uma olhada nos recursos primeiro:

  • Orquestração integrada: Um aplicativo típico é definido usando um arquivo Docker Compose. Essa definição consiste em vários contêineres e é implantada em vários hosts. Isso evita o ponto único de falha (SPOF) e mantém seu aplicativo
    resiliente. Várias estruturas de orquestração, como Docker Swarm, Kubernetes e Mesos, permitem orquestrar esses aplicativos. No entanto, como essa é uma característica tão importante do aplicativo, o Docker Engine agora tem orquestração integrada.
    Mais detalhes sobre esse tópico em um blog posterior.
  • Serviço: Um serviço replicado, distribuído e com balanceamento de carga pode ser facilmente criado usando serviço docker create comando. Um "estado desejado" do aplicativo, como a execução de 3 contêineres do Couchbase, é fornecido e o comando
    O mecanismo de autocorreção do Docker garante que muitos contêineres estejam em execução no cluster. Se um contêiner for desativado, outro contêiner será iniciado. Se um nó for desativado, os contêineres desse nó serão iniciados em um nó diferente. Mais sobre isso em um próximo
    blog.
  • Segurança de configuração zero: O Docker 1.12 vem com TLS mutuamente autenticado, fornecendo autenticação, autorização e criptografia para as comunicações de todos os nós que participam do enxame, prontos para uso. Mais sobre isso em
    em um blog posterior.
  • Pilha do Docker e pacote de aplicativos distribuídos: O Distributed Application Bundle, ou DAB, é um formato de imagem distribuível de vários serviços. Leia mais para obter mais detalhes.

Até o momento, você pode pegar um Dockerfile e criar uma imagem a partir dela usando o construção de docas comando. Um contêiner pode ser iniciado usando o comando execução do docker comando. Vários contêineres podem ser iniciados facilmente com o comando
esse comando várias vezes. Ou você também pode usar o arquivo Docker Compose e aumentar a escala dos seus contêineres usando o comando escala do docker-compose comando.
docker-lifecycle

A imagem é um formato portátil para um único contêiner. Pacote de aplicativos distribuídosou DAB, um novo conceito introduzido no Docker 1.12, é um formato portátil para vários contêineres. Cada pacote pode ser implantado como
a Pilha em tempo de execução.

docker-stack-lifecycle

Saiba mais sobre o DAB em docker.com/dab. Para simplificar, aqui está uma analogia que pode ser feita:

Dockerfile -> Imagem -> Contêiner

Docker Compose -> Pacote de aplicativos distribuídos -> Docker Stack

Vamos usar um arquivo Docker Compose, criar um DAB a partir dele e implantá-lo como um Docker Stack.

É importante observar que esse é um recurso experimental na versão 1.12-RC2.

Criar um pacote de aplicativos distribuídos a partir do Docker Compose

O Docker Compose CLI adiciona um novo feixe comando. Mais detalhes podem ser encontrados:

Agora, vamos pegar uma definição do Docker Compose e criar um DAB a partir dela. Aqui está nossa definição do Docker Compose:

Esse arquivo Compose inicia um servidor WildFly e um servidor Couchbase. Um aplicativo Java EE é pré-implantado no servidor WildFly que se conecta ao servidor Couchbase e permite executar operações CRUD usando a API REST. A fonte desse arquivo está em:
github.com/arun-gupta/oreilly-docker-book/blob/master/hello-javaee/docker-compose.yml. Gere um pacote de aplicativos com ele:

depende_de apenas cria dependência entre dois serviços e os faz iniciar em uma ordem específica. Isso só garante que o contêiner do Docker seja iniciado, mas o aplicativo dentro do contêiner pode demorar mais para iniciar. Portanto, esse atributo apenas
resolve parcialmente o problema. nome_do_contêiner fornece um nome específico para o contêiner. Depender de um nome de contêiner específico é um acoplamento rígido e não permite dimensionar o contêiner. Portanto, ambos os avisos podem ser ignorados,
por enquanto. Esse comando gera um arquivo usando o nome do projeto Compose, que é o nome do diretório. Portanto, no nosso caso, hellojavaee.dsb é gerado. Essa extensão de arquivo foi renomeada para .dab no RC3. O código gerado
pacote de aplicativos é semelhante:

Esse arquivo fornece uma descrição completa dos serviços incluídos no aplicativo. Não tenho certeza se Distributed Application Bundle é o nome mais apropriado; discuta isso em #24250. Ele
seria ótimo se outros formatos de contêineres, como o Rkt, ou mesmo VMs, pudessem ser suportados aqui. Mas, por enquanto, o Docker é o único formato compatível.

Inicializar o modo Swarm no Docker

Conforme mencionado acima, o "estado desejado" agora é mantido pelo Docker Swarm. E isso já está incorporado ao Docker Engine. Os conceitos do Docker Swarm também evoluíram e podem ser lidos em Conceitos-chave do modo Swarm. A
um blog mais detalhado sobre isso será publicado posteriormente. Mas para este blog, um novo comando enxame de docas foi adicionado:

Inicialize um nó do Swarm (como um gerenciador) no Docker Engine:

Mais detalhes sobre esse nó podem ser encontrados em inspeção de nó doca autocomando.

A saída detalhada é detalhada, mas a seção relevante é:

A saída mostra que o nó é um gerente. Em um cluster de nó único, esse nó também atuará como um trabalhador.

Mais detalhes sobre o cluster podem ser obtidos usando o comando inspeção de enxame de docas comando.

Política de aceitação mostra que outros trabalhador Os nós podem entrar nesse cluster, mas um gerente precisa de aprovação explícita.

Implantar uma pilha do Docker

Crie uma pilha usando implantação de docas comando:

O uso do comando certamente pode ser simplificado, conforme discutido em #24249. Veja a lista de serviços:

A saída mostra que dois serviços, WildFly e Couchbase, estão em execução. Serviços também é um novo conceito introduzido no Docker 1.12. É isso que dá a você o
"estado desejado", e o Docker Engine trabalha para fornecer isso a você. docker ps mostra a lista de contêineres em execução:

O contêiner WildFly é iniciado antes que o contêiner do Couchbase esteja em funcionamento. Isso significa que o aplicativo Java EE tenta se conectar ao servidor Couchbase e falha. Portanto, o aplicativo nunca é inicializado com êxito.

Serviço do Docker com autocorreção

O Docker Service mantém o "estado desejado" de um aplicativo. No nosso caso, o estado desejado é garantir que um, e somente um, contêiner para o serviço esteja em execução. Se removermos o contêiner, e não o serviço, o serviço será
iniciar automaticamente o contêiner novamente. Remova o contêiner como:

Observe que você deve dar -f porque o contêiner já está em execução. Os mecanismos de autocorreção do Docker 1.12 entram em ação e reiniciam automaticamente o contêiner. Agora, se você listar os contêineres novamente:

Isso mostra que um novo contêiner foi iniciado. Inspecione o serviço WildFly:

O Swarm atribui uma porta aleatória ao serviço, ou isso pode ser atualizado manualmente usando Atualização do serviço de docker comando. No nosso caso, a porta 8080 do contêiner é mapeado para 30004 no host.

Verificar o aplicativo

Verifique se o aplicativo foi implantado com êxito:

Adicione um novo livro ao aplicativo:

Verifique os livros novamente:

Saiba mais sobre esse aplicativo Java EE em github.com/arun-gupta/oreilly-docker-book/tree/master/hello-javaee.

Este blog mostrou como criar um pacote de aplicativos distribuídos a partir do Docker Compose e implantá-lo como Docker Stack no modo Docker Swarm.

Referências de serviço e pilha do Docker

Compartilhe este artigo
Receba atualizações do blog do Couchbase em sua caixa de entrada
Esse campo é obrigatório.

Autor

Postado por Arun Gupta, vice-presidente de defesa do desenvolvedor, Couchbase

Arun Gupta é o vice-presidente de defesa do desenvolvedor na Couchbase. Ele criou e liderou comunidades de desenvolvedores por mais de 10 anos na Sun, Oracle e Red Hat. Ele tem grande experiência na liderança de equipes multifuncionais para desenvolver e executar estratégias, planejamento e execução de conteúdo, campanhas de marketing e programas. Antes disso, liderou equipes de engenharia na Sun e é membro fundador da equipe Java EE. Gupta é autor de mais de 2.000 postagens em blogs sobre tecnologia. Ele tem uma vasta experiência em palestras em mais de 40 países sobre diversos tópicos e é um JavaOne Rock Star há três anos consecutivos. Gupta também fundou o capítulo Devoxx4Kids nos EUA e continua a promover a educação tecnológica entre as crianças. Autor de vários livros sobre tecnologia, corredor ávido, viajante do mundo inteiro, campeão de Java, líder de JUG, membro do NetBeans Dream Team e capitão do Docker, ele pode ser facilmente acessado em @arungupta.

Deixe um comentário

Pronto para começar a usar o Couchbase Capella?

Iniciar a construção

Confira nosso portal do desenvolvedor para explorar o NoSQL, procurar recursos e começar a usar os tutoriais.

Use o Capella gratuitamente

Comece a trabalhar com o Couchbase em apenas alguns cliques. O Capella DBaaS é a maneira mais fácil e rápida de começar.

Entre em contato

Deseja saber mais sobre as ofertas do Couchbase? Deixe-nos ajudar.