Docker Guide

Guia Completo de Docker

Aprenda tudo sobre Docker, desde os conceitos básicos até práticas avançadas de produção e orquestração.

Arquitetura Docker
Docker Engine
Images & Containers
Volumes & Networks
Docker Compose
Docker Swarm/K8s

Por Que Usar Docker?

Docker é uma plataforma de contêineres que permite empacotar aplicações com todas as suas dependências, garantindo consistência entre diferentes ambientes e simplificando o processo de desenvolvimento e implantação.

95%

das empresas usam

70%

menos tempo em setup

50%

mais eficiência

100%

consistência

Conceitos Fundamentais do Docker

Entenda os componentes essenciais da plataforma Docker

Images

Templates somente leitura usados para criar containers. Contêm o sistema operacional, dependências e aplicação necessárias para executar um serviço.

Containers

Instâncias executáveis de images. São leves, isolados e contêm tudo necessário para executar uma aplicação em qualquer ambiente.

Volumes

Mecanismo para persistir dados gerados e usados por containers Docker. Permite que dados sobrevivam à destruição de containers.

Networks

Permite que containers se comuniquem entre si e com o mundo exterior. Suporta diferentes drivers de rede para diferentes cenários.

Dockerfile

Arquivo de texto que contém instruções para construir uma image Docker. Define a base, dependências, configurações e comandos de execução.

Docker Compose

Ferramenta para definir e executar aplicações multi-container usando um arquivo YAML. Simplifica a orquestração de serviços complexos.

Primeiros Passos com Docker

Instalação e comandos básicos para começar

Instalação do Docker

Docker está disponível para Linux, Windows e macOS. A instalação varia conforme o sistema operacional.

# Linux (Ubuntu/Debian)
sudo apt update
sudo apt install docker.io
sudo usermod -aG docker $USER

# Verificar instalação
docker --version
docker run hello-world

Comandos Básicos

  • docker ps - Listar containers em execução
  • docker images - Listar images locais
  • docker run - Executar um novo container
  • docker build - Construir uma image a partir de um Dockerfile
  • docker stop - Parar um container
  • docker rm - Remover um container

Melhores Práticas para Dockerfile

Crie images eficientes e seguras seguindo estas diretrizes

Use Imagens Base Oficiais

Prefira imagens oficiais e mantidas pela comunidade para maior segurança e atualizações regulares.

Minimize o Tamanho da Imagem

Use imagens Alpine ou multi-stage builds para reduzir o tamanho final da imagem.

Execute como Usuário Não Root

Evite executar containers como root para melhorar a segurança e reduzir riscos.

Otimize o Cache de Camadas

Coloque instruções que mudam com menos frequência no início do Dockerfile para aproveitar o cache.

# Exemplo de Dockerfile otimizado
FROM node:18-alpine AS builder

WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production && npm cache clean --force

FROM node:18-alpine
WORKDIR /app
COPY --from=builder /app/node_modules ./node_modules
COPY . .

USER node
EXPOSE 3000
CMD ["npm", "start"]

Docker Compose

Orquestre aplicações multi-container com facilidade

Arquivo docker-compose.yml

O Docker Compose usa um arquivo YAML para definir serviços, networks e volumes.

version: '3.8'
services:
  web:
    build: .
    ports:
      - "3000:3000"
    depends_on:
      - db
    environment:
      - NODE_ENV=production
      
  db:
    image: postgres:13
    environment:
      POSTGRES_DB: myapp
      POSTGRES_USER: user
      POSTGRES_PASSWORD: password
    volumes:
      - db_data:/var/lib/postgresql/data

volumes:
  db_data:

Comandos do Compose

  • docker-compose up - Iniciar serviços
  • docker-compose down - Parar e remover serviços
  • docker-compose build - Construir/reconstruir serviços
  • docker-compose logs - Visualizar logs
  • docker-compose exec - Executar comandos em serviços

Docker em Produção

Estratégias e melhores práticas para ambientes de produção

1

Registry Privado

Use um registry privado para armazenar e gerenciar suas images de produção.

# Docker Hub
docker login
docker push seu-usuario/sua-imagem:tag

# Registry privado
docker tag sua-imagem:tag registry.seu-dominio.com/sua-imagem:tag
docker push registry.seu-dominio.com/sua-imagem:tag
2

Orquestração

Use Kubernetes ou Docker Swarm para gerenciar clusters de containers em produção.

# Kubernetes básico
kubectl create deployment meu-app --image=meu-app:latest
kubectl expose deployment meu-app --port=3000 --type=LoadBalancer
kubectl scale deployment meu-app --replicas=3
3

Monitoramento

Implemente monitoramento e logging para acompanhar a saúde dos seus containers.

# Docker stats
docker stats

# Logs
docker logs -f container-id

# Integração com Prometheus/Grafana
# Use exporters e dashboards específicos
4

Segurança

Implemente práticas de segurança como scanning de vulnerabilidades e políticas de acesso.

# Scanning de vulnerabilidades
docker scan sua-imagem:tag

# Atualizações regulares
# Use imagens base atualizadas
# Implemente políticas de segurança

Segurança em Docker

Práticas essenciais para manter seus containers seguros

Princípios de Segurança

1. Princípio do Menor Privilégio

Execute containers com permissões mínimas necessárias para funcionar.

2. Scanning de Vulnerabilidades

Verifique imagens regularmente em busca de vulnerabilidades conhecidas.

3. Atualizações Regulares

Mantenha suas imagens base e dependências sempre atualizadas.

4. Segredos e Variáveis

Nunca armazene senhas ou tokens diretamente no Dockerfile.

5. Network Segmentation

Isole containers em redes diferentes conforme necessário.

Ferramentas de Segurança

  • Docker Bench Security
  • Trivy
  • Clair
  • Anchore

Boas Práticas

  • Use .dockerignore
  • Multi-stage builds
  • Não use latest
  • Health checks
Dica Importante

A segurança em Docker começa no desenvolvimento. Implemente práticas seguras desde o Dockerfile e integre scanning de vulnerabilidades no seu pipeline de CI/CD.

Tópicos Avançados

Explore funcionalidades avançadas do ecossistema Docker

Docker BuildKit

Sistema de construção moderno com melhor desempenho, cache e recursos avançados.

Docker Buildx

Extensão do Docker CLI para builds multi-plataforma e recursos avançados.

Docker Scout

Plataforma integrada para análise de vulnerabilidades e insights de performance.