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:alpineVariá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-appPolíticas de restart
| Política | Comportamento |
|---|---|
no (padrão) | Nunca reinicia |
on-failure | Reinicia só se sair com código de erro |
always | Sempre reinicia, inclusive após docker stop |
unless-stopped | Sempre 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 -aConexões
- docker-imagens - A imagem que origina o container
- docker-redes - Como containers se comunicam entre si
- docker-volumes - Como persistir dados além do ciclo de vida do container
- docker-compose - Gerenciar múltiplos containers como um stack
- docker-conceitos-fundamentais - Visão geral da arquitetura