O que é Docker e para que serve: guia para iniciantes
Docker empacota um app com tudo de que ele precisa e o roda isolado no kernel do host. Veja o que ele exige no seu computador e três usos reais para começar.
O que é Docker, em poucas palavras
Docker é uma ferramenta que empacota um aplicativo com tudo de que ele precisa para rodar e executa esse pacote como um processo isolado, que usa o mesmo kernel do sistema onde está. Ele serve para rodar um banco de dados, um app ou um projeto inteiro do mesmo jeito em qualquer máquina, sem instalar cada peça no seu sistema. Docker não é uma máquina virtual e também não é uma IDE (ambiente de desenvolvimento integrado, como o VS Code).
A palavra aparece em ementa de disciplina e em descrição de vaga porque resolve um problema conhecido: o código funciona na máquina de quem escreveu e quebra na máquina de outra pessoa. Com Docker, o pacote que roda no seu notebook é o mesmo que roda no servidor. A versão do banco e as bibliotecas vão juntas.
Imagem e container: o pacote e o processo
O pacote se chama imagem. Ela guarda o programa e todos os arquivos de que ele depende. postgres:17 é uma imagem, e n8nio/n8n é outra. Uma imagem é só leitura e não executa nada sozinha.
Quando você executa uma imagem, nasce um container. Ele é um processo comum do Linux com duas restrições aplicadas pelo próprio kernel. Os namespaces fazem o processo enxergar apenas os próprios arquivos, a própria rede, o próprio nome de host e a própria lista de processos. Os cgroups (control groups) limitam quanta CPU e quanta memória ele pode usar. Como não existe um sistema operacional para dar boot, um container sobe em segundos.
Uma imagem pode gerar quantos containers você quiser, do mesmo modo que uma classe gera vários objetos. Apagar um container não apaga a imagem. Os dados que você guardou em um volume também sobrevivem, porque o volume fica fora do container.
Quem cria e controla os containers é o Docker Engine, um serviço em segundo plano (daemon) chamado dockerd. O comando docker que você digita no terminal é só um cliente que manda pedidos para esse serviço.
Docker é uma máquina virtual?
Não. Uma VM (máquina virtual) simula um computador inteiro, com o próprio kernel, e precisa dar boot em um sistema operacional completo. Um container compartilha o kernel do host. Em um Linux você confirma isso sozinho: rode uname -r no host e depois docker run --rm alpine uname -r. As duas versões de kernel são iguais, porque é o mesmo kernel.
Isso tem uma consequência prática importante. Um container Linux precisa de um kernel Linux para rodar. É por isso que o Docker no Windows e no macOS funciona de outro jeito, como a seção de requisitos explica. Se você quer ver onde cada camada de virtualização fica em um servidor, a comparação entre Proxmox e uma VPS mostra a diferença entre hospedar VMs e alugar uma.
Docker é uma IDE?
Não. Docker não edita código e não tem depurador. A confusão quase sempre vem do VS Code. A extensão Dev Containers abre o seu projeto dentro de um container: a janela do editor roda no seu computador, mas o terminal e as dependências ficam no container. A configuração fica em um arquivo .devcontainer/devcontainer.json dentro do projeto. Quem usa isso vê o VS Code e o Docker na mesma tela e conclui que são a mesma coisa. O VS Code é a IDE. O Docker só fornece o ambiente isolado onde o código roda.
Para que serve o Docker na prática
As páginas que listam vantagens em abstrato não mostram o que você vai digitar. Aqui estão três usos que um estudante ou dev júnior realmente tem.
Um Postgres ou MySQL para o trabalho da faculdade
Instalar o PostgreSQL direto no Windows deixa um serviço rodando o tempo todo e é chato de remover por completo. Com Docker, o banco vive dentro de um container, e você apaga tudo com poucos comandos quando o semestre acabar.
docker run --name pg-faculdade -e POSTGRES_PASSWORD=troque-esta-senha -p 5432:5432 -v pgdata:/var/lib/postgresql/data -d postgres:17Cada parte tem um motivo. -e POSTGRES_PASSWORD define a senha do usuário postgres, e a imagem se recusa a iniciar sem ela: o log mostra Database is uninitialized and superuser password is not specified. -p 5432:5432 liga a porta 5432 do seu computador à porta 5432 do container, então o DBeaver ou o seu código conectam em localhost:5432. -v pgdata:/var/lib/postgresql/data guarda os dados em um volume com nome, fora do container. -d roda o container em segundo plano.
Confira com docker ps. O container pg-faculdade deve aparecer na lista. Se ele não aparecer, docker ps -a mostra também os containers parados, e docker logs pg-faculdade mostra por que ele parou. Para abrir o terminal do banco, use docker exec -it pg-faculdade psql -U postgres.
No dia seguinte, não rode o mesmo docker run de novo. Ele falha com Conflict. The container name "/pg-faculdade" is already in use, porque o container de ontem ainda existe, só que parado. Use docker start pg-faculdade. Para limpar tudo no fim do semestre:
docker stop pg-faculdade
docker rm pg-faculdade
docker volume rm pgdataPara MySQL a ideia é a mesma. Mudam a imagem e o nome da variável da senha, e o volume aponta para /var/lib/mysql:
docker run --name mysql-faculdade -e MYSQL_ROOT_PASSWORD=troque-esta-senha -p 3306:3306 -v mysqldata:/var/lib/mysql -d mysql:8.4Um app self-hosted como n8n ou Immich
Self-hosting é rodar você mesmo um software que normalmente seria um serviço pago na nuvem. O n8n, uma ferramenta de automação de fluxos, publica este comando na documentação oficial. Aqui o fuso horário já está trocado para São Paulo:
docker volume create n8n_data
docker run -it --rm --name n8n -p 5678:5678 -e GENERIC_TIMEZONE="America/Sao_Paulo" -e TZ="America/Sao_Paulo" -e N8N_ENFORCE_SETTINGS_FILE_PERMISSIONS=true -e N8N_RUNNERS_ENABLED=true -v n8n_data:/home/node/.n8n n8nio/n8nDepois abra http://localhost:5678 no navegador. Repare no --rm: o container é apagado quando você aperta Ctrl+C. Seus fluxos não se perdem, porque ficam no volume n8n_data, e o próximo docker run encontra tudo lá.
O Immich, uma alternativa ao Google Fotos, é maior. Ele usa vários containers que trabalham juntos: o servidor, o banco de dados, um cache e um serviço de machine learning para reconhecer rostos e objetos. Por isso a instalação oficial usa Docker Compose, um arquivo docker-compose.yml que descreve todos os containers de uma vez, junto com um arquivo .env de configurações. Você baixa os dois da documentação do Immich e sobe tudo com docker compose up -d. Antes de escolher, veja a comparação entre PhotoPrism e Immich para guardar fotos. E se o Compose ainda é novidade, o guia básico de Docker Compose em uma VPS explica o arquivo linha por linha.
O mesmo stack no notebook e depois no servidor
Stack é o conjunto de serviços de um projeto, por exemplo uma API e o banco que ela usa. Quando esse conjunto está em um docker-compose.yml, levar o projeto para um servidor é copiar a pasta e rodar docker compose up -d lá. As versões são as mesmas, porque as imagens são as mesmas.
Duas diferenças aparecem nessa mudança. A primeira é a arquitetura do processador. Um Mac com Apple silicon é ARM, e a maioria das VPS é x86, então a imagem precisa existir para as duas. As imagens oficiais populares quase sempre existem nas duas versões, e a comparação entre VPS ARM e x86 explica quando isso importa. A segunda é a rede. No servidor, -p 5432:5432 deixa o banco aberto para a internet. O Docker escreve as próprias regras de firewall no kernel, e essas regras são avaliadas antes das regras do ufw, então um ufw deny 5432 não bloqueia a porta. Publique serviços internos só no endereço local, com -p 127.0.0.1:5432:5432, e exponha para fora apenas o que precisa ser público. Se você ainda está decidindo o que colocar em um servidor seu, esta lista do que dá para fazer com uma VPS é um bom ponto de partida.
Requisitos do Docker: o que você precisa para rodar
A resposta depende do sistema, porque containers Linux precisam de um kernel Linux.
Em um servidor Linux
No Linux você instala só o Docker Engine, sem interface gráfica e sem VM. Os containers usam o kernel do próprio servidor. A Docker mantém um script de instalação para testes rápidos:
curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh
sudo docker run hello-worldPara um servidor de produção, a documentação da Docker recomenda instalar pelo repositório apt oficial, e o guia de Docker em uma VPS mostra esse caminho com as configurações que importam depois.
Se você rodar docker ps sem sudo, a resposta é permission denied while trying to connect to the Docker daemon socket. Isso acontece porque o arquivo /var/run/docker.sock, por onde o cliente fala com o dockerd, pertence ao root e ao grupo docker. O comando sudo usermod -aG docker $USER coloca seu usuário nesse grupo, e a mudança vale depois que você sai e entra de novo na sessão. Saiba o custo: quem está no grupo docker consegue virar root no servidor, porque pode iniciar um container com o disco do host montado.
No Windows
No Windows você usa o Docker Desktop. Ele cria uma pequena VM Linux pelo WSL 2 (Windows Subsystem for Linux), e os containers rodam no kernel dessa VM, não no Windows. Segundo a página de requisitos da Docker, consultada em outubro de 2026, você precisa de:
- WSL na versão 2.1.5 ou mais nova.
- Windows 10 64 bits versão 22H2 (build 19045), ou Windows 11 64 bits versão 23H2 (build 22631) ou mais nova.
- Processador 64 bits com SLAT (Second Level Address Translation), um recurso de virtualização que CPUs recentes têm.
- 8 GB de RAM.
- Virtualização de hardware ativada na BIOS ou UEFI do computador.
Para instalar ou atualizar o WSL, abra o PowerShell como administrador e rode wsl --install, ou wsl --update se ele já existe. A mesma página avisa que as edições Home e Education rodam apenas containers Linux. Isso não atrapalha o estudante, porque Postgres, MySQL, n8n e Immich são todos containers Linux. Se o Docker Desktop reclamar de virtualização, o problema quase sempre está na BIOS: a opção costuma se chamar Intel VT-x ou AMD-V (SVM).
No macOS
No Mac também é o Docker Desktop com uma VM Linux por baixo. A Docker suporta a versão atual do macOS e as duas anteriores, e pede pelo menos 4 GB de RAM, tanto em Macs com Apple silicon quanto em Macs Intel. O Rosetta 2 é recomendado nos Macs com Apple silicon, mas não é mais obrigatório.
Docker é gratuito?
O Docker Engine, que é o que roda em um servidor Linux, é software livre e não custa nada. O Docker Desktop é gratuito para uso pessoal, estudo, projetos open source não comerciais e empresas pequenas. Segundo a página de instalação da Docker em outubro de 2026, empresas com mais de 250 funcionários ou mais de 10 milhões de dólares de receita anual precisam de uma assinatura paga para usar o Desktop. Os detalhes de cada produto estão em o artigo sobre o que é grátis no Docker Engine e no Docker Desktop.
Docker é pesado?
No Linux, não muito. Um container é um processo, então ele gasta mais ou menos o que o próprio app gastaria instalado direto no sistema. O que pesa é o que você coloca dentro: um Postgres consome memória de Postgres, com ou sem Docker. No Windows e no Mac a conta muda, porque o Docker Desktop mantém uma VM ligada enquanto está aberto, e é por isso que a Docker pede 8 GB de RAM no Windows. Em uma VPS pequena, o risco real é um container usar toda a memória e derrubar os outros, e o guia de limites de memória no Docker Compose mostra como impedir isso.
FAQ
Docker é uma IDE como o VS Code?
Não. Docker não edita código. Ele cria ambientes isolados onde programas rodam. A confusão vem da extensão Dev Containers do VS Code, que abre o projeto dentro de um container: o editor continua sendo o VS Code, e o Docker só fornece o ambiente com as dependências do projeto.
Qual a diferença entre Docker e uma máquina virtual?
Uma máquina virtual tem o próprio kernel e dá boot em um sistema operacional completo. Um container Docker é um processo isolado que usa o kernel do host, por isso sobe em segundos e gasta menos memória. No Windows e no macOS o Docker Desktop usa uma pequena VM Linux por baixo, porque containers Linux precisam de um kernel Linux.
Meus dados somem quando eu apago um container?
Somem se estiverem só dentro do container. Se você usar um volume, como -v pgdata:/var/lib/postgresql/data no Postgres, os dados ficam guardados fora do container e sobrevivem ao docker rm. Eles só são apagados quando você remove o volume com docker volume rm.
Preciso instalar o Docker Desktop em um servidor Linux?
Não. Em um servidor Linux você instala apenas o Docker Engine, que roda os containers direto no kernel do servidor, sem VM e sem interface gráfica. O Docker Desktop existe para Windows e macOS, onde é preciso uma VM Linux para os containers rodarem.
Por que o comando docker dá permission denied no Linux?
O cliente docker fala com o serviço dockerd pelo arquivo /var/run/docker.sock, que pertence ao root e ao grupo docker. Rode com sudo, ou adicione seu usuário ao grupo com sudo usermod -aG docker $USER e entre de novo na sessão. Lembre que quem está nesse grupo tem, na prática, acesso de root ao servidor.