Criando um container com o Docker

Criando um container com o Docker

O Docker é uma plataforma de código aberto que facilita a criação, o gerenciamento e a execução de containers. Ele permite que você empacote uma aplicação e suas dependências em um container, garantindo que ela funcione em qualquer ambiente.

Para garantir que o nosso container seja seguro, escalável e disponível, seguimos boas práticas de segurança, escalabilidade, disponibilidade, automação e entrega contínua.

Reduzimos o tamanho da imagem com o multi-stage build, utilizamos imagens oficiais com garantia de procedência, como imagem base a cgr.dev/chainguard/python*, uma imagem miníma do Python. Afinal, quanto menor a imagem, menor a superfície de ataque.

Para atestar a qualidade do nosso Dockerfile, utilizamos o hadolint, um linter para Dockerfiles que verifica se o arquivo está seguindo as melhores práticas.

Para garantir que o container seja seguro, utilizamos o docker scout, uma ferramenta de segurança que verifica se a imagem possui vulnerabilidades conhecidas.

E para ter outra verificação de segurança, utilizamos o trivy, uma ferramenta de análise de vulnerabilidades para imagens de contêineres.

Para instalar a ferramenta trivy, execute o comando:

cd scripts
sudo chmod +x tools.sh
./tools.sh

Verificando a qualidade do Dockerfile com o hadolint:

cd src
hadolint Dockerfile

O output é algo parecido com:

Dockerfile:4 DL3042 warning: Avoid use of cache directory with pip. Use `pip install --no-cache-dir <package>`
Dockerfile:6 DL3007 warning: Using latest is prone to errors if the image will ever update. Pin the version explicitly to a release tag

A partir dessas informações é possível corrigir o Dockerfile para seguir as melhores práticas.

Agora vamos construir a imagem Docker. Para isso, execute o comando:

cd src
docker build -t nataliagranato/giropops-senhas:v1.0.0 .

Para disponibilizar a imagem no Docker Hub, execute o comando:

docker push nataliagranato/giropops-senhas:v1.0.0

Para verificar se a imagem foi disponibilizada com sucesso, acesse o Docker Hub.

Verificando se a imagem possui vulnerabilidades conhecidas com o trivy:

trivy image nataliagranato/giropops-senhas:v1.0.0

Verificando se a imagem possui vulnerabilidades conhecidas com o docker scout:

docker-scout nataliagranato/giropops-senhas:v1.0.0

O resultado das análises está disponível em /screenshots.

Se você chegou até aqui é sabido que a aplicação depende do Redis, por isso resolvemos construir uma imagem para ele até o momento sem vulnerabilidades conhecidas.

Para construir a imagem do Redis, execute o comando:

cd redis
docker build -t nataliagranato/giropops-redis:v1.0.0 .

Para disponibilizar a imagem no Docker Hub, execute o comando:

docker push nataliagranato/giropops-redis:v1.0.0

Agora que você sabe como verificar a qualidade e a segurança de uma imagem Docker, pode aplicar essas práticas em seus projetos. E não esqueça de utilizar o .dockerignore para evitar a inclusão de arquivos desnecessários na imagem.

Construí uma pipeline de CI/CD para automatizar a construção e a disponibilização das imagens Docker. Para isso, utilizei o GitHub Actions, uma ferramenta de integração contínua e entrega contínua que permite automatizar tarefas e fluxos de trabalho. O arquivo de configuração da pipeline está disponível em .github/workflows/giropops-docker.yml. Clique aqui para visualizar o resultado da execução da pipeline.

Para experimentar a aplicação execute o docker-compose na raiz do projeto:

docker-compose up -d

Acesse a aplicação em http://localhost:5000/.

Isso foi tudo! Obrigada por acompanhar o projeto até aqui. 🚀

Last updated