Decidi criar uma imagem Docker personalizada para o Apache Benchmark (ab), uma ferramenta clássica para testes de desempenho em servidores web. Este projeto foi uma oportunidade testar meu conhecimento em Docker e configurar um pipeline automatizado no GitHub Actions para publicação no Docker Hub. Vou compartilhar os detalhes de como desenvolvi essa solução e os aprendizados que tive ao longo do processo.
Sobre o Apache Benchmark
O Apache Benchmark, ou simplesmente ab
, é uma ferramenta de linha de comando que permite realizar testes de desempenho em servidores web. Ele simula o tráfego de múltiplos usuários, mede o tempo de resposta do servidor e ajuda a entender sua capacidade de lidar com diferentes cargas de requisições.
O Dockerfile
Para a construção dessa imagem, optei por usar a imagem base do httpd
, e então instalei o apache2-utils
, pacote que inclui o Apache Benchmark. O Dockerfile
ficou simples e direto, facilitando a reprodutibilidade do setup:
FROM httpd:latest
RUN apt-get update && \
apt-get install -y --no-install-recommends apache2-utils && \
apt-get clean && \
rm -rf /var/lib/apt/lists/*
ENTRYPOINT ["ab"]
Essa imagem permite que eu execute comandos do Apache Benchmark diretamente no contêiner sem precisar de configurações adicionais. Para rodar um teste de stress, basta o comando:
$ docker run --rm marcosvile/ab -n 2000 -c 200 https://[url]/
Automatizando o processo de build com GitHub Actions
Para garantir que minha imagem estivesse sempre atualizada e disponível, criei um pipeline de CI/CD no GitHub Actions. A configuração foi simples, mas me deu a chance de entender melhor a integração entre GitHub Actions e Docker Hub.
name: Docker
on:
push:
branches:
- main
jobs:
docker:
runs-on: 'ubuntu-latest'
steps:
- uses: actions/checkout@v3
- name: Set up Docker Build
uses: docker/setup-buildx-action@v2.0.0
- name: Login to DockerHub
uses: docker/login-action@v2.0.0
with:
username: ${{ secrets.USERNAME }}
password: ${{ secrets.PASSWORD_DOCKER_HUB }}
- name: Build and push
uses: docker/build-push-action@v3.0.0
with:
context: .
file: ./Dockerfile
push: true
tags: marcosvile/ab:latest
Para configurar o acesso seguro ao Docker Hub, adicionei minhas credenciais como secrets no repositório do GitHub, o que me permitiu automatizar o login e o push da imagem com segurança. Cada push no branch main
aciona esse pipeline, gerando e publicando uma nova versão da imagem no Docker Hub.
Aprendizados e próximos passos
Esse projeto me permitiu aprender a construção de imagens Docker, automação com GitHub Actions e publicação de imagens no Docker Hub. Além disso, comecei a enxergar esse tipo de projeto como uma forma de consolidar meu aprendizado, criando minhas próprias "ferramentas" e scripts personalizados para facilitar tarefas diárias.
Esse projeto me ajudou a consolidar conhecimentos em:
- Construção de imagens Docker personalizadas: entender melhor como estruturar e otimizar imagens para uso em testes de desempenho.
- GitHub Actions e pipeline CI/CD: explorar como configurar e gerenciar pipelines para automatizar a criação e publicação de imagens no Docker Hub.
- Criação de ferramentas próprias: incentivar a prática de desenvolver soluções personalizadas, adaptando-as para as necessidades específicas e reforçando o aprendizado.
Se quiser conferir o projeto e utilizar a imagem, ele está disponível no meu repositório do GitHub: marcosvile/apacheAB.