Docker - Criando uma imagem a partir de um Container

 Neste artigo veremos como manter as alterações feitas em um contâiner comitando-as para uma Imagem.

Para criar uma imagem as boas práticas recomendam usar um Dockerfile pois ele documenta todo o processo da criação da imagem. Geralmente ao usar um Dockerfile partimos de uma imagem base e criamos uma imagem personalizada que usamos para criar um contêiner.

Podemos também criar uma imagem a partir de um contêiner que configuramos e que esta pronto para ser usado, para isso usamos o comando docker commit.

Mas atenção, a operação de commit não incluirá nenhum dado contido nos volumes montados dentro do contêiner e o contêiner que esta sendo comitado e seus processos serão pausados enquanto a imagem é comitada. Para evitar esse comportamento defina a opção --pause igual a false.

Vejamos um exemplo prático :

Recursos:

Estou usando o Docker no Linux usando a distribuição Ubuntu 18.04 em uma máquina virtual VirtualBox no Windows 10 Pro. (Veja neste link como instalar o Docker no Linux)

Cenário:

Depois de fazer algumas alterações dentro de um contêiner que usa a imagem do alpine, você decide que gostaria de manter essas mudanças. Você não quer perder essas mudanças depois de sair ou interromper o contêiner pois gostaria de reutilizar este tipo de contêiner como base para outros.

1- Criando o contêiner alp1 usando a imagem do alpine

$ docker run -t -i --name alp1 alpine:latest /bin/sh

Criamos um contêiner chamado alp1 com base na imagem alpine:latest no modo iterativo usando o interpretador bin/sh.

No contêiner executamos os comandos:

- apk update
- echo 'MEU ALPINE' > alp1.txt
- exit

A seguir executamos o comando :  docker container ps -a

E verificamos o contêiner criado com o nome alp1 e com o CONTAINER ID igual a f9ea49a83eac.

Quando você sai do contêiner, ele para de funcionar, mas ainda está disponível para você até você
remover o contâiner usando o comando docker container rm <nome ou id>

Então, antes de fazer isso, podemos comitar as alterações feitas no contâiner e criar uma nova imagem com base neste contâiner usando comando :  docker commit.

Vamos criar uma imagem com o nome alpine:macoratti a partir deste contâiner.

$ docker commit alp1 alpine:macoratti

Criamos a imagem alpine:macoratti a partir do contâiner alp1 e verificamos isso usando o comando docker images

Podemos inspecionar as alterações que foram feitas no interior deste contêinere usando o comando :
docker container diff alp1

Observe a  primeira letra de cada linha:

Agora podemos remover o contâiner alp1 pois temos a imagem alpine:macoratti a partir da qual podemos criar outros contêineres.

A título de exemplo vamos criar o contêiner alp2 a partir da imagem alpine:macoratti:

docker container run -it --name alp2 alpine:macoratti /bin/sh

Criamos o contêiner alp2 no modo iterativo, e, no contêiner exibimos os arquivos via comando ls -g onde vemos o arquivo alp1.txt criado no contêiner anterior.

Confirmamos assim que nossa imagem alpine:macoratti contém as alterações feitas no contêiner alp1 e que foram preservadas usando o comando docker commit.

"Combati o bom combate, acabei a carreira, guardei a fé.
Desde agora, a coroa da justiça me está guardada, a qual o Senhor, justo juiz, me dará naquele dia;
e não somente a mim, mas também a todos os que amarem a sua vinda. "
2 Timóteo 4:7,8

Veja os Destaques e novidades do SUPER DVD Visual Basic (sempre atualizado) : clique e confira !

Quer migrar para o VB .NET ?

Quer aprender C# ??

Quer aprender os conceitos da Programação Orientada a objetos ?

Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ?

  Gostou ?   Compartilhe no Facebook   Compartilhe no Twitter

Referências:


José Carlos Macoratti