6.2 Personalizando Imagem Docker

Nos capítulos anteriores, utilizamos imagens do Hub Docker e as personalizamos para atender nossas necessidades de configuração de Servidor de Banco de Dados e Servidor de Aplicação e Servidor de Monitoramento.

Uma vez que temos um arquivo Dockerfile contento essa alteração, o mesmo Dockerfile pode ser utilizado para a construção de uma imagem personalizada e já fizemos isso em capítulo anteriores utilizando-se o comando docker build. Entretanto, a imagem personalizada foi mantida apenas localmente e não disponibilizada para uso geral. Para darmos mais esse passo precisamos, primeiro, ter nossa conta no Hub Docker e criar o nosso DOCKER_TOKEN, conforme descrito na Seção 5.4 do Capítulo 5. Os passos a seguir assumem que essa tarefa já foi feita e, portanto, podemos agora enviar as imagens geradas localmente para nossas respectivas contas no Hub Docker de modo que, posteriormente, podemos simplificar o nosso arquivo do docker-compose para que passa a utilizar essas nossas imagens.

Para realizar esse processo, estão disponibilizados no nosso GitHub a versão mais atual dos aquivos do devops-extra, incluindo esses arquivos referentes ao Capítulo 6. Para download basta clonar ou atualizar seu repositório local com os dados de https://github.com/aurimrv/devops-extra.

Dentro da pasta devops-extra/cap-06 estão os subdiretórios com os arquivos Dockerfile personalizando os servidores Web e de Monitoramento. A título de ilustração, abaixo está o Dockerfile do Servidor de Banco de Dados.

$ cd ~/temp/devops-extra/cap-06/db/
$ ls -l
total 8
-rw-r--r-- 1 auri auri 245 out 22 14:50 Dockerfile
-rw-r--r-- 1 auri auri  40 out 22 14:50 schema.sql
FROM mysql:5.6

LABEL maintainer="auri@ufscar.br, g4briel.4lves@gmail.com"

ENV MYSQL_ROOT_PASSWORD secret
ENV MYSQL_DATABASE loja_schema
ENV MYSQL_USER loja
ENV MYSQL_PASSWORD=lojasecret

COPY schema.sql /docker-entrypoint-initdb.d

EXPOSE 3306

Para construir essa imagem personalizada para uso local, utilizamos o comando abaixo:

$ docker build -t mysql-server-img .

Entretanto, como desejamos que essa imagem possa ser complartilhada via Hub Docker, inicialmente, precisamos mudar o seu nome de modo a incluir, precendendo o mesmo, o DOCKER_ID do usuário Docker do Hub Docker que foi criado. No meu caso, esse DOCKER_ID é aurimrv. Desse modo, o comando de construção a ser utilizado será:

$ docker build -t aurimrv/mysql-server-img .

Sending build context to Docker daemon  3.072kB
Step 1/8 : FROM mysql:5.6
 ---> 44241dbd4d38
Step 2/8 : LABEL maintainer="auri@ufscar.br, g4briel.4lves@gmail.com"
 ---> Using cache
 ---> f067af2f298c
Step 3/8 : ENV MYSQL_ROOT_PASSWORD secret
 ---> Using cache
 ---> 3ccc75d5cc19
Step 4/8 : ENV MYSQL_DATABASE loja_schema
 ---> Using cache
 ---> e366aa3b7dbe
Step 5/8 : ENV MYSQL_USER loja
 ---> Using cache
 ---> 9dc9f3916976
Step 6/8 : ENV MYSQL_PASSWORD=lojasecret
 ---> Using cache
 ---> d0e63e3fd332
Step 7/8 : COPY schema.sql /docker-entrypoint-initdb.d
 ---> Using cache
 ---> 3850f356adb2
Step 8/8 : EXPOSE 3306
 ---> Using cache
 ---> 01d6b189721e
Successfully built 01d6b189721e
Successfully tagged aurimrv/mysql-server-img:latest

Ao final desse processo temos uma imagem denominada aurimrv/mysql-server-img, criada e armazenada localmente. Agora vamos enviá-la para o Hub Docker. Para isso você precisa saber o seu DOCKER_ID e o seu DOCKER_TOKEN. Ambos serão utilizados no processo. Ao ser solicitada a Password, simplesmente copie e cole o seu token de acesso de desenvolvedor na plataforma Hub Docker.

$ docker login -u aurimrv
Password: 
Login Succeeded

Após o login realizado com sucesso agora basta enviar a imagem para sua área do Hub Docker. Isso é feito de forma semelhante a atualização via Git, por meio de um comando docker push, conforme ilistrado abaixo.

$ docker push aurimrv/mysql-server-img

The push refers to repository [docker.io/aurimrv/mysql-server-img]
9d2d73c1545d: Layer already exists 
5b1a817757f0: Layer already exists 
e201e7ba69f1: Layer already exists 
6ed1ec213f77: Layer already exists 
d0eb1caf404c: Layer already exists 
b36d6fe7a9b6: Layer already exists 
b660817215fb: Layer already exists 
416da68a865d: Layer already exists 
f7d565e8883f: Layer already exists 
2ce7750ef4a3: Layer already exists 
b95d109635ed: Layer already exists 
767a7b7a8ec5: Layer already exists 
latest: digest: sha256:20032ff773d19ae471e971bc402e7bfa157bc9344d815a761e07117e13aae927 size: 2828

Após o docker push ter finalizado é possível observar que nossa imagem personalizada está disponível em nossa área do Hub Docker.

O mesmo processo foi feito com nosso servidor de monitoramento, e os passos estão exibidos abaixo:

$ docker build -t aurimrv/nagios-server-img .

Sending build context to Docker daemon   55.3kB
Step 1/9 : FROM jasonrivers/nagios:latest
 ---> 7c94280b661e
Step 2/9 : LABEL maintainer="auri@ufscar.br, g4briel.4lves@gmail.com"
 ---> Using cache
 ---> dfcb20e4e98e
Step 3/9 : ENV NAGIOS_TIMEZONE="America/Sao_Paulo"
 ---> Using cache
 ---> 0e84cf317546
Step 4/9 : RUN apt update
 ---> Using cache
 ---> 572cdc10331d
Step 5/9 : RUN apt install -y vim nano
 ---> Using cache
 ---> c7b67dda57c1
Step 6/9 : ADD lojacfg/loja_virtual.cfg /opt/nagios/etc/objects/lojacfg/
 ---> Using cache
 ---> 6823d76851e1
Step 7/9 : ADD contacts.cfg /opt/nagios/etc/objects/
 ---> Using cache
 ---> 4e37fbb014df
Step 8/9 : ADD nagios.cfg /opt/nagios/etc/
 ---> Using cache
 ---> 47b66dc325b2
Step 9/9 : EXPOSE 80
 ---> Using cache
 ---> 165836d5f530
Successfully built 165836d5f530
Successfully tagged aurimrv/nagios-server-img:latest

Não foi necessário realizar o login novamente nesse caso pois foi utilizada o mesmo terminal em sequência para realizar as operações.

$ docker push aurimrv/nagios-server-img
The push refers to repository [docker.io/aurimrv/nagios-server-img]
5ad0908be0ff: Preparing 
e4d4aa48e37a: Preparing 
6685dac78bf9: Preparing 
a085dc716d75: Preparing 
4683489d488e: Preparing 
e5dd2d9b7735: Waiting 
6060c441ebaa: Layer already exists 
2c4dd97f1e59: Layer already exists 
35c30de0313e: Layer already exists 
f61edf95bd8f: Layer already exists 
af440682de78: Layer already exists 
6a6538e1a5e9: Layer already exists 
176835a5c4dc: Layer already exists 
e34985ddec48: Layer already exists 
31491a5ae278: Layer already exists 
b10910fc57a2: Layer already exists 
8ab8dbbd6d20: Layer already exists 
722795270cba: Layer already exists 
206433c18554: Layer already exists 
61da3df95e88: Layer already exists 
362e6689e1f6: Layer already exists 
9bd75ae5ff12: Layer already exists 
66f8acded1fc: Layer already exists 
bf0e0461021d: Layer already exists 
bb9139ca298c: Layer already exists 
a5d96555cdb0: Layer already exists 
29ede15e349e: Layer already exists 
c7b7943db5ee: Layer already exists 
f7944235e8fa: Layer already exists 
0e1da7f1c508: Layer already exists 
97d1ebbdc853: Layer already exists 
e79142719515: Layer already exists 
aeda103e78c9: Layer already exists 
2558e637fbff: Layer already exists 
f749b9b0fb21: Layer already exists 
latest: digest: sha256:1225d350979d3028a390bf52dc8f77faf5874391980638df3eb4acaecf632b64 size: 7625

Last updated