Docker para Desenvolvedores: Imagens, Contêineres e Compose

DevOps2026-10-02TryQuickToolBox

Você provavelmente já ouviu falar do Docker e de como ele pode simplificar seu fluxo de trabalho de desenvolvimento. Mas quando você encontra pela primeira vez termos como imagens, contêineres e Docker Compose, pode parecer assustador. Este guia elimina o ruído e mostra exatamente como usar o Docker de forma eficaz em seus projetos.

O que é Docker e por que você deveria se importar?

Docker é uma plataforma que empacota sua aplicação e suas dependências em uma unidade padronizada chamada contêiner. Contêineres são leves, portáteis e isolados uns dos outros. Eles resolvem o clássico problema do "funciona na minha máquina" ao garantir que sua aplicação seja executada da mesma forma em qualquer lugar.

Diferente das máquinas virtuais, os contêineres compartilham o kernel do sistema operacional host, tornando-os mais rápidos para iniciar e mais eficientes. É por isso que o Docker se tornou um item essencial nos pipelines modernos de desenvolvimento e implantação.

Imagens vs. Contêineres: Os Blocos de Construção

Uma imagem é um template somente leitura que contém o código da sua aplicação, runtime, bibliotecas e configurações. Um contêiner é uma instância em execução de uma imagem. Pense em uma imagem como uma classe e em um contêiner como um objeto.

Você cria imagens usando um Dockerfile. Aqui está um exemplo simples para um app Node.js:

FROM node:18-alpine
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["node", "server.js"]

Cada linha no Dockerfile cria uma camada. As camadas são armazenadas em cache, então as reconstruções são mais rápidas quando apenas etapas posteriores mudam.

Comandos Docker Comuns

Docker Compose: Gerenciando Apps Multi-Contêiner

Aplicativos do mundo real frequentemente precisam de mais de um serviço: um servidor web, um banco de dados, um cache. O Docker Compose permite definir e executar aplicações multi-contêiner com um único arquivo YAML.

Aqui está um docker-compose.yml para um app Node.js com PostgreSQL e Redis:

version: '3.8'
services:
  web:
    build: .
    ports:
      - "3000:3000"
    environment:
      - DATABASE_URL=postgres://user:pass@db:5432/mydb
      - REDIS_URL=redis://cache:6379
    depends_on:
      - db
      - cache
  db:
    image: postgres:15
    environment:
      POSTGRES_USER: user
      POSTGRES_PASSWORD: pass
      POSTGRES_DB: mydb
    volumes:
      - pgdata:/var/lib/postgresql/data
  cache:
    image: redis:7
volumes:
  pgdata:

Execute docker compose up e todos os serviços iniciam juntos. O depends_on garante que o banco de dados e o cache iniciem antes do serviço web.

Comandos Principais do Compose

Boas Práticas para Desenvolvimento

Quando Usar Docker (e Quando Não Usar)

O Docker se destaca quando você precisa de ambientes consistentes entre equipes, gerenciamento fácil de dependências ou microsserviços. Pode ser exagero para sites estáticos simples ou scripts. Avalie com base na complexidade do seu projeto e nas necessidades de implantação.

FAQ

Qual é a diferença entre uma imagem e um contêiner?

Uma imagem é um template estático; um contêiner é uma instância em execução dessa imagem. Você pode executar vários contêineres a partir da mesma imagem.

Preciso do Docker Compose para um único contêiner?

Não, para um único contêiner você pode usar docker run. O Compose é útil quando você tem vários serviços que precisam se comunicar.

Como persisto dados no Docker?

Use volumes ou bind mounts. Volumes são gerenciados pelo Docker e são ideais para bancos de dados; bind mounts mapeiam um diretório do host para dentro do contêiner, útil para desenvolvimento.

Pronto para otimizar seus apps Dockerizados? Se você trabalha com logs do Nginx dentro de contêineres, experimente nosso Nginx Log Analyzer para analisar e processar logs rapidamente.