Comandos Docker essenciais: run, ps, stop, exec, logs e mais
Quem começa com container esbarra sempre nos mesmos oito comandos: docker run, docker ps, docker stop e start, docker pull, docker exec, docker volume, docker inspect e docker logs. Abaixo está cada um, com um exemplo que você reproduz na sua máquina e o que ele faz.
A aula é de 4 de janeiro de 2022 e usa a imagem httpd (Apache) servindo uma página estática. Os comandos são básicos e continuam valendo, mas confira as opções de cada um na referência oficial da CLI do Docker. Aqui eu não explico o que é Docker: para isso, veja O que é Docker.
Comando 1: docker run, para executar a imagem
O docker run pega a imagem, cria o container e executa. No exemplo, a imagem é a httpd:2.4, do Docker Hub. Como é uma imagem pública, não precisa de autenticação.
docker run -d --rm --name my-apache-app -p 8080:80 -v "$PWD":/usr/local/apache2/htdocs/ httpd:2.4
Cada argumento tem um papel:
-d: modo daemon. O container roda em segundo plano e o terminal só devolve o ID dele.--rm: quando você parar o container, o Docker o descarta.--name my-apache-app: o nome que identifica o container, útil nos próximos comandos.-p 8080:80: a porta 80 do container, onde o Apache responde, sai na porta 8080 do host.-v "$PWD":/usr/local/apache2/htdocs/: compartilha a pasta atual do host com a raiz do Apache. Na pasta eu tinha umindex.html.
Abri localhost:8080/index.html e apareceu a página. Como a pasta é compartilhada, editei o arquivo na minha máquina e a página mudou na hora. Criei um index2.html e ele também passou a abrir. Essa é a vantagem do volume. Para ver o assunto a fundo, leia Volume no Docker.
Comando 2: docker ps, para listar os containers
Como saber o que está rodando na máquina?
docker ps
A lista traz o ID do container (basta uma parte dele para localizá-lo), a imagem, o comando, quando foi criado, o status, a porta roteada e o nome. O nome é o que mais ajuda, porque vários comandos aceitam ele no lugar do ID.
Para ver também os containers parados:
docker ps -a
Na minha máquina apareceu uma fila de containers parados de semanas atrás, além do que acabava de subir.
Comando 3: docker stop e docker start, para parar e ligar
Para parar, passe o nome, o ID ou uma parte do ID:
docker stop my-apache-app
Depois disso a página sai do ar. E por causa do --rm, o container some até do docker ps -a: o Docker o descartou ao parar.
Subi de novo, dessa vez sem o --rm, e parei. Aí ele continuou na lista do docker ps -a, parado, e dá para religar:
docker start my-apache-app
A aplicação voltou ao ar. Há cenários em que faz sentido manter esse vai e vem de parar e ligar, e outros em que não. Para teste, prefiro o --rm: você mata o container e não fica armazenamento sobrando na máquina.
Se você rodou sem o --rm e quer limpar um container parado, use docker rm my-apache-app e ele sai da lista.
Comando 4: docker pull, para baixar a imagem sem rodar
O docker pull baixa a imagem e não executa nada. Eu abri a página da httpd no Docker Hub, olhei as tags disponíveis e baixei outra versão:
docker pull httpd:<tag>
docker images | grep httpd
O docker images lista as imagens locais, e o grep filtra só as httpd: no meu caso, a 2.4 que já estava e a nova, com a tag que eu puxei. Assim dá para ler a documentação de cada uma e escolher qual rodar.
Quando você manda docker run, ele faz três passos: procura a imagem local, baixa se não achar e executa. Por isso o pull é um comando intermediário, que quase ninguém usa direto: a gente vai direto ao run.
Comando 5: docker exec, para rodar um comando dentro do container
Digamos que você queira entrar no container para ver se a aplicação está certinha. Com o container no ar:
docker exec -ti my-apache-app bash
O -ti liga a interação com o terminal. Dá para passar o nome ou o ID do container e, no fim, o comando, aqui o bash. O prompt muda para root@<id do container>, e você está dentro.
Para ter certeza de que está no container, conferi o diretório: /usr/local/apache2. Entrei na pasta htdocs, que é a do Apache, e lá estavam os dois arquivos que eu tinha criado fora. Criei mais um dentro do container:
touch index3.html

O index3.html apareceu também na pasta do host, porque os dois compartilham o mesmo volume. Para sair, digite exit. O container continua rodando: você saiu só daquele terminal.
Comando 6: docker volume, para listar e gerenciar volumes
Para ver os volumes que a máquina tem, com ou sem container associado:
docker volume ls
O docker volume help mostra os subcomandos: create, inspect, ls, prune e rm. Na aula usei só o ls.
Comando 7: docker inspect, para ver os detalhes de um recurso
Descobrir onde o conteúdo de um volume fica no disco é o caso mais útil. Rodei o inspect num volume de um projeto WordPress:
docker inspect wordpress-ecs_wordpress_data

A saída mostra quando o volume foi criado, o driver (local), os labels e o Mountpoint, o caminho onde estão os dados. É muito útil quando você cria o volume sem informar o caminho, principalmente com Docker Compose, e depois não sabe onde está o conteúdo. Já me salvou quando trabalhava com Lambda local pelo Serverless Application Model, que faz muita coisa por baixo dos panos, e eu precisava achar um volume.
O inspect vale para outros recursos além de volume.
Comando 8: docker logs, para ler o log do container
docker logs 7b0b
Passei o começo do ID do container. A saída mostra o log da execução: no exemplo, o aviso do Apache sobre o ServerName e as requisições GET /index2.html que eu tinha feito no navegador.
O problema é que ele mostra só o que já aconteceu. Para acompanhar em tempo real, use -f:
docker logs -f 7b0b
Atualizei a página no navegador e cada requisição apareceu na hora no terminal. Para parar de acompanhar, Ctrl+C: o container continua rodando.

Bônus: docker help
O comando extra é o que mostra todos os outros:
docker help
Ele lista cada comando, como attach, build, commit, cp e create, e o que dá para fazer com cada um. Vale reservar um tempo para explorar. Eu não sei todos, não sei nem metade, e não precisa: o que importa é entender como se trabalha com container e a lógica por trás. Se precisar de um comando, o help ou uma pesquisa resolvem. Alguns básicos, porém, vale saber de cor, porque não dá para consultar tudo o tempo todo.
Checklist
- Suba um container com
docker run -d --rm --name <nome> -p <porta-host>:<porta-container> <imagem>. - Use
docker pspara ver quem roda edocker ps -apara ver também os parados. - Pare com
docker stop <nome>e religue comdocker start <nome>(só se rodou sem--rm). - Baixe uma imagem sem executar com
docker pulle confira comdocker images. - Entre no container com
docker exec -ti <nome> bashe saia comexit. - Ache onde um volume guarda os dados com
docker inspect <volume>e leia oMountpoint. - Leia o log com
docker logs <id>e acompanhe comdocker logs -f <id>.
Esses oito comandos, mais o help, cobrem o dia a dia de quem está começando com container: subir, conferir, entrar, ler o log e parar.
O que os alunos dizem

“Comecei a estudar Cloud em 2023 e entrei na Imersão AWS para aprofundar minha prática.”
Luiz Claudio, Arquiteto de Soluções
Ver depoimento
“Hoje recebo oportunidades 100% remoto e finalmente me sinto recolocada no mercado.”
Patrícia Prado, Desenvolvedora Back-end
Ver depoimento
“A Formação AWS me mostrou o caminho, me deu prática de verdade e mudou minha vida.”
Rodrigo Raspinola, Analista Cloud / SRE
Ver depoimento
Formação AWS
Aprenda AWS e IA na prática, com projeto real e acompanhamento. Converse com o time sobre a Formação AWS.
Agende uma conversaPrefere assistir?
A aula completa (29 min) está no canal Domine AWS. O vídeo toca aqui mesmo.

