Veja mais um artigo da série sobre Docker escrito pelo nosso #cloudspecialist Thiago Marques, dessa vez entenda como fazer o build do Dockerfile!

O pai ta on!!
Em nosso último post falamos sobre o Dockerfile, e apresentamos um exemplo de suas funcionalidades. Hoje aprenderemos como criar o build do arquivo, já com uma aplicação CRUD em pleno funcionamento.
Para isso utilizaremos a base de um CRUD de cadastro de clientes em python e flask criado pelo Moises Abraão, e contemplaremos no Dockerfile os passos:

1. Fazer o upgrade dos pacotes do SO;
2. Instalar os requisitos para a aplicação (banco, python e flask);
3. Copiar os arquivos do github para dentro do container;
4. Configurar a aplicação com os parâmetros necessários;
5. Efetuar o deploy da aplicação;

Processo de build do Dockerfile


Fonte: Clique aqui

Para iniciar o processo do build, copie as informações abaixo, e salve em um arquivo chamado Dockerfile.

FROM ubuntu:latest

#define o responsável pela aplicação
LABEL maintainer=”Thiago Marques”

#Atualiza o SO
RUN apt-get update && apt-get upgrade -y

#Instala o python3, pip3 e o git
RUN apt-get install python3 python3-pip git -y

#clona o APP
RUN git clone https://github.com/thiagosagara/CRUD-FLASK-PYTHON.git /opt/CRUD-FLASK-PYTHON/

#vai para o diretório principal
WORKDIR /opt/CRUD-FLASK-PYTHON/

#Instala o aplicativo
RUN pip3 install -r requirements.txt
RUN python3 -m flask db init && python3 -m flask db migrate && python3 -m flask db upgrade

#Expoe a porta 80 (apenas para documentação)
EXPOSE 80

# Entra na pasta do app (só é executado quando iniciamos o container)
CMD [“python3”, “wsgi.py”]

Após salvar o arquivo iniciarmos o processo do build, com o comando:
docker build -t thiagosagara/myapp:1.0 .

Nesse comando usamos a opção ‘-t’ para definir a tag, que seria basicamente a versão da aplicação. Nesse caso 1.0.
Note que também existe um ponto (.) no final do comando, que referência o diretório onde o build será efetuado. O build procura o arquivo Dockerfile, caso ele tenha outro nome e/ou não está na mesma pasta, você pode usar a opção ‘-f’ e indicar o diretório.

Após a execução do comando para cada instrução será gerado um passo (step):


Após o término do build, será provisionado no repositório local a nova imagem:

Com isso vamos agora criar um container com essa imagem. Note que quando criamos a instrução de CMD que existe no Dockerfile aparece no ‘COMMAND’ do container, ou seja, vai ser o comando que vai iniciar quando criamos o container. Nesse caso usamos para iniciar a aplicação, mas poderia ser simplesmente um ‘/bin/bash’.

Após subir o container podemos visualizar os logs com o comando docker logs . No nosso exemplo conseguimos ver os métodos do HTTP e os códigos do protocolo ao passo que vamos navegando pela aplicação.

Abaixo os screenshots da aplicação:


Boas práticas no Dockerfile

É importante notar que ao criar uma imagem com tudo que você precisa, é possível deixá-la grande, e onerar o processo de atualização da aplicação. Lembre-se sempre que a ideia de usar container é justamente para garantir a utilização dos recursos de forma mais eficiente. Se você vai utilizá-lo para criar um monolito em container, talvez não faça tanto sentido.

Assim existe algumas boas práticas que devem ser observadas, como:

1. Crie containers efêmeros.
• Você precisa garantir que pode parar, destruir e reconstruir um container com o mínimo de setup possível.
2. Entenda o processo que sua aplicação faz antes de construir uma imagem;
• Anote o ‘passo-a-passo’ do que você precisa fazer para a aplicação estar disponível depois que sobe a base do container. O que normalmente faço, é subir um container sem nada, e ir instalando o que preciso até estar da forma que quero. Depois, analiso o history da máquina e coleto os comandos que utilizei para criar o dockerfile.
3. Não instale pacotes desnecessários;
• Nem todo pago que você considera legal pode ser interessante instalar. Cada pacote instalado aumenta a complexidade e tamanho da imagem final.
4. Desacople o máximo possível a aplicação;
• Deixe o container mais próximo de um microserviço, isso vai te ajudar em desde esteiras de desenvolvimento a upgrades da aplicação de forma segmentada (lembre-se que o próprio docker segmentou os runtimes para facilitar as coisas);
5. Minimize a quantidade de layers(steps) do build;
• Não precisa criar um RUN para cada yum install que você precisa na aplicação.
A dica aqui é, use o RUN com documentação de cada estágio, por exemplo: um RUN para atualizar o SO, um para instalar os programas e um para o deploy da aplicação.

Veja os outros artigos sobre Docker!
Entendendo Docker
Docker Compose – Gerenciamento e deploy de imagens
Arquitetura Docker
O que é DockerFile?
That’s all folks! Be Happy!!!

OUTRAS PUBLICAÇÕES

Grupo GCB S.A revolucionando o mercado financeiro em união com a AWS

Da área financeira de atuação comum, o Grupo GCB passou a buscar escalabilidade e inovação, através do uso intensivo de tecnologia e fortalecendo a parceria da AWS. Hoje, conta com um motor de originação e distribuição de crédito 100% digital que opera 24 horas por dia, 7 dias por semana.

Nós usamos cookies para garantir e oferecer a melhor experiência de navegação em nosso site! Mais informações