Ideia central

Um container é uma instância em execução de uma imagem Docker. Ele possui seu próprio filesystem isolado, processos e interface de rede, mas compartilha o kernel do host. Containers são efêmeros por natureza: qualquer dado escrito dentro do container se perde quando ele é removido, a menos que sejam usados volumes.

Ciclo de vida

         docker create
Image ──────────────────► Created
                              │
                    docker start │ docker run
                              ▼
                           Running ◄──────┐
                              │           │ docker restart
                    docker stop│           │
                   docker kill │           │
                              ▼           │
                           Stopped ───────┘
                              │
                    docker rm │
                              ▼
                           Removed

Comandos essenciais

# Criar e iniciar um container (forma mais comum)
docker run nginx:alpine
 
# Flags mais usadas com docker run:
docker run \
  -d \                          # detached (background)
  --name meu-nginx \            # nome do container
  -p 8080:80 \                  # host_port:container_port
  -e NODE_ENV=production \      # variável de ambiente
  -v /host/path:/container/path \ # bind mount
  --restart unless-stopped \   # política de restart
  nginx:alpine
 
# Listar containers em execução
docker ps
 
# Listar todos (incluindo parados)
docker ps -a
 
# Parar / iniciar / reiniciar
docker stop meu-nginx
docker start meu-nginx
docker restart meu-nginx
 
# Remover container (precisa estar parado)
docker rm meu-nginx
# Forçar remoção mesmo em execução
docker rm -f meu-nginx
 
# Ver logs do container
docker logs meu-nginx
docker logs -f meu-nginx        # follow (tempo real)
docker logs --tail 50 meu-nginx # últimas 50 linhas
 
# Executar comando dentro de um container em execução
docker exec -it meu-nginx sh    # shell interativo
docker exec meu-nginx ls /etc   # comando único
 
# Inspecionar detalhes do container (JSON completo)
docker inspect meu-nginx
 
# Ver uso de recursos em tempo real
docker stats
 
# Copiar arquivos entre host e container
docker cp arquivo.txt meu-nginx:/tmp/
docker cp meu-nginx:/var/log/nginx/error.log ./

Modo interativo vs detached

# Interativo: mantém stdin aberto e aloca pseudo-TTY
docker run -it ubuntu bash
 
# Detached: roda em background, retorna o container ID
docker run -d nginx:alpine

Variáveis de ambiente

# Passar direto na linha de comando
docker run -e DATABASE_URL=postgres://... minha-app
 
# Usar um arquivo .env
docker run --env-file .env minha-app

Políticas de restart

PolíticaComportamento
no (padrão)Nunca reinicia
on-failureReinicia só se sair com código de erro
alwaysSempre reinicia, inclusive após docker stop
unless-stoppedSempre reinicia, exceto se parado manualmente

Limpeza

# Remover todos os containers parados
docker container prune
 
# Remover tudo que não está em uso (containers, imagens, redes, volumes)
docker system prune -a

Conexões

Referências