Estou usando o docker-compose no ambiente de desenvolvimento com um docker-compose.yml
arquivo onde listo todos os contêineres necessários.
Também tenho um repositório git centralizado, um servidor Jenkins e outro servidor onde manterei o teste e a produção.
Portanto, a questão é como organizar melhor o processo de implantação.
Agora, git push
no lado do servidor git, aciona um trabalho de construção do Jenkins. Dependendo do nome da filial (preparação ou produção), diferentes trabalhos serão acionados.
Um trabalho de construção usa docker-compose para abrir todo o ambiente e executar testes. Como faço para enviar novos contêineres para o ambiente de preparação/produção?
Uma maneira é enviá-los para o registro docker privado ou público, mas qual é a melhor prática de atualização de contêineres em produção? O servidor Jenkins deve apenas fazer ssh e executar comandos raw kill
, rm
e pull
? run
Não vejo exemplos por aí.
Responder1
Kubernetes, Docker Swarm ou Rancher são provavelmente as melhores maneiras de implementar o que é chamado de atualização contínua.
Basicamente, uma atualização contínua pegará uma coleção de contêineres (conhecidos como serviço) e os atualizará um por um. Então, imagine que você tem três contêineres executando seu aplicativo, uma atualização contínua desativará o primeiro contêiner e o atualizará, e assim por diante, até que o serviço esteja totalmente atualizado. Isso significa que você efetivamente obtém tempo de inatividade zero no aplicativo, pois os balanceadores de carga nesses produtos são inteligentes e não redirecionarão para a atualização de contêineres.
Este link fornece uma implementação básica do Swarm executando um serviço e depois atualizando-o.
Atualização do Rolamento do Enxame
Para algumas configurações e implementações mais fáceis - na minha experiência, o Rancher é um bom ponto de partida para entender todos esses conceitos. Basicamente, é uma interface baseada em diferentes tecnologias Docker, como Kubernetes.