Gerador de Comando docker run
Monta um comando docker run com flags: imagem, nome, portas, volumes, variáveis e modo daemon.
docker run em profundidade: flags, rede, volumes e limites de recursos
O docker run é o cavalo de batalha de todo workflow de containers — cria um container novo a partir de uma imagem e o inicia em uma única chamada. Por baixo dos panos é a composição de docker create + docker start, aplicando dezenas de opções de namespaces, cgroups e seccomp, montando volumes, ligando redes e expondo portas. A forma geral é docker run [OPTIONS] IMAGE [COMMAND] [ARG...], e mesmo que a maioria dos containers em produção sejam disparados por Compose, Kubernetes ou Nomad, a primitiva que cada orquestrador embrulha por baixo é sempre essa.
Ciclo de vida e flags de processo
-d— detach: roda em background e imprime o ID do container.-i— interactive: mantém STDIN aberto mesmo sem attach.-t— aloca um TTY (pseudo-terminal).-it— combo canônico para shell interativo:docker run -it alpine sh.--rm— remove o container automaticamente ao sair (ideal para ferramentas one-shot).--name web— atribui um nome estável no lugar do adjetivo_substantivo aleatório.--restart unless-stopped— políticas:no(padrão),always,unless-stopped,on-failure[:N].
Portas, volumes, variáveis e redes
É aqui que mora a fiação de verdade:
-p 8080:80 publica a :80 do container na :8080 do host
-p 127.0.0.1:8080:80 só no localhost (não expõe publicamente)
-P publica todas as portas EXPOSE em portas aleatórias do host
-v /host:/container bind mount de um caminho do host
-v data:/var/lib/db volume nomeado (portável, gerenciado pelo Docker)
--mount type=bind,... sintaxe moderna, mais explícita
-e CHAVE=valor define uma env var
--env-file .env carrega um arquivo inteiro de CHAVE=valor
--network host compartilha o namespace de rede do host (só Linux)
--network app-net entra em uma bridge user-defined (DNS entre containers)
Volumes nomeados são quase sempre preferíveis a bind mounts: sobrevivem à remoção do container, são gerenciados pelo Docker e fáceis de fazer backup. Bind mounts fazem sentido em desenvolvimento local quando você quer hot reload do código.
Limites de recursos e segurança
--memory 512m --memory-swap 512m— teto rígido de RAM, sem swap.--cpus 1.5— fração de CPU (tempo equivalente a 1,5 cores).--pids-limit 200— defesa contra fork bombs.-u 1000:1000— roda como UID/GID não-root dentro do container.-w /app— define o working directory.--read-only— root filesystem somente leitura (combine com--tmpfs /tmp).--cap-drop ALL --cap-add NET_BIND_SERVICE— derruba toda capability do Linux e adiciona só o necessário.--security-opt no-new-privileges— bloqueia escalada por setuid.--gpus all— expõe GPUs NVIDIA (requernvidia-container-toolkit).--privileged— dá ao container acesso quase total ao host; evite, a menos que seja Docker-in-Docker ou um serviço de sistema que realmente precise.
Exemplos comentados e comandos relacionados
# Shell interativo rápido, com limpeza automática
docker run --rm -it alpine sh
# Nginx na porta 8080 do host, nomeado, com auto-restart
docker run -d --name web --restart unless-stopped \
-p 8080:80 nginx:1.27-alpine
# Postgres com volume nomeado, limites e segredos via env-file
docker run -d --name pg \
-v pgdata:/var/lib/postgresql/data \
--env-file ./pg.env \
--memory 1g --cpus 1 \
-p 5432:5432 postgres:16
# Entrar em um container rodando
docker exec -it web sh
# Acompanhar logs, parar, remover
docker logs -f web
docker stop web && docker rm web
Boas práticas e alternativas
Fixe a tag da imagem — :latest é convenção, não contrato, e um upgrade silencioso pode quebrar produção da noite para o dia. Sempre defina --memory e --cpus: um container sem limites pode sufocar todos os vizinhos no host. Evite --privileged; se precisa de uma capability, adicione com --cap-add. Inclua um HEALTHCHECK no Dockerfile (ou --health-cmd em runtime) para que orquestradores detectem processos zumbis.
Para apps multi-container use docker compose up em vez de costurar docker run — o Compose v2 já vem como plugin nativo do Docker. Podman é alternativa compatível drop-in que roda rootless por padrão; nerdctl é o CLI nativo do containerd; para orquestração em produção você acaba caindo em Kubernetes ou Nomad.
FAQ
Qual a diferença entre docker stop e docker kill? O stop manda SIGTERM, espera dez segundos (ajustável com -t) e depois SIGKILL. O kill vai direto no SIGKILL. Prefira sempre stop para o processo conseguir fechar limpo.
O container morre quando o processo principal sai? Sim — o container vive enquanto o PID 1 viver. Se o PID 1 sair para background, o container morre imediatamente. Use um entrypoint em foreground ou um init como tini (já embutido via --init).
Volume nomeado ou bind mount? Volume nomeado para estado que você quer que o Docker gerencie e faça backup (bancos, dados de app). Bind mount para código-fonte em desenvolvimento e arquivos de configuração que você edita no host.
Como ter aceleração de GPU? Instale o nvidia-container-toolkit no host e passe --gpus all (ou --gpus '"device=0,1"' para placas específicas). Verifique com docker run --gpus all nvidia/cuda:12.4.0-base-ubuntu22.04 nvidia-smi.
Preciso rebuildar a imagem depois de mudar o código? Sim para imagens de produção — docker build -t app:v2 . e depois docker run app:v2. Em desenvolvimento, bind-monte o código com -v $(pwd):/app para o container rodando refletir as edições ao vivo.
Ferramentas Relacionadas
Gerador de Comando nmap (Completo)
Monta uma varredura nmap com alvo, intervalo de portas, tipo de scan (SYN/Connect/UDP) e detecção de serviço.
Gerador de comando tar
Monte comandos tar (criar, extrair, listar) com compressão (gz/bz2/xz/zst), preservar permissões e exclusões.
Gerador de Comando pg_dump
Monta um comando pg_dump com host, usuário, banco, formato (custom, plain, tar, dir) e arquivo.