4
respostas

Imagem e Volume

No curso criamos imagens que já possuem o código fonte dentro delas. Então pelo que entendi para um novo deploy na cloud eu devo gerar as novas imagens com o código fonte atualizado, subir para o Hub e então dar o restart na Cloud, correto?

E quanto ao ambiente de desenvolvimento? Como utilizar o conceito de Volume , para evitar o build de imagens para cada alteração no código junto com a facilidade do Dockerfile?

4 respostas

Olá Thiago, tudo bem?

O aspecto de enviar a imagem para o DockerHub vai depender do modo que a equipe compartilha essas imagens ou se não há problema e há interesse em disponibilizar para a comunidade essas imagens modificadas. A maior parte dos provedores de Cloud oferece container as a service o que facilita por exemplo a preparação de um ambiente homogênio de desenvolvimento, fazendo uso do docker compose todo o time consegue de modo dinâmico e uniforme levantar o ambiente de dev.

Um dos grandes desafios é manter essas imagens pequenas, mesmo após a inclusão de todas as dependências e inserção de código, isso vai de encontro com a questão de micro services, as imagens públicas do DockerHub costumam ser muito genéricas e utilizar em produção da mesma forma que é feito o pull dessa imagem além de desperdiçar por essa razão de tamanho de imagem, pode comprometer aspectos de segurança.

Um conceito interessante que indico a você para esclarecer essas dúvidas e aprimorar usando docker em produção é estudar o Docker multi-stage build que foi disponibilizado à partir do Docker 17.05 ... Basicamente é usar um refinamento para disponibilizar as imagens só com o estritamente necessário para manter a aplicação.

Espero ter lhe ajudado de alguma forma, um abraço e bons estudos.

Olá tudo bem? Obrigado pela resposta. Então mas ainda continuo com essa duvida, qual o fluxo normal para se trabalhar com o Docker? No caso não desejo compartilhar com ninguem externo as pessoas do projeto o código fonte, como subir o código fonte pra AWS por exemplo sem inserir o código fonte diretamente na imagem? Existe por exemplo, algum fluxo consolidado de subir o container pro servidor e então ele mesmo baixar o código fonte do GIT e subir a aplicação?

Obrigado!

Olá Thiago,

É necessário ter muito bem consolidado a diferença de imagem e container. Container é processo em execução, imagem é comum a analogia com iso de sistemas operacionais.

Você pode disponibilizar junto o fonte com um Dockerfile e um Docker-compose em um bitbucket ou github por ex e as dependências comuns como versão de Mysql, PHP, NGINX... serem apontadas diretamente do DockerHub, dessa forma executá-los em qualquer DockerHost.

O que é consolidado na questão do fluxo é que essas etapas em ambientes de produção são amarradas a ferramentas de CI-CD (Integração Contínua - Entrega Contínua) não sendo executadas manualmente.

Não sei se com isso estou levando mais dúvidas do que explicação, fazer nesse contexto é mais fácil do que falar a respeito. Você pode dar uma olhada em materiais relacionados a Jenkins, Puppet, GitLab CI, Kubernetes, Drone ... Entender esse ecossistema é mais simples na prática do que na teoria.

Especialmente para as etapas relacionadas ao Docker, vou deixar uma dica de alguém que sabe explicar muito melhor do que eu, meu professor: https://www.youtube.com/user/linuxtipscanal/playlists

Um abraço e bons estudos.

Obrigado pelas informações e links, irei estudar =D Ficou mais claro, eu tenho conhecimento sobre integração continua, é mais a junção desses elementos com o Docker. Senti falta nesse curso de uma abordagem mais real. Mas com o que vc me falou já tenho condição de ir atrás. Valeu!