Pergunta

Aqui está a minha situação:

  • Eu tenho um projeto escrito em Ir armazenados no Github
  • Eu tenho 3 servidores de aplicação atrás de um balanceador de carga (app1 e app2, app3)
  • Eu tenho um Dockerfile como parte do projeto no git, o qual, quando utilizado para criar uma imagem, sabe como instalar todos os meus app dependências (incluindo Ir) e obter um ambiente de trabalho para o meu app
  • Eu tenho recipientes de execução em todos os 3 servidores de aplicação e tudo está funcionando maravilhosamente

Agora eu quero mudar algum código e reimplantar a minha mudança para os 3 servidores.Eu posso pensar de 3 maneiras possíveis para facilitar a automação de este:

  1. Como parte do meu dockerfile posso adicionar uma etapa que puxa o meu código no Github e cria-lo.Então, para reimplantar eu preciso de um script que faz em 3 servidores e recria e executa os recipientes, assim, puxando todo o novo código do processo.No mais tudo que eu sempre precisa empurrar para um servidor é o Dockerfile.
  2. Como parte do meu Dockerfile eu posso ter um comando ADD para incluir o meu código para dentro do recipiente.Eu teria, então, necessidade de implantar toda a minha projecto para cada servidor usando algo como Capistrano ou Tecido e, em seguida, matar o velho recipiente, recriar e executar.
  3. Eu posso usar um indicado da máquina (ou o meu ambiente dev) para criar uma nova imagem com base no código-fonte atual.Em seguida, empurre esta imagem para o registro.Em seguida, tem um script que faz em meus servidores e puxe a nova imagem em baixo, mate o velho recipiente e executar o novo.

Número 1 parece ser o mais fácil, mas a maioria de discussão de outros que eu li no Dockers se inclina para a situação 3, que parece bastante prolixo para mim.

Qual é a melhor opção aqui (ou não aqui), eu sou novo para a janela de Encaixe eu perdi alguma coisa?Eu perguntei a alguém que sabe sobre a janela de Encaixe e sua resposta foi: 'você não está pensando na janela de Encaixe way', de modo que a janela de Encaixe forma?

Foi útil?

Solução

Eu acho que a ideia de opção 3, é que você está construindo a imagem apenas uma vez, o que significa que todos os servidores correram a mesma imagem.Os outros dois podem produzir imagens diferentes.

e.Em um cenário ligeiramente mais envolvido, as três construções podem até escolher comissões diferentes se você for com a opção 1.

Outras dicas

Combinação de opções de 2 e 3 podem ser utilizados com o Fabricio.É uma extensão para Tecido, assim fabfile.py para o seu projeto pode parecer algo como isto:

from fabricio import docker, tasks

app = tasks.ImageBuildDockerTasks(
    service=docker.Container(
        name='app',
        image='registry/project/image:tag',
        options={'publish': '8000:8000'},
    ),
    hosts=['user@host1', 'user@host2', 'user@host3'],
)

Usando a configuração de definição acima, você pode, em seguida, escreva fab --list a partir da raiz do projeto dir e veja uma lista de disponíveis Fabricio comandos:

Available commands:

    app           prepare -> push -> backup -> pull -> migrate -> update
    app.deploy    prepare -> push -> backup -> pull -> migrate -> update
    app.prepare   prepare Docker image
    app.pull      pull Docker image from registry
    app.push      push Docker image to registry
    app.rollback  rollback Docker service to a previous version
    app.update    update service to a new version

Há também um monte de exemplos de como usar Fabricio, incluindo Janela de encaixe enxame de modo o que pode ser muito útil para sua configuração.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top