Comandos Docker: Guia Rápido para Sysadmins — Imagens, Containers e Volumes
Docker · Containers · Linux · DevOps · Sysadmin | ✎ Duarte Spínola | 27 de Abril de 2026
O Docker permite criar, empacotar e executar aplicações em containers isolados — um por serviço, cada um com as suas dependências, sem conflitos com o sistema operativo do servidor. Este guia reúne os comandos mais utilizados no dia-a-dia para gerir imagens, containers, volumes e redes, com exemplos prontos a usar.
Neste artigo
1. Visão Geral do Docker
O Docker assenta em três conceitos fundamentais que importa distinguir antes de usar os comandos:
| Conceito | O que é | Analogia |
|---|---|---|
| Imagem | Template imutável com o sistema de ficheiros e dependências da aplicação | ISO de instalação |
| Container | Instância em execução de uma imagem — isolada, com o seu próprio processo e sistema de ficheiros | VM leve em execução |
| Volume | Armazenamento persistente fora do container — os dados sobrevivem ao ciclo de vida do container | Disco de dados externo |
2. Trabalhar com Imagens
As imagens são descarregadas de um registry (por defeito o Docker Hub) ou construídas localmente a partir de um Dockerfile.
| Comando | Descrição | Exemplo |
|---|---|---|
| docker pull <imagem>[:<tag>] | Descarregar uma imagem do registry | docker pull nginx:latest |
| docker images | Listar imagens disponíveis localmente | docker images |
| docker build -t <nome>:<tag> . | Construir uma imagem a partir de um Dockerfile na directoria actual | docker build -t myapp:v1 . |
| docker push <nome>[:<tag>] | Enviar a imagem para um registry remoto | docker push myrepo/myapp |
| docker rmi <nome>[:<tag>] | Remover uma imagem local | docker rmi nginx |
| docker image prune | Remover todas as imagens sem tag (dangling) para libertar espaço em disco | docker image prune |
Exemplo — descarregar e verificar uma imagem
docker pull nginx:latest
# Verificar imagens disponíveis localmente
docker images
# Construir imagem local a partir do Dockerfile na directoria actual
docker build -t myapp:v1 .
3. Gerir Containers
O ciclo de vida de um container passa pelos estados created → running → stopped → removed. Os comandos seguintes cobrem cada fase.
| Comando | Descrição | Exemplo |
|---|---|---|
| docker run -d –name <nome> <imagem> | Criar e iniciar um container em modo detached (segundo plano) | docker run -d –name web nginx |
| docker run -d -p <host>:<container> | Publicar uma porta do container no host — <portaHost>:<portaContainer> | docker run -d -p 8080:80 nginx |
| docker ps | Listar containers em execução | docker ps |
| docker ps -a | Listar todos os containers (incluindo os parados) | docker ps -a |
| docker start <nome> | Iniciar um container já existente (previamente parado) | docker start web |
| docker stop <nome> | Parar um container graciosamente (envia SIGTERM, aguarda 10s, depois SIGKILL) | docker stop web |
| docker restart <nome> | Parar e reiniciar um container | docker restart web |
| docker rm <nome> | Remover um container parado | docker rm web |
| docker logs <nome> [-f] | Ver os logs de um container. Com -f segue em tempo real (tail -f) |
docker logs web -f |
| docker inspect <nome> | Ver configuração detalhada do container em formato JSON — IPs, volumes, variáveis de ambiente | docker inspect web |
Exemplo — iniciar o nginx e expor na porta 8080
docker run -d –name web -p 8080:80 nginx
# Verificar que está em execução
docker ps
# Seguir os logs em tempo real
docker logs web -f
# Parar e remover
docker stop web && docker rm web
ℹ Remover container automaticamente após execução
Para containers temporários (ex: executar um comando pontual), usar a flag --rm — o container é eliminado automaticamente quando pára: docker run --rm ubuntu echo "olá"
4. Volumes e Redes
Volumes — persistência de dados
Os dados dentro de um container são perdidos quando o container é removido. Os volumes guardam dados fora do container, de forma persistente e independente do seu ciclo de vida.
| Comando | Descrição | Exemplo |
|---|---|---|
| docker volume create <nome> | Criar um volume com nome | docker volume create dbdata |
| docker volume ls | Listar volumes existentes | docker volume ls |
| docker volume inspect <nome> | Ver detalhe de um volume — incluindo o caminho no sistema de ficheiros do host | docker volume inspect dbdata |
| docker run -v <volume>:<path> | Montar um volume num container na directoria especificada | docker run -v dbdata:/var/lib/mysql mysql |
| docker volume rm <nome> | Remover um volume (apenas se não estiver em uso) | docker volume rm dbdata |
Redes — comunicação entre containers
Por defeito os containers comunicam pela rede bridge. Criar redes personalizadas permite isolar grupos de containers e comunicar entre eles pelo nome (DNS interno automático).
| Comando | Descrição | Exemplo |
|---|---|---|
| docker network create <nome> | Criar uma rede Docker personalizada | docker network create frontend |
| docker network ls | Listar redes existentes | docker network ls |
| docker network inspect <nome> | Ver detalhe de uma rede — containers ligados, subnet, gateway | docker network inspect frontend |
| docker run –network <nome> | Ligar um container a uma rede específica no arranque | docker run –network frontend nginx |
docker network create app-net
# Iniciar dois containers na mesma rede — comunicam pelo nome
docker run -d –name api –network app-net myapp:v1
docker run -d –name db –network app-net -v dbdata:/var/lib/mysql mysql
# O container “api” pode ligar-se ao “db” usando o nome “db” como hostname
5. Ferramentas Auxiliares
| Comando | Descrição | Exemplo |
|---|---|---|
| docker exec -it <nome> /bin/bash | Entrar no terminal interactivo de um container em execução | docker exec -it web /bin/bash |
| docker exec <nome> <comando> | Executar um comando pontual dentro do container sem abrir shell | docker exec web nginx -t |
| docker stats | Monitorizar em tempo real o consumo de CPU, memória, rede e disco de todos os containers | docker stats |
| docker cp <src> <dest> | Copiar ficheiros entre o host e o container (em qualquer direcção) | docker cp web:/etc/nginx/nginx.conf ./ |
| docker compose up -d | Iniciar todos os serviços definidos no ficheiro docker-compose.yml em modo detached |
docker compose up -d |
| docker compose down | Parar e remover todos os containers, redes e volumes criados pelo Compose | docker compose down |
| docker system prune | Limpar tudo o que não está em uso — containers parados, imagens sem tag, redes e cache de build | docker system prune -a |
docker exec -it web /bin/bash
# Ver consumo de recursos de todos os containers em tempo real
docker stats
# Limpar imagens, containers e redes não utilizados (liberta espaço em disco)
docker system prune -a
6. Boas Práticas
| # | Prática | Porquê |
|---|---|---|
| 1 | Nomear sempre containers e volumes | Sem nome, o Docker gera nomes aleatórios — difícil de identificar em docker ps |
| 2 | Usar tags de versão — evitar :latest em produção |
:latest pode trazer versões com breaking changes após um docker pull |
| 3 | Limitar recursos com --cpus e --memory |
Sem limites, um container pode consumir todos os recursos do host e afectar outros serviços |
| 4 | Dados persistentes sempre em volumes — nunca dentro do container | Os dados do container são destruídos com docker rm — base de dados, uploads, logs devem estar em volumes |
| 5 | Usar docker compose para múltiplos serviços |
Mais simples e reproduzível do que gerir vários docker run manualmente |
| 6 | Limpar regularmente com docker system prune |
Imagens, containers parados e cache de build acumulam-se rapidamente e consomem dezenas de GB |
✓ Exemplo de limitação de recursos
# Limita o container a 50% de 1 CPU e 256 MB de RAM
