Como criei minha própria imagem Docker do Apache Benchmark para testes de stress em servidores web

Marcos Vilela - Nov 8 - - Dev Community

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"]
Enter fullscreen mode Exit fullscreen mode

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]/
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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.

. . .