Docker Compose: Orquestrando Contêineres com Eficiência
Automatize Ambientes com Docker Compose: Guia Completo
Automatizar a implantação de ambientes é um passo fundamental para garantir consistência, rapidez e escalabilidade no desenvolvimento e na entrega de aplicações. Docker Compose
Introdução ao Docker Compose: conceitos e benefíciosAprenda a orquestrar contêineres com Docker Compose, obtendo configurações unificadas e execução simplificada para ambientes de produção. se destaca como uma ferramenta poderosa para orquestrar múltiplos contêineres de forma simples e unificada, permitindo que desenvolvedores, DevOps e administradores de sistemas definam, configurem e executem todo o conjunto de serviços
Configuração de aplicações multi-container com Docker ComposeConfigure múltiplos contêineres com Docker Compose e otimize a comunicação entre serviços, volumes e redes para aplicações escaláveis e seguras. com apenas alguns comandos. Neste tutorial, vamos explorar conceitos e práticas que possibilitam automatizar a criação, configuração e execução de ambientes completos utilizando Docker Compose.
Visão geral da automação com Docker Compose🔗
A automação na implantação de ambientes consiste em:
- Criar um arquivo docker-compose
Volumes em Docker: conceitos e configuraçõesAprenda passo a passo a criar e configurar volumes Docker, assegurando persistência de dados e adotando práticas recomendadas para evitar perdas..yml que descreva os serviços
Configuração de aplicações multi-container com Docker ComposeConfigure múltiplos contêineres com Docker Compose e otimize a comunicação entre serviços, volumes e redes para aplicações escaláveis e seguras. (contêineres) necessários. - Definir variáveis de ambiente
Dockerfile: criando imagens personalizadas passo a passoAprenda a criar Dockerfile para aplicações Node.js, garantindo consistência e reprodutibilidade na construção de imagens Docker. e configurações adicionais para personalizar a execução. - Executar poucos comandos que levantam todo o stack de serviços
Configuração de aplicações multi-container com Docker ComposeConfigure múltiplos contêineres com Docker Compose e otimize a comunicação entre serviços, volumes e redes para aplicações escaláveis e seguras..
O objetivo é eliminar processos manuais repetitivos, minimizando a ocorrência de erros de configuração e maximizando a eficiência
Docker vs Máquinas Virtuais: principais diferenças e casos de usoDescubra neste tutorial as principais diferenças entre Docker e Máquinas Virtuais, explorando desempenho, arquitetura e casos de uso práticos. do time.
Principais benefícios da automação
1. Reprodutibilidade: qualquer pessoa da equipe consegue iniciar o mesmo ambiente
Configuração de aplicações multi-container com Docker ComposeConfigure múltiplos contêineres com Docker Compose e otimize a comunicação entre serviços, volumes e redes para aplicações escaláveis e seguras. de forma idêntica.
2. Escalabilidade: é simples adicionar ou remover serviços
Configuração de aplicações multi-container com Docker ComposeConfigure múltiplos contêineres com Docker Compose e otimize a comunicação entre serviços, volumes e redes para aplicações escaláveis e seguras. e escalar contêineres conforme a demanda.
3. Consistência: todos os membros utilizam a mesma versão dos componentes, reduzindo problemas de compatibilidade.
Estrutura de arquivos para automação🔗
Uma prática comum ao trabalhar com Docker Compose
Introdução ao Docker Compose: conceitos e benefíciosAprenda a orquestrar contêineres com Docker Compose, obtendo configurações unificadas e execução simplificada para ambientes de produção. é organizar o projeto em diretórios que facilitem a leitura e a manutenção. A estrutura abaixo é apenas um exemplo, que pode ser ajustado conforme seu contexto:
meu-projeto/
├─ docker-compose.yml
├─ docker-compose.override.yml
├─ .env
├─ service1/
│ ├─ Dockerfile
│ └─ ...
├─ service2/
│ ├─ Dockerfile
│ └─ ...
└─ ...
A seguir, entenda como cada arquivo auxilia no processo de automação:
- docker-compose
Volumes em Docker: conceitos e configuraçõesAprenda passo a passo a criar e configurar volumes Docker, assegurando persistência de dados e adotando práticas recomendadas para evitar perdas..yml: arquivo principal que define os serviços
Configuração de aplicações multi-container com Docker ComposeConfigure múltiplos contêineres com Docker Compose e otimize a comunicação entre serviços, volumes e redes para aplicações escaláveis e seguras., volumes, redes e links. - docker-compose
Volumes em Docker: conceitos e configuraçõesAprenda passo a passo a criar e configurar volumes Docker, assegurando persistência de dados e adotando práticas recomendadas para evitar perdas..override.yml (opcional): permite sobrescrever configurações do arquivo principal, útil para diferentes ambientes (desenvolvimento, teste, produção). - .env (opcional): armazena variáveis de ambiente
Dockerfile: criando imagens personalizadas passo a passoAprenda a criar Dockerfile para aplicações Node.js, garantindo consistência e reprodutibilidade na construção de imagens Docker. que podem ser referenciadas tanto no Docker Compose quanto nos serviços em si.
Definindo serviços no docker-compose.yml🔗
No arquivo docker-compose
Volumes em Docker: conceitos e configuraçõesAprenda passo a passo a criar e configurar volumes Docker, assegurando persistência de dados e adotando práticas recomendadas para evitar perdas..yml, você descreve cada serviço e sua imagem, bem como portas, volumes, variáveis de ambiente
Dockerfile: criando imagens personalizadas passo a passoAprenda a criar Dockerfile para aplicações Node.js, garantindo consistência e reprodutibilidade na construção de imagens Docker. e dependências. Por exemplo:
version: "3.8"
services:
api:
build: ./service1
container_name: api-container
ports:
- "8080:8080"
environment:
- APP_ENV=${APP_ENV}
depends_on:
- db
db:
image: postgres:15
container_name: db-container
environment:
- POSTGRES_USER=${DB_USER}
- POSTGRES_PASSWORD=${DB_PASS}
volumes:
- db_data:/var/lib/postgresql/data
volumes:
db_data:
Alguns pontos importantes para automação:
- version: versão do esquema do Compose
Configuração de aplicações multi-container com Docker ComposeConfigure múltiplos contêineres com Docker Compose e otimize a comunicação entre serviços, volumes e redes para aplicações escaláveis e seguras. (no exemplo, 3.8). - build: caminho com o Dockerfile
Dockerfile: criando imagens personalizadas passo a passoAprenda a criar Dockerfile para aplicações Node.js, garantindo consistência e reprodutibilidade na construção de imagens Docker. para criar a imagem de forma automatizada. - environment
Configuração de aplicações multi-container com Docker ComposeConfigure múltiplos contêineres com Docker Compose e otimize a comunicação entre serviços, volumes e redes para aplicações escaláveis e seguras.: pode incluir variáveis definidas no arquivo .env. - depends_on: garante que serviços
Configuração de aplicações multi-container com Docker ComposeConfigure múltiplos contêineres com Docker Compose e otimize a comunicação entre serviços, volumes e redes para aplicações escaláveis e seguras. críticos (ex.: banco de dados) sejam iniciados antes de outros.
Variáveis de ambiente e arquivo .env🔗
Para tornar a implantação flexível, é comum utilizar o arquivo .env para centralizar valores sensíveis ou que variam entre ambientes. Exemplo de arquivo .env:
APP_ENV=production
DB_USER=admin
DB_PASS=S3nh@F0rt3
No docker-compose
Volumes em Docker: conceitos e configuraçõesAprenda passo a passo a criar e configurar volumes Docker, assegurando persistência de dados e adotando práticas recomendadas para evitar perdas..yml, essas variáveis podem ser referenciadas utilizando a sintaxe ${VARIAVEL}. Assim, quando for necessário alterar a senha do banco ou a porta de exposição de algum serviço, basta atualizar o arquivo .env. Isso automatiza a adaptação do ambiente
Configuração de aplicações multi-container com Docker ComposeConfigure múltiplos contêineres com Docker Compose e otimize a comunicação entre serviços, volumes e redes para aplicações escaláveis e seguras. para cada cenário, seja desenvolvimento local, teste ou produção.
Automatizando builds e atualizações🔗
Para garantir que sempre estejam sendo executadas as versões mais recentes dos contêineres, o Docker Compose
Introdução ao Docker Compose: conceitos e benefíciosAprenda a orquestrar contêineres com Docker Compose, obtendo configurações unificadas e execução simplificada para ambientes de produção. oferece comandos que podem ser integrados a scripts ou pipelines de automação:
1. docker compose
Introdução ao Docker Compose: conceitos e benefíciosAprenda a orquestrar contêineres com Docker Compose, obtendo configurações unificadas e execução simplificada para ambientes de produção. build: constroi as imagens de cada serviço que possui diretório com Dockerfile
Dockerfile: criando imagens personalizadas passo a passoAprenda a criar Dockerfile para aplicações Node.js, garantindo consistência e reprodutibilidade na construção de imagens Docker..
2. docker compose
Introdução ao Docker Compose: conceitos e benefíciosAprenda a orquestrar contêineres com Docker Compose, obtendo configurações unificadas e execução simplificada para ambientes de produção. pull: atualiza as imagens base
Otimizando imagens Docker para melhor desempenhoAprenda a otimizar imagens Docker com bases enxutas, redução de camadas e remoção de pacotes supérfluos para acelerar builds e melhorar a performance. a partir de repositórios remotos.
3. docker compose
Introdução ao Docker Compose: conceitos e benefíciosAprenda a orquestrar contêineres com Docker Compose, obtendo configurações unificadas e execução simplificada para ambientes de produção. up -d: cria e inicia todos os contêineres em segundo plano.
4. docker compose
Introdução ao Docker Compose: conceitos e benefíciosAprenda a orquestrar contêineres com Docker Compose, obtendo configurações unificadas e execução simplificada para ambientes de produção. down: remove os contêineres e redes
Configuração de aplicações multi-container com Docker ComposeConfigure múltiplos contêineres com Docker Compose e otimize a comunicação entre serviços, volumes e redes para aplicações escaláveis e seguras., caso necessário.
É comum combinar esses comandos em um script deploy.sh, por exemplo:
#!/bin/bash
echo "Iniciando a construção das imagens..."
docker compose build --no-cache
echo "Atualizando imagens remotas..."
docker compose pull
echo "Subindo o ambiente..."
docker compose up -d
echo "Implantação concluída!"
Esse script pode ser disparado automaticamente em sistemas de Integração Contínua (CI) ou na linha de comando para manter o ambiente
Configuração de aplicações multi-container com Docker ComposeConfigure múltiplos contêineres com Docker Compose e otimize a comunicação entre serviços, volumes e redes para aplicações escaláveis e seguras. sempre atualizado.
Estratégias de update e rollback🔗
Para cenários em que um serviço precise ser atualizado sem prejudicar a disponibilidade do ambiente
Configuração de aplicações multi-container com Docker ComposeConfigure múltiplos contêineres com Docker Compose e otimize a comunicação entre serviços, volumes e redes para aplicações escaláveis e seguras., é possível usar algumas estratégias:
- Atualização gradativa: você pode subir o novo contêiner (ex.: db_v2) e manter o anterior (db_v1) em paralelo até garantir que o novo esteja estável.
- Rollback manual: caso a nova versão apresente problemas, basta reverter o arquivo docker-compose
Volumes em Docker: conceitos e configuraçõesAprenda passo a passo a criar e configurar volumes Docker, assegurando persistência de dados e adotando práticas recomendadas para evitar perdas..yml para a configuração anterior e executar docker composenovamente.
Introdução ao Docker Compose: conceitos e benefíciosAprenda a orquestrar contêineres com Docker Compose, obtendo configurações unificadas e execução simplificada para ambientes de produção. up -d
Essas abordagens podem ser automatizadas com scripts ou mesmo integradas a soluções de CI que monitoram logs e indicadores de saúde da aplicação.
Uso de perfis e escalabilidade🔗
Uma funcionalidade útil para automatizar o uso de configurações diferentes (ex.: produção vs. desenvolvimento) é o uso de perfis no Docker Compose
Introdução ao Docker Compose: conceitos e benefíciosAprenda a orquestrar contêineres com Docker Compose, obtendo configurações unificadas e execução simplificada para ambientes de produção.. Você pode habilitar ou desabilitar determinados serviços com base em perfis, ajustando o ambiente conforme suas necessidades.
Por exemplo, em seu docker-compose
Volumes em Docker: conceitos e configuraçõesAprenda passo a passo a criar e configurar volumes Docker, assegurando persistência de dados e adotando práticas recomendadas para evitar perdas..yml:
version: "3.8"
services:
web:
image: nginx:latest
profiles: ["prod", "dev"]
cache:
image: redis:latest
profiles: ["prod"]
debug-tool:
image: alpine:latest
command: ["tail", "-f", "/dev/null"]
profiles: ["dev"]
- Ao executar
docker compose, apenas os serviços
Introdução ao Docker Compose: conceitos e benefíciosAprenda a orquestrar contêineres com Docker Compose, obtendo configurações unificadas e execução simplificada para ambientes de produção. --profile prod up -d
Configuração de aplicações multi-container com Docker ComposeConfigure múltiplos contêineres com Docker Compose e otimize a comunicação entre serviços, volumes e redes para aplicações escaláveis e seguras. web e cache serão iniciados. - Ao executar
docker compose, os serviços
Introdução ao Docker Compose: conceitos e benefíciosAprenda a orquestrar contêineres com Docker Compose, obtendo configurações unificadas e execução simplificada para ambientes de produção. --profile dev up -d
Configuração de aplicações multi-container com Docker ComposeConfigure múltiplos contêineres com Docker Compose e otimize a comunicação entre serviços, volumes e redes para aplicações escaláveis e seguras. web e debug-tool entram em execução, facilitando depurações e testes.
Além disso, você pode escalar um serviço para lidar com mais volume
Configuração de aplicações multi-container com Docker ComposeConfigure múltiplos contêineres com Docker Compose e otimize a comunicação entre serviços, volumes e redes para aplicações escaláveis e seguras. de requisições de forma simples:
docker compose up -d --scale web=3
Esse comando criará três contêineres do serviço web, permitindo melhor distribuição de carga
Resiliência e balanceamento de carga em redes DockerDescubra como implementar resiliência e balanceamento de carga em redes Docker, garantindo alta disponibilidade e desempenho contínuo mesmo em casos de falha..
Boas práticas para automação🔗
1. Controle de versão: mantenha os arquivos docker-compose
Volumes em Docker: conceitos e configuraçõesAprenda passo a passo a criar e configurar volumes Docker, assegurando persistência de dados e adotando práticas recomendadas para evitar perdas..yml, .env e demais scripts no seu repositório, garantindo rastreabilidade de mudanças.
2. Divisão de responsabilidades: evite que um único docker-compose
Volumes em Docker: conceitos e configuraçõesAprenda passo a passo a criar e configurar volumes Docker, assegurando persistência de dados e adotando práticas recomendadas para evitar perdas..yml controle um número excessivo de serviços
Configuração de aplicações multi-container com Docker ComposeConfigure múltiplos contêineres com Docker Compose e otimize a comunicação entre serviços, volumes e redes para aplicações escaláveis e seguras. desconexos. Se necessário, crie múltiplos arquivos para cada “conjunto lógico” de aplicações.
3. Documentação interna: inclua no repositório um arquivo README com instruções de como iniciar, atualizar e depurar o ambiente
Configuração de aplicações multi-container com Docker ComposeConfigure múltiplos contêineres com Docker Compose e otimize a comunicação entre serviços, volumes e redes para aplicações escaláveis e seguras..
4. Manutenção de imagens: faça limpeza periódica de imagens antigas e contêineres parados para evitar uso excessivo de armazenamento.
5. Utilize recursos nativos: perfis, overrides e variáveis de ambiente
Dockerfile: criando imagens personalizadas passo a passoAprenda a criar Dockerfile para aplicações Node.js, garantindo consistência e reprodutibilidade na construção de imagens Docker. simplificam a personalização de cada ambiente.
Exemplo completo de arquivo docker-compose.yml🔗
Abaixo, um exemplo mais completo que demonstra uma abordagem para automatizar o deployment de um ambiente
Configuração de aplicações multi-container com Docker ComposeConfigure múltiplos contêineres com Docker Compose e otimize a comunicação entre serviços, volumes e redes para aplicações escaláveis e seguras. com duas aplicações e um banco de dados:
version: "3.8"
services:
frontend:
build: ./frontend
container_name: frontend-app
ports:
- "3000:3000"
environment:
- NODE_ENV=${APP_ENV}
depends_on:
- backend
backend:
build: ./backend
container_name: backend-app
ports:
- "4000:4000"
environment:
- DB_HOST=db
- DB_USER=${DB_USER}
- DB_PASS=${DB_PASS}
depends_on:
- db
db:
image: postgres:15
container_name: db-container
environment:
- POSTGRES_USER=${DB_USER}
- POSTGRES_PASSWORD=${DB_PASS}
volumes:
- postgres_data:/var/lib/postgresql/data
volumes:
postgres_data:
Com este arquivo, basta executar docker compose para que os três contêineres estejam rodando. O frontend se comunica com o backend, e o backend interage com o banco. As variáveis de ambiente
Introdução ao Docker Compose: conceitos e benefíciosAprenda a orquestrar contêineres com Docker Compose, obtendo configurações unificadas e execução simplificada para ambientes de produção. up -d
Dockerfile: criando imagens personalizadas passo a passoAprenda a criar Dockerfile para aplicações Node.js, garantindo consistência e reprodutibilidade na construção de imagens Docker. são lidas do arquivo .env, tornando simples a troca de credenciais e configurações.
Conclusão🔗
Automatizar a implantação de ambientes com Docker Compose
Introdução ao Docker Compose: conceitos e benefíciosAprenda a orquestrar contêineres com Docker Compose, obtendo configurações unificadas e execução simplificada para ambientes de produção. reduz complexidade e falhas humanas, tornando o ciclo de desenvolvimento e entrega mais ágil. A capacidade de definir múltiplos serviços em um único arquivo, combinada com variáveis de ambiente
Dockerfile: criando imagens personalizadas passo a passoAprenda a criar Dockerfile para aplicações Node.js, garantindo consistência e reprodutibilidade na construção de imagens Docker. e estratégias de build e rollback, permite que equipes de diferentes níveis de experiência criem e gerenciem seus stacks de forma padronizada.
Ao aplicar as práticas abordadas neste tutorial, você estará pronto para construir ambientes sustentáveis, versionados e facilmente reproduzíveis, economizando tempo e recursos, além de garantir consistência em todo o ciclo de vida da aplicação.
Autor: Marcelo V. Souza - Engenheiro de Sistemas e Entusiasta em IoT e Desenvolvimento de Software, com foco em inovação tecnológica.
Referências🔗
- Documentação do Docker Engine, útil para compreender como os contêineres e imagens funcionam por baixo dos comandos do Docker Compose: docs.docker.com/engine/
- Documentação oficial do Docker, que fornece fundamentos e boas práticas usadas no tutorial: docs.docker.com/
- Guia oficial do Docker Compose, essencial para entender e aprofundar o conteúdo abordado sobre automação de ambientes: docs.docker.com/compose/
- Referência de linha de comando Docker CLI, que pode complementar o entendimento dos comandos executados via Docker Compose: docs.docker.com/engine/reference/commandline/docker/
- Repositório de imagens oficiais no Docker Hub, onde é possível encontrar imagens para utilização e build nos serviços descritos: hub.docker.com/
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás
há 10 meses atrás