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