devopslab.com.brDocker – Como criar uma imagem Docker a partir de um Container utilizando o Docker commit
Você pode criar uma imagem a partir de um container, por exemplo você criou um container qualquer, configurou as aplicações, serviços, instalou os pacotes necessários, enfim deixou o container pronto para uso.
Para não ter que repetir este processo toda vez, é possível criar uma imagem a partir deste container com o comando docker commit e distribuir a imagem para outros hosts Docker, Publicar no Docker Hub ou Docker Registry, ou simplesmente empacotar com o tar e distribuir da melhor forma que você achar. Vamos ver como isto funciona.
Criando uma container
#docker run -ti --name webserver-nginx -h webserver-nginx ubuntu /bin/bash
Criei um container com o nome webserver-nginx e hostname webserver-nginx.
Utilizei a imagem pública Ubuntu, que foi baixada do Docker Hub.
Instalei o Nginx e configurei, atualizei a imagem, instalei o Php e etc.Criando uma imagem
#docker commit 3b64e4b39127 imagemnginx:versao1
3b64e4b39127 – É o ID do nosso container, é a partir dele que vamos fazer o commit e criar uma nova imagem. Você pode consultar o id do container pelo comando “docker ps”.
3b64e4b39127 → webserver-nginximagemnginx:versao1 – Criamos uma imagem com a tag versao1. Quando você atualizar uma imagem é recomendado você atualizar a tag, ela é o seu controle de versão.
Criação e consulta da imagem
[root@docker-engine1 ~]# docker commit 3b64e4b39127 imagemnginx:versao1
sha256:fc511188b2fadc7a6aa3c97b10d4f1e32eeab4721571690d5f90d949b8bedefa
[root@docker-engine1 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
imagemnginx versao1 fc511188b2fa 21 seconds ago 291.4 MB
Utilizando a nova imagem
Vamos criar um container a partir desta nova imagem.
docker run -ti -p 80:80 –name novo-nginx -h novo-nginx imagemnginx:versao1
[root@docker-engine1 ~]# docker run -ti -p 80:80 --name novo-nginx -h novo-nginx imagemnginx:versao1 /bin/bash
root@novo-nginx:/# dpkg -l| grep nginx
ii nginx 1.4.6-1ubuntu3 all small, powerful, scalable web/proxy server
ii nginx-common 1.4.6-1ubuntu3 all small, powerful, scalable web/proxy server - common files
ii nginx-core 1.4.6-1ubuntu3 amd64 nginx web/proxy server (core version)
root@novo-nginx:/# [root@docker-engine1 ~]#
[root@docker-engine1 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
e169316ec53b imagemnginx:versao1 "/bin/bash" 40 seconds ago Up 38 seconds 0.0.0.0:80->80/tcp novo-nginx
Distribuindo as imagens
Tudo pronto, mas e agora como distribuir esta imagem?.
Você pode subir esta imagem para o Docker Hub, ou você pode copiar para um repositório local criado com o Docker Registry ou então empacotar com o tar.Distribuindo as imagens através do Docker Registry
Também aplica-se para o Docker hub, a ideia é a mesma.Eu já publiquei um tutorial ensinando a criar um repositório local com o Docker Registry, você pode conferir neste link Como criar um Docker Registry. O conceito é o mesmo para o Docker hub.
Registre a imagem no Docker Registre
#docker tag imagemnginx:versao1 repo-dockerimages.devopslab.com.br:5000/imagemnginx:versao1
Copie a imagem para o Docker Registry
#docker push repo-dockerimages.devopslab.com.br:5000/imagemnginx:versao1
[root@docker-engine1 ~]# docker tag imagemnginx:versao1 repo-dockerimages.devopslab.com.br:5000/imagemnginx:versao1
[root@docker-engine1 ~]#
[root@docker-engine1 ~]# docker push repo-dockerimages.devopslab.com.br:5000/imagemnginx:versao1
The push refers to a repository [repo-dockerimages.devopslab.com.br:5000/imagemnginx]
761e340d23af: Pushed
5f70bf18a086: Pushed
1b82ce694c3b: Pushed
db6b2d84f3c6: Pushed
05b940eef08d: Pushed
versao1: digest: sha256:1476afd82aa17a0aa31747bf57df182c4e2486e5c7bb7ee3384f726adc472af5 size: 1341
Utilizando a imagem a partir de qualquer host da rede
Logue em qualquer Docker Host da sua rede e tente criar um container.
[root@docker-engine2 /]# docker run -ti --name nginx-testeimage -h nginx-testeimage repo-dockerimages.devopslab.com.br:5000/imagemnginx:versao1 bash
root@nginx-testeimage:/# dpkg -l | grep nginx
ii nginx 1.4.6-1ubuntu3 all small, powerful, scalable web/proxy server
ii nginx-common 1.4.6-1ubuntu3 all small, powerful, scalable web/proxy server - common files
ii nginx-core 1.4.6-1ubuntu3 amd64 nginx web/proxy server (core version)
root@nginx-testeimage:/# [root@docker-engine2 /]#
[root@docker-engine2 /]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f31d5a478bf9 repo-dockerimages.devopslab.com.br:5000/imagemnginx:versao1 "bash" 17 seconds ago Up 15 seconds nginx-testeimage
Distribuindo as imagens na mão via pacote tar
Vou mostar como exportar e importar uma imagem Docker via pacote tar. Isto é uma opção em relação ao Docker Registry e Docker Hub.Exportando a imagem
Primeiramente salve a imagem para um arquivo .tar.#docker save repo-dockerimages.devopslab.com.br:5000/imagemnginx:versao1 > /tmp/minha-imagem.tar
[root@docker-engine1 ~]# docker save repo-dockerimages.devopslab.com.br:5000/imagemnginx:versao1 > /tmp/minha-imagem.tar
[root@docker-engine1 ~]# ls -lh /tmp/minha-imagem.tar
-rw-r--r-- 1 root root 291M Mar 30 00:49 /tmp/minha-imagem.tar
Importando a imagem
Importando a imagem
Agora basta copiar a imagem empacotada minha-imagem.tar para qualquer host e importar.#docker load < minha-imagem.tar
root@docker-engine4 ~]# docker load < minha-imagem.tar
[root@docker-engine4 ~]# docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
repo-dockerimages.devopslab.com.br:5000/imagemnginx versao1 fc511188b2fa About an hour ago 291.4 MB
[root@docker-engine4 ~]# docker run -ti --name container-teste-import -h container-teste-import repo-dockerimages.devopslab.com.br:5000/imagemnginx:versao1 bash
root@container-teste-import:/# dpkg -l | grep nginx
ii nginx 1.4.6-1ubuntu3 all small, powerful, scalable web/proxy server
ii nginx-common 1.4.6-1ubuntu3 all small, powerful, scalable web/proxy server - common files
ii nginx-core 1.4.6-1ubuntu3 amd64 nginx web/proxy server (core version)
root@container-teste-import:/#
[root@docker-engine4 ~]# docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
deb7cd78e920 repo-dockerimages.devopslab.com.br:5000/imagemnginx:versao1 "bash" 51 seconds ago Up 50 seconds container-teste-import
Até a próxima.
Leonardo Macedo Cerqueira
Comentários