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.

Logo da baleia do Docker
Docker
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

RecursoEndereçoUso
Site oficialwww.docker.comApresentação dos produtos, download do Docker Desktop e planos de preços
Documentação oficialdocs.docker.comReferência completa de comandos e configurações
Instruções de instalaçãoGet DockerEtapas oficiais de instalação para cada sistema operacional
Docker Hubhub.docker.comPesquisar e baixar imagens, enviar suas próprias imagens
Código-fonte do Docker Enginegithub.com/moby/mobyProjeto de código aberto do Docker Engine (Moby)
Código-fonte do Docker CLIgithub.com/docker/cliCódigo-fonte do comando docker
Código-fonte do Docker Composegithub.com/docker/composeCódigo-fonte e lançamentos do docker compose
Informações sobre versõesEngine, DesktopNovos 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.

SoftwareVersão testada neste tutorialRequisitos mínimos e observações
Docker Engine29.9.0Recomenda-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 Composev5.6.0Use 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 Buildxv0.38.0Desde 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.95Inclui 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

SistemaRequisitos
WindowsWindows 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
macOSAs três versões principais mais recentes do macOS; Apple Silicon ou Intel; pelo menos 4 GB de memória
LinuxEste 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

ImagemVersãoUso
nginx1.30 (stable)Servidor web, proxy reverso
node24 (LTS)Exemplos com Node.js
python3.14Exemplos com Python
postgres18Banco de dados PostgreSQL
mysql8.4 (LTS)MySQL, WordPress
redis8Cache do Redis
wordpress7Exercício prático com WordPress
alpine / ubuntu3.23 / 26.04Imagens base para exercícios
caddy2Proxy reverso com HTTPS automático, implantação
golang + distroless/static-debian131.27Build em várias etapas, imagens multiplataforma
registry3Registry local (exercício de envio)
phpmyadmin / adminerlatestInterfaces 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 run e 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

  1. 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.

  2. 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.

  3. 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.

  4. 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.

  5. 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.

  6. 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.

  7. 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.

  8. 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

  1. 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.

  2. 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.

  3. 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.

  4. 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.

  5. 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.

  6. 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

  1. 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).

  2. 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.

  3. 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

  1. 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.

  2. 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.

  3. 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.

  4. 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

  1. 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.

  2. 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.

  3. 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.

  4. 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.

  5. 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.

  6. 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

  1. 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.

  2. 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.

  3. 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.

  4. 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.

  5. 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.

  6. 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.

  7. 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.

  8. 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.

  9. 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

  1. 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.

  2. 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.

  3. 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.

  4. 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.

  5. 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.

  6. 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.

  7. 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.

  8. 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.

  9. 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.

  10. 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