Sobes.tech
Middle

O que acontece após fazer alterações na imagem?

sobes.tech IA

Resposta da IA

Após fazer alterações na imagem, a própria imagem torna-se numa nova versão separada. Ao iniciar um contêiner com base nesta imagem, o contêiner usará a versão modificada que reflete as alterações aplicadas. Os contêineres antigos, que foram iniciados com versões anteriores da imagem, manterão o seu estado e funcionarão com a versão antiga até serem parados e reiniciados com a nova imagem. Em outras palavras, as alterações na imagem não afetam os contêineres já em execução.

Vamos analisar o ciclo de vida com o exemplo do Docker:

  1. Construção do Dockerfile: Faz alterações no Dockerfile.

    # Dockerfile atualizado
    FROM ubuntu:latest
    RUN apt-get update && apt-get install -y nginx
    COPY index.html /var/www/html/
    EXPOSE 80
    
  2. Construção da imagem: Executa o comando de build.

    # Construção de uma nova versão da imagem
    docker build -t my-webserver:v2 .
    

    O Docker cria uma nova camada com as alterações feitas sobre as camadas anteriores. my-webserver:v2 agora aponta para a nova imagem.

  3. Executar um novo contêiner: Inicia um novo contêiner.

    # Executar um contêiner com a nova versão da imagem
    docker run -d -p 8080:80 --name webserver_v2 my-webserver:v2
    

    Este contêiner usará a nova versão da imagem.

  4. Contêineres existentes: Os contêineres iniciados com, por exemplo, my-webserver:v1, continuarão a funcionar com os dados e configurações antigos.

Ação Resultado Impacto nos contêineres antigos
Alteração no Dockerfile O código que define a imagem muda. Não
Construção da imagem (docker build) Uma nova imagem com um ID único é criada. Não
Etiquetar a imagem (docker tag) Atribui um alias à nova imagem. Não
Iniciar um novo contêiner O novo contêiner usa a nova imagem. Não
Reiniciar o contêiner antigo Executar o contêiner antigo com a imagem antiga. Não (por padrão)
Eliminar a imagem antiga A imagem é eliminada, mas os contêineres baseados nela permanecem. Não (os contêineres permanecem)

Se for necessário atualizar os contêineres em execução para a nova versão da imagem, deve-se parar e eliminar os antigos, e depois iniciar novos com a imagem atualizada. Em ambientes de produção, para gerir essas atualizações, usam-se orquestradores como Kubernetes, Docker Swarm ou utilitários como Docker Compose, que implementam estratégias de atualizações contínuas (rolling updates).