DevOps & CI/CD Nathan Geeksman

Configurando um Ambiente de Desenvolvimento Local com Docker Compose.

Configurando um Ambiente de Desenvolvimento Local com Docker Compose.

Configurando um Ambiente de Desenvolvimento Local com Docker Compose.

Introdução

A configuração de um ambiente de desenvolvimento local é um passo fundamental no processo de desenvolvimento de software. Com a crescente complexidade dos projetos, torna-se cada vez mais difícil manter uma configuração consistente e adequada para o desenvolvimento em diferentes ambientes.

Essa questão se torna ainda mais crítica quando lidamos com aplicações que dependem de múltiplas tecnologias e serviços. A configuração manual desses ambientes pode ser um processo tedioso, requerendo conhecimentos especializados e tempo considerável.

O Docker Compose é uma ferramenta versátil que resolve essa questão, permitindo a definição de um ambiente de desenvolvimento isolado e repetível por meio de um arquivo YAML. Essa abordagem facilita a configuração inicial, reduz conflitos entre diferentes equipes e permite testes mais confiáveis.

Neste artigo, você aprenderá como configurar um ambiente de desenvolvimento local com Docker Compose, aproveitando todas as suas vantagens e melhorias na produtividade.

O que é e por que importa

O Docker Compose é uma ferramenta de automação de containerização que permite gerenciar e compor aplicações distribuídas em múltiplos containers como um todo, utilizando a linguagem YAML para definição do ambiente. Com ele, você pode definir serviços, volumes e redes entre os containers com facilidade, eliminando a necessidade de configuração manual.

A principal motivação por trás do uso do Docker Compose é resolver o problema da inconsistência nos ambientes de desenvolvimento. Ao configurar um ambiente isolado e repetível, você garante que todos os membros da equipe tenham acesso a um ambiente idêntico, reduzindo conflitos entre as equipes e facilitando a colaboração.

O Docker Compose também resolve o problema da complexidade na configuração de aplicações que dependem de múltiplas tecnologias e serviços. Ao definir todos os componentes da aplicação em um único arquivo YAML, você pode gerenciar facilmente as dependências entre eles e garantir que a aplicação seja executada corretamente.

Além disso, o Docker Compose permite a criação de ambientes de desenvolvimento mais rápidos e eficientes. Com a ferramenta, você pode criar um ambiente de desenvolvimento em minutos, sem necessidade de configurações manuais tediosas. Isso permite que os desenvolvedores focem no código e na lógica da aplicação, sem se preocupar com a configuração do ambiente.

Em resumo, o Docker Compose é uma ferramenta fundamental para qualquer projeto de software que precise gerenciar aplicações distribuídas em múltiplos containers. Ele resolve problemas de inconsistência nos ambientes de desenvolvimento e complexidade na configuração de aplicações, tornando a criação de ambientes de desenvolvimento mais rápida e eficiente.

Como funciona na prática

O Docker Compose funciona por meio de um arquivo YAML chamado docker-compose.yml, que define a configuração dos serviços e containers da aplicação. O arquivo é interpretado pelo comando docker-compose, que executa as ações definidas nele.

Aqui estão as etapas internas do funcionamento do Docker Compose:

  • Lê o arquivo de configuração: O comando docker-compose lê o arquivo docker-compose.yml e extrai informações sobre os serviços, volumes, redes e containers.
  • Cria a rede: O Docker Compose cria uma rede virtual para que os containers se comuniquem entre si. Isso é feito com o comando docker network create.
  • Configura os volumes: O Docker Compose configura os volumes definidos no arquivo de configuração, permitindo que os dados dos containers sejam persistidos mesmo após a remoção do container.
  • Cria os containers: O Docker Compose cria os containers especificados no arquivo de configuração, utilizando o comando docker run.
  • Configura as dependências: O Docker Compose define as dependências entre os serviços e containers, garantindo que as dependências sejam atendidas antes que os serviços sejam iniciados.
  • Inicia os serviços: O Docker Compose inicia os serviços especificados no arquivo de configuração, utilizando o comando docker start.
  • Verifica a saúde dos serviços: O Docker Compose verifica a saúde dos serviços e containers, garantindo que todos estejam funcionando corretamente.

A sequência dessas etapas garante que o ambiente de desenvolvimento seja configurado corretamente e que os serviços sejam iniciados corretamente. Isso é feito automaticamente pelo Docker Compose, eliminando a necessidade de configuração manual e reduzindo os erros humanos.

Exemplo real

Neste exemplo, criaremos um ambiente de desenvolvimento para uma aplicação web utilizando Docker Compose. A aplicação consiste em dois containers: um container para a aplicação web e outro para o banco de dados.

version: '3'
services:
  # Serviço da aplicação web
  web:
    build: .
    ports:
      - "8080:80"
    depends_on:
      - db
    environment:
      DATABASE_HOST: db
      DATABASE_NAME: mydb
      DATABASE_USER: myuser
      DATABASE_PASSWORD: mypass

  # Serviço do banco de dados
  db:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: rpass
      MYSQL_DATABASE: mydb
      MYSQL_USER: myuser
      MYSQL_PASSWORD: mypass
docker-compose build
docker-compose up -d
http://localhost:8080

Esse exemplo mostra como configurar um ambiente de desenvolvimento com Docker Compose para uma aplicação web que depende de um banco de dados. O arquivo docker-compose.yml define os serviços da aplicação e do banco de dados, bem como as configurações necessárias para a comunicação entre eles.

Boas práticas

Defina um ambiente de desenvolvimento consistente

  • Use Docker Compose para configurar e gerenciar os ambientes de desenvolvimento, em vez de fazer isso manualmente.
  • Crie um arquivo docker-compose.yml centralizado que defina as configurações do ambiente.
  • Utilize imagens oficiais das bibliotecas ou linguagens de programação para garantir a compatibilidade e atualizações fáceis.

Utilize o Docker Compose como uma ferramenta de gerenciamento

  • Verifique regularmente o estado dos serviços e containers com docker-compose ps.
  • Use docker-compose exec para executar comandos no container, em vez de usar SSH.
  • Considere implementar um sistema de segurança de acesso a partir do ambiente de desenvolvimento.

Armadilhas comuns

Evite sobrecarregar o ambiente de desenvolvimento

  • Não inclua serviços desnecessários no arquivo docker-compose.yml.
  • Limite o número de containers que rodam simultaneamente.
  • Use variáveis de ambiente para evitar hardcoding de credenciais e configurações.

Garanta a atualização das imagens e do Docker Compose

  • Atualize regularmente as imagens utilizadas nos serviços.
  • Mantenha o Docker Compose em sync com as versões mais recentes.

Conclusão

Ao configurar um ambiente de desenvolvimento local com Docker Compose, é fundamental manter a consistência e a padronização em suas configurações. Utilizar imagens oficiais das bibliotecas ou linguagens de programação garante compatibilidade e atualizações fáceis. Além disso, é crucial garantir a segurança do ambiente ao implementar um sistema de acesso a partir dele.

Para continuar aprimorando sua habilidade em configuração de ambientes de desenvolvimento com Docker Compose, considere aprender sobre:

  • Implementação de sistemas de gerenciamento de versão para as configurações do Docker Compose.
  • Utilização de ferramentas como Docker Swarm ou Kubernetes para escalabilidade e distribuição de carga.
  • Segurança avançada em ambientes de desenvolvimento com Docker, incluindo autenticação e autorização.

Referências

  • Docker Inc.. Docker Compose Reference. Disponível em: https://docs.docker.com/compose/. Acesso: 2024.
  • Open Web Application Security Project (OWASP). Cheat Sheet de Segurança no Desenvolvimento. Disponível em: https://owasp.org/www-project-cheat-sheets/. Acesso: 2024.
  • Martin Fowler. Continous Integration. Disponível em: https://martinfowler.com/articles/continuousIntegration.html. Acesso: 2024.
  • ThoughtWorks. Docker e Microserviços. Disponível em: https://www.thoughtworks.com/pt-br/insights/blog/docker-e-micro-servicos. Acesso: 2024.
  • Heroku. 12 Factor App. Disponível em: https://12factor.net/. Acesso: 2024.