Conteúdo
Tutorial de Docker: aprenda a instalar, executar contêineres e criar imagens
Docker é uma ferramenta que empacota um aplicativo e tudo de que ele precisa (ambiente de execução, bibliotecas e configurações). O pacote é chamado de imagem (image); quando é executado, ele se torna um contêiner (container). A mesma imagem produz o mesmo resultado no seu notebook, no computador de um colega ou em um servidor na nuvem.
- Desenvolvedor
- Docker, Inc.
- Primeiro lançamento
- 2013
- Linguagem de programação
- Go
- Licença
- Docker Engine é um software de código aberto (Apache License 2.0); Docker Desktop é um software comercial, gratuito para pessoas físicas e pequenas empresas
- Site oficial
- www.docker.com
- Documentação oficial
- docs.docker.com
Este tutorial de Docker começa pelos conceitos básicos e avança até você conseguir escrever seus próprios Dockerfiles, gerenciar vários serviços com Docker Compose e, por fim, implantar um site em um servidor na nuvem.
Recursos oficiais
| Recurso | Endereço | Uso |
|---|---|---|
| Site oficial | www.docker.com | Apresentação dos produtos, download do Docker Desktop e planos de preços |
| Documentação oficial | docs.docker.com | Referência completa de comandos e configurações |
| Instruções de instalação | Get Docker | Etapas oficiais de instalação para cada sistema operacional |
| Docker Hub | hub.docker.com | Pesquisar e baixar imagens, enviar suas próprias imagens |
| Código-fonte do Docker Engine | github.com/moby/moby | Projeto de código aberto do Docker Engine (Moby) |
| Código-fonte do Docker CLI | github.com/docker/cli | Código-fonte do comando docker |
| Código-fonte do Docker Compose | github.com/docker/compose | Código-fonte e lançamentos do docker compose |
| Informações sobre versões | Engine, Desktop | Novos recursos e mudanças em cada versão |
Docker e o logo da baleia são marcas registradas da Docker, Inc. Este tutorial é um recurso de aprendizagem independente e não tem vínculo com a Docker, Inc.
Versões usadas neste tutorial
Todos os comandos do tutorial foram executados em outubro de 2026. Os blocos de terminal com fundo preto mostram resultados reais (apenas foram removidos itens sem relação com o tutorial, como o progresso de downloads). Os valores da saída, como IDs de contêineres, horários e tamanhos de arquivos, serão diferentes dos mostrados aqui. Isso é normal.
| Software | Versão testada neste tutorial | Requisitos mínimos e observações |
|---|---|---|
| Docker Engine | 29.9.0 | Recomenda-se a versão 25 ou superior. A maioria dos comandos ainda funciona em versões mais antigas, mas alguns formatos de saída são diferentes |
| Docker Compose | v5.6.0 | Use docker compose (versão em plugin). A versão v2.20 ou superior pode executar o compose.yaml deste tutorial; o antigo docker-compose (v1) não recebe mais manutenção |
| Docker Buildx | v0.38.0 | Desde o Docker Engine 23, o BuildKit é usado por padrão para fazer o build; sintaxes como RUN --mount exigem o BuildKit |
| Docker Desktop (Windows, macOS) | 4.95 | Inclui Docker Engine e Compose; consulte os requisitos do sistema abaixo |
A numeração de versões do Compose saltou diretamente da v2 para a v5 (para evitar confusão com os formatos antigos de arquivos Compose, "version 2 / 3", as versões v3 e v4 foram puladas). O uso dos comandos é o mesmo da v2.
Requisitos do sistema
| Sistema | Requisitos |
|---|---|
| Windows | Windows 10 22H2 (compilação 19045) ou Windows 11 23H2 (compilação 22631) ou superior, em versão de 64 bits; requer WSL 2.1.5 ou superior e virtualização ativada na BIOS; pelo menos 8 GB de memória |
| macOS | As três versões principais mais recentes do macOS; Apple Silicon ou Intel; pelo menos 4 GB de memória |
| Linux | Este tutorial usa Ubuntu (24.04 / 26.04), x86_64 ou arm64; também é possível instalar o Docker Engine em outras distribuições populares |
Versões das imagens usadas nos exemplos
| Imagem | Versão | Uso |
|---|---|---|
nginx | 1.30 (stable) | Servidor web, proxy reverso |
node | 24 (LTS) | Exemplos com Node.js |
python | 3.14 | Exemplos com Python |
postgres | 18 | Banco de dados PostgreSQL |
mysql | 8.4 (LTS) | MySQL, WordPress |
redis | 8 | Cache do Redis |
wordpress | 7 | Exercício prático com WordPress |
alpine / ubuntu | 3.23 / 26.04 | Imagens base para exercícios |
caddy | 2 | Proxy reverso com HTTPS automático, implantação |
golang + distroless/static-debian13 | 1.27 | Build em várias etapas, imagens multiplataforma |
registry | 3 | Registry local (exercício de envio) |
phpmyadmin / adminer | latest | Interfaces de gerenciamento de banco de dados |
Sempre que possível, os exemplos especificam versões fixas (por exemplo, postgres:18) para que você obtenha o mesmo resultado do tutorial.
O que você vai aprender
- A relação entre Docker, imagens e contêineres
- Instalar Docker no Windows, macOS e Linux
- Executar contêineres com
docker rune gerenciar seu ciclo de vida - Escrever Dockerfiles para empacotar seus próprios programas em imagens
- Persistir dados com volumes e conectar contêineres por meio de redes
- Iniciar vários serviços de uma só vez com Docker Compose
- Executar Python, Node.js, Nginx, MySQL, PostgreSQL, Redis e WordPress com Docker
- Liberar espaço, configurar a segurança, usar Rootless e Podman e criar imagens multiplataforma
- Automatizar o build com GitHub Actions e implantar em um servidor na nuvem
- Entender os fundamentos do Docker (namespace, cgroup, overlayfs)
- Encontrar a causa de erros em Mensagens de erro comuns; consulte "Referência de comandos" para ver todos os parâmetros dos comandos mais usados
Para quem é este tutorial
- Desenvolvedores que estão começando a usar Docker
- Equipes que costumam enfrentar o problema "funciona na minha máquina"
- Pessoas que querem implantar projetos na nuvem sem configurar servidores manualmente
Basta saber digitar comandos em um terminal (linha de comando) para começar. Você não precisa conhecer Linux nem administração de servidores.
Como ler este tutorial
- Os blocos de código com fundo branco mostram comandos a digitar ou conteúdo de arquivos. Clique em "Copiar" no canto superior direito para copiar.
- Os blocos com fundo preto, identificados como Terminal, mostram o resultado da execução. A linha iniciada por
$é o comando digitado; as linhas abaixo são a saída. Ao clicar em "Copiar", somente o comando será copiado. - Para comandos com abas Linux / macOS, Windows PowerShell e Windows CMD, selecione o sistema que você usa. A página inteira alternará para a mesma sintaxe.
- No início de cada capítulo estão o tempo estimado, os capítulos anteriores necessários e os principais objetivos de aprendizagem. No final há um Resumo, Exercícios com respostas e Perguntas frequentes.
- As capturas de tela de páginas web mostram resultados de execuções reais. Algumas capturas de tela de interfaces do Docker Desktop e do Docker Hub foram obtidas da documentação oficial do Docker (Apache License 2.0); isso será indicado nas legendas.
Experimente rapidamente
Depois de instalar o Docker, digite no terminal:
$ docker run hello-world
Unable to find image 'hello-world:latest' locally
latest: Pulling from library/hello-world
4f55086f7dd0: Pull complete
Digest: sha256:5e23090353324d887c48ad5e5c56d294eab81588df9605b07d1afe895f9cc8f8
Status: Downloaded newer image for hello-world:latest
Hello from Docker!
This message shows that your installation appears to be working correctly.
Se aparecer Hello from Docker!, está tudo funcionando. Agora comece por O que é Docker.
Perguntas frequentes
Este tutorial é adequado para quem nunca usou Docker?
Sim. Começando pela instalação e pelo primeiro contêiner, cada etapa inclui a saída real do comando. Siga as instruções e você obterá o mesmo resultado.
Os comandos do tutorial funcionam no Windows?
Sim. Onde for necessário usar uma sintaxe diferente (como o caminho $(pwd)), há abas para Linux/macOS, PowerShell e CMD. Você também pode usar diretamente a sintaxe do Linux no WSL.
Posso baixar o código de exemplo?
O link de código de exemplo no início de cada capítulo abre o projeto completo daquele capítulo.
Primeiros passos
- O que é Docker
Entenda o que é Docker, por que ele é útil e como funcionam imagens, contêineres e registries. Conheça a arquitetura do Docker e veja como contêineres diferem de máquinas virtuais.
- Instalar Docker
Instale o Docker passo a passo no Windows (WSL 2), macOS e Linux (Ubuntu 26.04 / 24.04), confira a virtualização e a configuração do WSL, valide a instalação com docker version e hello-world e veja mensagens reais de erros comuns e suas soluções.
- Tour pela interface do Docker Desktop
Conheça cada tela do Docker Desktop: menu lateral, lista de contêineres e ações, Logs/Inspect/Exec/Files/Stats, projetos Compose, Images, busca e download de imagens, barra de status e comandos docker correspondentes para alternar entre a interface gráfica e o terminal.
- Primeiro contêiner
Execute seu primeiro contêiner Docker com nginx: baixe a imagem com docker run, inicie o contêiner, abra a página no navegador, consulte o contêiner com docker ps, veja logs, acesse com exec e gerencie-o com stop / start / rm. Veja também como fazer o mesmo pela interface gráfica do Docker Desktop.
- Imagens (Image)
Entenda como imagens Docker são nomeadas e aprenda a baixar, listar, marcar, remover e inspecionar imagens, comparar tamanhos e entender suas camadas.
- Ciclo de vida dos contêineres
Entenda os estados de um contêiner Docker com saídas reais: created, running, paused e exited; por que um contêiner encerra logo após iniciar; diferenças entre stop e kill; por que docker stop espera 10 segundos; códigos de saída e comportamento das políticas --restart.
- Parâmetros do docker run
Conheça os parâmetros mais usados do docker run: -d, -it, -p, -v, -e, --name, --rm, --network, --restart, --memory, --cpus, --user, --entrypoint e --read-only, com comandos e resultados reais.
- Consultar logs e depurar
Como investigar problemas em contêineres? Aprenda com saídas reais a consultar logs com docker logs (incluindo a diferença entre stdout e stderr), acessar contêineres com docker exec, verificar configurações com docker inspect, copiar arquivos com docker cp, conferir o estado com docker stats / top / diff e diagnosticar problemas comuns, como contêineres que encerram logo após iniciar, portas ocupadas e exec format error.
Imagens e Dockerfile
- Introdução ao Dockerfile
Aprenda a escrever um Dockerfile com um exemplo em Node.js. Entenda o que FROM, WORKDIR, COPY, RUN e CMD fazem, como funciona o cache de build (CACHED) e como o .dockerignore reduz o conteúdo do build de 30 MB para menos de 1 KB.
- gerar automaticamente com docker init
Use docker init para responder a algumas perguntas e gerar Dockerfile, compose.yaml, .dockerignore e README.Docker.md. Veja o processo completo em um projeto Node.js, analise os arquivos gerados linha por linha, encontre dois avisos no modelo com docker build --check e descubra por que o exemplo PostgreSQL do modelo falha com postgres:18.
- Guia de instruções do Dockerfile
Entenda as instruções mais usadas do Dockerfile e seus resultados: FROM, RUN, COPY, ADD, WORKDIR, ENV, ARG, EXPOSE, USER, VOLUME, HEALTHCHECK, CMD e ENTRYPOINT. Compare CMD e ENTRYPOINT, COPY e ADD, ARG e ENV, além da relação entre PID 1 e os 10 segundos de espera do docker stop.
- Cache de build e otimização
Entenda o funcionamento e as regras de invalidação do cache de build com saídas reais do docker build. Veja como a ordem das instruções afeta o tempo, como reduzir imagens e usar cache de montagem.
- Builds em múltiplos estágios
Separe o ambiente de compilação do ambiente de execução com builds em múltiplos estágios. Compare tamanhos de imagens Go e veja exemplos com Node.js, Java e a opção --target.
- Publicar no Docker Hub
Aprenda a usar docker login, docker tag e docker push para publicar imagens no Docker Hub e no GitHub Container Registry, além de configurar um Registry privado.
Dados e redes
- Volume e persistência de dados
Os dados desaparecem quando você remove um contêiner? Aprenda na prática a usar Docker Volume e Bind Mount: preserve os dados ao remover o contêiner, entenda de onde vêm os Volumes anônimos, compare -v e --mount com caminhos inexistentes, faça backup e restaure Volumes e conheça o novo diretório de dados da imagem PostgreSQL 18 (o formato antigo impede a inicialização).
- Redes e comunicação entre contêineres
Entenda as redes Docker com exemplos reais: limites da bridge padrão, DNS integrado nas redes personalizadas, conexão entre app e banco de dados, aliases, várias redes, serviços que escutam apenas em 127.0.0.1 e como acessar o host com host.docker.internal.
- Variáveis de ambiente e .env
Aprenda com exemplos reais a usar -e, --env-file, ENV no Dockerfile e environment, env_file e substituição de variáveis com .env no Docker Compose; veja como aspas e secrets funcionam.
Docker Compose
- Introdução ao Docker Compose
Introdução ao Docker Compose: inicie site, PostgreSQL e Adminer com um compose.yaml, com saídas reais de docker compose up, ps, logs, stop e down, além de capturas de tela do login no Adminer (lembre-se de selecionar PostgreSQL), da execução de SQL e do impacto de down e down -v nos dados.
- Sintaxe do compose.yaml
Guia completo da sintaxe do arquivo compose.yaml do Docker Compose: services, image, build, ports, volumes, environment, env_file e mais.
- Comandos do Docker Compose
Comandos do Docker Compose com exemplos reais: up, down, ps, ls, images, top, logs, exec, run, pull, config e port. Veja por que restart não aplica alterações no compose.yaml e quando usar up -d para recriar serviços.
- Exemplo prático: configurar WordPress
Configure WordPress 7 com MySQL 8.4 usando Docker Compose, com saídas reais e capturas de tela: health check, persistência, limite de upload, phpMyAdmin, backup, restauração e atualização de imagens.
Exemplos práticos
- Aplicações Python
Empacote sites Python em imagens Docker com exemplos reais de build e execução: Flask com gunicorn, recarga automática no desenvolvimento, FastAPI com uvicorn, collectstatic e erros de STATIC_ROOT no Django, build com uv e uv.lock e comparação do tamanho das imagens.
- Aplicações Node.js
Como escrever e testar Dockerfiles para projetos Node.js: npm ci, dependências de produção, usuário node, PID 1 e SIGTERM, build em vários estágios para TypeScript, Next.js standalone e recarga automática no desenvolvimento.
- Nginx e proxy reverso
Use Nginx com Docker para servir um site estático, personalizar configurações (SPA, cache, gzip), validar a sintaxe com nginx -t, gerar configurações com modelos e variáveis de ambiente e encaminhar solicitações a contêineres de back-end. Inclui testes práticos de proxy_pass, montagem de arquivo único, erro 502 e HTTPS automático com Caddy.
- MySQL
Inicie o MySQL 8.4 com Docker e veja saídas reais: variáveis de ambiente, SQL de inicialização, utf8mb4 em chinês, conexões e backups.
- PostgreSQL
Inicie o PostgreSQL 18 com Docker e veja a saída real: novo diretório de dados da versão 18, configuração do Compose, armadilha do health check pg_isready, comandos psql, login sem senha no contêiner, backup e restauração com pg_dump e atualização da versão 16 para a 18.
- Redis
Execute o Redis 8 com Docker e veja a saída real: comandos básicos do redis-cli, senha e erro NOAUTH, diferenças entre docker stop e docker rm -f com RDB, persistência AOF, política maxmemory, contador Flask com Compose e por que adicionar grep PONG à verificação de integridade.
Operação e tópicos avançados
- Liberar espaço em disco
O Docker está ocupando espaço demais? Descubra o que está consumindo espaço com docker system df e faça a limpeza com container, image, volume, builder e system prune. Testado no Docker 29: system prune --volumes não exclui mais volumes nomeados, novas builds não deixam imagens <none>, logs de contêiner chegam a 69 MB em 3 segundos e há configuração de limite para logs.
- Boas práticas de segurança
Introdução à segurança de contêineres Docker com testes práticos: execução sem root, versão fixa da imagem, segredos em camadas de imagem, BuildKit secret, banco de dados não exposto, limites e varredura de vulnerabilidades com Trivy.
- Rootless e Podman
Entenda por que Docker equivale a privilégios de root, veja como o modo Rootless mapeia o root do contêiner para um usuário comum do host e conheça o Podman, sem daemon permanente, compatível com Dockerfile e rootless por padrão.
- Imagens multiplataforma
A imagem criada no Apple Silicon falha com exec format error no servidor? Entenda arquiteturas de CPU e imagens multiplataforma; crie linux/amd64 e linux/arm64 com docker buildx e compilação cruzada em Go, inspecione com docker images --tree, publique no Registry e verifique o manifest, além de saber quando usar QEMU.
- Build automático com GitHub Actions
Faça build e envie imagens Docker multiplataforma ao GitHub Container Registry e implante no servidor por SSH automaticamente. Inclui workflow completo e cache.
- Implantar em um servidor na nuvem
Implante um app Docker em um servidor Linux na nuvem: build e envio de imagem, execução com Compose, Caddy com HTTPS, atualização, rollback, backup e checklist.
- Fundamentos internos
O que é um contêiner? Observe diretamente em um host Docker: um processo Linux isolado por namespaces, limitado por cgroups e com um sistema de arquivos overlayfs. Veja PIDs, lsns, limites de memória e CPU, upperdir, capabilities e seccomp.
- Guia de mensagens de erro comuns
Encontre respostas para erros comuns do Docker, como Cannot connect to the Docker daemon, permission denied docker.sock, port is already allocated e outros 25 erros, com saída real do Docker 29, causas e soluções.
- Referência rápida de comandos Docker
Os comandos Docker mais usados em uma página: contêineres, imagens, build, Volume, rede, Docker Compose, limpeza e informações do sistema.
Referência de comandos
- docker build
Guia completo dos parâmetros de docker build, com exemplos práticos no Docker 29 para nomear imagens, passar argumentos, escolher Dockerfile e controlar o build.
- docker exec
Guia completo dos parâmetros do docker exec (-it, -u, -w, -e, -d, --env-file, --privileged), com exemplos práticos no Docker 29: acessar o shell, definir usuário e diretório, passar variáveis, executar em segundo plano e entender erros quando o contêiner está parado.
- docker ps
Aprenda a listar, filtrar e formatar contêineres com docker ps. Veja exemplos de IDs, status, nomes, rótulos, tamanhos e remoção em lote.
- docker logs
Guia completo dos parâmetros de docker logs (-f, --tail, -t, --since, --until e --details), com exemplos práticos no Docker 29 para filtrar, pesquisar e acompanhar logs.
- docker cp
Veja como usar docker cp para copiar arquivos e pastas entre o host e o contêiner, entender regras de caminhos e erros, e fazer backup e restauração de bancos de dados no Windows. Exemplos com Docker 29.
- docker inspect
Aprenda os parâmetros de docker inspect e modelos -f/--format, com exemplos no Docker 29 para consultar estado, IP, variáveis, política de reinício, configurações de imagem, volumes e redes.
- docker volume
Guia completo dos subcomandos create, ls, inspect, rm e prune de docker volume, com exemplos reais no Docker 29: crie um volume e grave dados, encontre volumes anônimos órfãos, adicione labels e filtre por elas, e entenda a diferença entre prune e prune -a.
- docker network
Guia completo dos subcomandos create, ls, inspect, connect, disconnect, rm e prune do docker network, com exemplos práticos no Docker 29: resolução de nomes em redes personalizadas, aliases --network-alias, sub-redes específicas, um contêiner em várias redes e o erro ao remover uma rede em uso.
- docker compose up
Guia completo das opções de docker compose up (-d, --build, --wait, --force-recreate, --no-deps, --scale, --remove-orphans, --abort-on-container-exit, --exit-code-from, --pull, -V, --watch e outras), com exemplos práticos no Docker Compose v5.
- docker compose down
Entenda as opções do docker compose down (-v/--volumes, --rmi local|all, --remove-orphans, -t/--timeout), veja exemplos práticos no Docker Compose v5 e saiba o que down preserva ou remove em comparação com stop e rm.
Atualizado 14 de outubro de 2026