No momento, estamos usando o Docker para desenvolvimento e estamos analisando como podemos usar o Docker também para executar nosso software em outros ambientes, como teste e produção.
O que fazemos agora é compilar nosso software Java com Jenkins e, em seguida - na mesma compilação do Jenkins - também construir uma imagem do Docker na qual o software Java será executado usando o docker-compose.
Agora, depois que a imagem do Docker foi criada, precisamos passar essa imagem para o host Docker (remoto) onde o software será executado. Este host Docker remoto NÃO é o mesmo host em que o Jenkins é executado. Acredito que podemos fazer isso seguindo a resposta aceita para esta pergunta .
No entanto, uma vez que a imagem foi copiada para o Docker Host - como começamos essa imagem com docker-compose
? A imagem que copiamos é apenas a imagem - não os docker-compose.yml
arquivos ou Dockerfile
o que importa.
Você pode configurar o docker daemon em seu host Docker para escutar na porta TCP em vez do
/var/run/docker.sock
soquete. Você só precisa executar o dockerd nesse host com um parâmetro extra:Consulte a documentação para obter detalhes.
Assim que tiver isso, você pode dizer ao docker-compose em seu nó Jenkins para se conectar ao daemon remoto por TCP, em vez de usar o soquete local, fornecendo o mesmo
-H
sinalizador apontando para o host e a porta do Docker.Dessa forma, todos os contêineres docker serão iniciados nessa máquina.
Configuraria pessoalmente um registro privado do Docker ou usaria repositórios privados no Dockerhub, por exemplo. Isso também pode significar que o próprio Dockerhub pode fazer compilações de imagens (em seus servidores ou no seu) e, em seguida, enviá-las ao repositório com a tag "mais recente" quando tiver sucesso - IMO muito útil.
Se você estiver executando no Linux, não precisará instalar o Docker diretamente no contêiner. Você pode vincular a montagem do binário do docker (geralmente em /usr/bin/docker) diretamente. Observe que a montagem vinculada do soquete não fornece um Docker totalmente novo, mas sim acesso ao daemon Docker existente de dentro do contêiner. Se você deseja criar uma imagem no binário do Docker, pode sempre criar uma chamada laoyumi/docker ou algo assim e, em seguida, "rapidamente" obter acesso a ela em outra imagem, basta iniciar o Dockerfile com laoyumi/docker.