Docker para Desenvolvedores: Imagens, Contêineres e Compose

DevOps2026-10-01TryQuickToolBox

Como desenvolvedor, você provavelmente já enfrentou a frustração das inconsistências de ambiente: "Funciona na minha máquina!" O Docker resolve isso empacotando aplicações em contêineres. Este guia explica imagens Docker, contêineres e Compose para ajudá-lo a construir, entregar e executar aplicações de forma consistente.

O que é Docker?

Docker é uma plataforma para desenvolver, entregar e executar aplicações em contêineres. Contêineres são pacotes leves, independentes e executáveis que incluem tudo o que é necessário para rodar um software: código, runtime, ferramentas de sistema, bibliotecas e configurações.

Imagens vs. Contêineres

Uma imagem é um modelo somente leitura com instruções para criar um contêiner. Um contêiner é uma instância executável de uma imagem. Você pode criar vários contêineres a partir da mesma imagem, cada um isolado dos demais.

Trabalhando com Imagens

As imagens são construídas a partir de um Dockerfile, um arquivo de texto com instruções. Aqui está um exemplo simples em Node.js:

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

Construa a imagem com:

docker build -t my-app .

Liste as imagens: docker images

Executando Contêineres

Inicie um contêiner a partir de uma imagem:

docker run -d -p 3000:3000 --name my-container my-app

Isso executa o contêiner em modo detached (-d), mapeia a porta 3000 e o nomeia como my-container.

Liste os contêineres em execução: docker ps

Pare um contêiner: docker stop my-container

Remova um contêiner: docker rm my-container

Por que Usar Docker Compose?

Quando sua aplicação depende de vários serviços (banco de dados, cache, etc.), gerenciar contêineres individuais se torna tedioso. O Docker Compose permite definir e executar aplicações multi-contêiner usando um arquivo YAML.

Exemplo de Arquivo Compose

Crie o docker-compose.yml:

version: '3.8'
services:
  web:
    build: .
    ports:
      - "3000:3000"
    depends_on:
      - db
  db:
    image: postgres:15
    environment:
      POSTGRES_PASSWORD: example
    volumes:
      - postgres_data:/var/lib/postgresql/data
volumes:
  postgres_data:

Inicie todos os serviços: docker compose up -d

Pare e remova: docker compose down

Boas Práticas para Desenvolvedores

Guia Rápido de Comandos Comuns

ComandoDescrição
docker build -t name .Constrói uma imagem a partir do Dockerfile
docker run -p host:container imageExecuta um contêiner e mapeia portas
docker ps -aLista todos os contêineres
docker exec -it container bashAbre um shell dentro de um contêiner em execução
docker compose upInicia os serviços definidos no arquivo Compose
docker compose logs -fAcompanha os logs de todos os serviços

FAQ

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

Uma imagem é um modelo estático; um contêiner é uma instância em execução dessa imagem. Você pode criar vários contêineres a partir de uma única imagem.

Quando devo usar o Docker Compose?

Use o Compose quando sua aplicação exigir vários serviços (por exemplo, servidor web, banco de dados, cache) que precisam rodar juntos. Ele simplifica a orquestração para desenvolvimento e testes.

Como persistir dados no Docker?

Use volumes ou bind mounts. Volumes são gerenciados pelo Docker e armazenados em uma área dedicada; bind mounts apontam para um diretório do host. Ambos sobrevivem a reinicializações do contêiner.

Pronto para otimizar seu fluxo de trabalho com Docker? Experimente nosso Analisador de Logs Nginx para depurar logs de contêineres rapidamente.