Alô galera! Retomando nossos estudos sobre Docker, hoje apresentamos mais um post da série. Já vimos o conceito e a estrutura do docker, seus recursos de gerenciamento de armazenamento e redes, e mostramos seu funcionamento básico na prática, abordando desde a instalação até o deploy simples de aplicações containerizadas. Nesse post vamos abordar a criação de imagens.
Uma imagem, conforme abordamos no primeiro post, é composta por camadas. Mais especificamente, uma imagem é um conjunto de camadas empilhadas sobre uma camada base. Cada camada da imagem corresponde a uma ação. Podemos verificar as ações (comandos) que criaram cada camada de uma determinada imagem, observando a coluna CREATED BY da saída do comando docker history, conforme abaixo:
root@docker-host:~# docker history ubuntu:15.04
IMAGE CREATED CREATED BY SIZE COMMENT
d1b55fd07600 5 months ago /bin/sh -c #(nop) CMD ["/bin/bash"] 0 B
<missing> 5 months ago /bin/sh -c sed -i 's/^#\s*\(deb.*universe\)$/ 1.879 kB
<missing> 5 months ago /bin/sh -c echo '#!/bin/sh' > /usr/sbin/polic 701 B
<missing> 5 months ago /bin/sh -c #(nop) ADD file:3f4708cf445dc1b537 131.3 MB
A última camada da lista (de cima para baixo) é a base da imagem. As camadas adjacentes foram criadas por instruções que executaram comandos (echo, sed), ou que definiram uma configuração padrão na imagem (/bin/bash). Além disso, o tamanho das camadas varia de acordo com a instrução. Por exemplo, uma camada criada a partir de uma instrução que define uma configuração, será menor do que uma camada onde um arquivo foi criado ou um pacote instalado.
A criação de uma imagem personalizada consiste basicamente em acrescentar novas camadas à imagem base. Esse processo é feito usando containers.