Como dimensionar contêineres Docker na produção

139

Então eu descobri recentemente essa ferramenta incrível, e ela diz

O Docker é um projeto de código aberto para criar facilmente contêineres leves, portáteis e auto-suficientes a partir de qualquer aplicativo. O mesmo contêiner que um desenvolvedor constrói e testa em um laptop pode executar em escala, na produção, em VMs, bare metal, clusters OpenStack, nuvens públicas e muito mais.

Digamos que eu tenho uma imagem do docker que executa o Nginx e um site se conecta ao banco de dados externo. Como dimensiono o contêiner em produção?

James Lin
fonte

Respostas:

586

Atualização: 2019-03-11

Antes de tudo, obrigado por aqueles que votaram nessa resposta ao longo dos anos.

Esteja ciente de que esta pergunta foi feita em agosto de 2013, quando o Docker ainda era uma tecnologia muito nova. Desde então: o Kubernetes foi lançado em junho de 2014, o enxame do Docker foi integrado ao mecanismo do Docker em fevereiro de 2015, a Amazon lançou sua solução de contêineres, ECS, em abril de 2015 e o Google lançou o GKE em agosto de 2015. É justo dizer que o cenário de contêineres de produção tem mudou substancialmente.


A resposta curta é que você teria que escrever sua própria lógica para fazer isso.

Eu esperava que esse tipo de recurso emergisse dos seguintes projetos, criados sobre o docker e projetados para suportar aplicativos em produção:

Atualização 1

Outro projeto relacionado que descobri recentemente:

Atualização 2

A última versão do Openstack contém suporte para o gerenciamento de contêineres do Docker:

Atualização 3

Sistema para gerenciar instâncias do Docker

E uma apresentação sobre como usar ferramentas como Packer , Docker e Serf para fornecer um padrão de infraestrutura de servidor imutável

Atualização 4

Um artigo interessante sobre como conectar os contêineres do docker usando o servf :

Atualização 5

Execute o Docker no Mesos usando a estrutura Marathon

Tutorial do desenvolvedor do Mesosphere Docker

Atualização 6

Execute o Docker no Tsuru, pois ele suporta implantações de cluster de docker e planejador segregado

Atualização 7

Orquestração de ambientes baseados no Docker

maestro-ng

Atualização 8

decking.io

Atualização 9

Google kubernetes

Atualização 10

A Redhat refatorou seu PAAS de turno aberto para integrar o Docker

Atualização 11

Uma lib do Docker NodeJS agrupando a linha de comando do Docker e gerenciando-a a partir de um arquivo json.

Atualização 12

O novo serviço de contêiner da Amazon permite a escala no cluster.

Atualização 13

Estritamente falando, o Flocker não "dimensiona" aplicativos, mas foi projetado para desempenhar uma função relacionada de tornar contêineres com estado (executando serviços de bancos de dados?) Portáteis em vários hosts do docker:

https://clusterhq.com/

Atualização 14

Um projeto para criar modelos portáteis que descrevem aplicativos Docker:

http://panamax.io/

Atualização 15

O projeto Docker agora está abordando a orquestração de forma nativa (veja o anúncio )

Atualização 16

Spotify Helios

Veja também:

Atualização 17

O projeto Openstack agora tem um novo projeto "contêiner como serviço" chamado Magnum:

Mostra muitas promessas, permite a fácil configuração de estruturas de orquestração do Docker, como Kubernetes e Docker swarm.

Atualização 18

Rancheiro é um projeto que está amadurecendo rapidamente

http://rancher.com/

Interface do usuário agradável e forte foco em infraestruturas Hockbrid Docker

Atualização 19

O projeto Lattice é uma ramificação do Cloud Foundry para gerenciar clusters de contêineres.

Atualização 20

Docker comprou recentemente Tutum:

https://www.docker.com/tutum

Atualização 21

Gerenciador de pacotes para aplicativos implantados no Kubernetes .

http://helm.sh/

Atualização 22

O Vamp é uma plataforma de código aberto e auto-hospedada para gerenciar arquiteturas orientadas para (micro) serviços que dependem da tecnologia de contêineres.

http://vamp.io/

Atualização 23

Um agendador distribuído e altamente disponível para o data center

Dos caras que nos deram o Vagrant e outras ferramentas poderosas.

Atualização 24

Solução de hospedagem de contêiner para AWS, de código aberto e baseada no Kubernetes

https://supergiant.io/

Atualização 25

Container baseado em Apache Mesos hospedado localizado na Alemanha

https://sloppy.io/features/#features

E a Docker Inc. também fornece um serviço de hospedagem de contêiner chamado Docker cloud

https://cloud.docker.com/

Atualização 26

Jelastic é um serviço PAAS hospedado que dimensiona contêineres automaticamente.

Mark O'Connor
fonte
1
O openstack é outro candidato a esta lista
ben schwartz
@benschwartz Muito verdade, mas apenas na versão mais recente.
Mark O'Connor
Uau, Dock - eu - você é Rockin Fock! Obrigado!
jredd
2
@ MarkO'Connor O mesosphere/mesos-dockerprojeto foi descontinuado e substituído por mesosphere/deimos: github.com/mesosphere/deimos
Ross Allen
1
Também vale a pena olhar, no Google - github.com/GoogleCloudPlatform/kubernetes
mjsalinger
42

O Deis automatiza o dimensionamento de contêineres do Docker (entre outras coisas).

O Deis (pronunciado DAY-iss) é um PaaS de código aberto que facilita a implantação e o gerenciamento de aplicativos em seus próprios servidores. A Deis se baseia no Docker e no CoreOS para fornecer um PaaS leve com um fluxo de trabalho inspirado no Heroku.

Aqui está o fluxo de trabalho do desenvolvedor:

deis create myapp                      # create a new deis app called "myapp"
git push deis master                   # built with a buildpack or dockerfile
deis scale web=16 worker=4             # scale up docker containers

A Deis implanta automaticamente seus contêineres Docker em um cluster CoreOS e configura os roteadores Nginx para rotear solicitações para contêineres Docker íntegros. Se um host morrer, os contêineres serão reiniciados automaticamente em outro host em segundos. Basta procurar o URL do proxy ou usar deis openpara acessar seu aplicativo.

Alguns outros comandos úteis:

deis config:set DATABASE_URL=          # attach to a database w/ an envvar
deis run make test                     # run ephemeral containers for one-off tasks
deis logs                              # get aggregated logs for troubleshooting
deis rollback v23                      # rollback to a prior release

Para ver isso em ação, confira o vídeo do terminal em http://deis.io/overview/ . Você também pode aprender sobre os conceitos da Deis ou implementar a sua própria PaaS privada .

gabrtv
fonte
3
+1 Estou assistindo seu projeto com interesse. Mantenha o bom trabalho!
Mark O'Connor
19

Você pode tentar Tsuru. Tsuru é um PaaS de código aberto inspirado em Heroku, e já está com alguns produtos em produção na Globo.com (braço de internet da maior empresa de televisão aberta do Brasil)

Ele gerencia todo o fluxo de um aplicativo, desde a criação, implantação, roteamento (com hipache) de contêineres com muitos recursos interessantes como cluster de docker, dimensionamento de unidades, implantação segregada, etc.

Dê uma olhada em nossa documentação abaixo: http://docs.tsuru.io/

Aqui, nossa postagem sobre o ambiente: http://blog.tsuru.io/2014/04/04/running-tsuru-in-production-scaling-and-segregating-docker-containers/

Magno Torres
fonte
18

Dê uma olhada no Rancher.com - ele pode gerenciar vários hosts do Docker e muito mais.

dublx
fonte
O Rancher é de código aberto e inclui uma distribuição completa do Kubernetes. Ele fornece uma plataforma para executar muitos clusters diferentes, gerenciar a infraestrutura e simplificar drasticamente os contêineres em execução.
Shannon Williams
9

Uma abordagem sensata para dimensionar o Docker pode ser:

  1. Cada serviço será um contêiner de docker
  2. Descoberta de serviço dentro do contêiner gerenciada por links ( novo recurso do docker 0.6.5 )
  3. Os contêineres serão implantados através do Dokku
  4. Os aplicativos serão gerenciados pelo Estaleiro, que, por sua vez, utiliza hipache

Outro projeto de fonte aberta do docker da Yandex:

tommasop
fonte
Você pode dar mais conselhos sobre como usar o Dokku ao lado do Estaleiro?
djskinner
2

O pessoal do Openshift também criou um projeto. Você pode encontrar mais informações aqui , tente o contêiner de teste e informações detalhadas aqui . O único problema é que a solução é centrada no Redhat por enquanto :)

Kunthar
fonte
2

Enquanto somos grandes fãs do Deis (deis.io) e estamos implantando ativamente nele, existem outros Heroku como soluções de implantação no estilo PaaS por aí, incluindo:

Longshoreman do pessoal da Wayfinder:

https://github.com/longshoreman/longshoreman

Decker do pessoal do CloudCredo, usando o CloudFoundry:

http://www.cloudcredo.com/decker-docker-cloud-foundry/

Quanto à orquestração direta, o projeto Centurion de código aberto da NewRelic parece bastante promissor:

https://github.com/newrelic/centurion

IanBlenke
fonte
1

Veja também o etcd e o Consul .

Ricardo Silva
fonte
1

Panamax: Gerenciamento de Docker para seres humanos. panamax.io

Fig: Ambientes de desenvolvimento rápidos e isolados usando o Docker. fig.sh

rus1
fonte
Acho que a Fig ainda não suporta a implantação de vários hosts.
Lolski # 23/14
É assim mesmo! Por isso, apenas ajuda a orquestrar a configuração de aplicativos dentro de um único host?
Fatuhoku
1

Uma opção não mencionada em outras postagens é o Helios. É construído pelo spotify e não tenta fazer muito.

https://github.com/spotify/helios

Chris Dail
fonte