Como automatizar o multi implantação de servidor usando a janela de encaixe
-
21-12-2019 - |
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:
- 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.
- 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.
- 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?
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.