🐳 Docker no WSL e Ubuntu

Instalação, configuração e primeiros testes práticos

🪟 Windows + WSL2 🐧 Ubuntu Linux

🪟 Docker no Windows com WSL2

O WSL2 (Windows Subsystem for Linux 2) permite rodar Docker com performance nativa no Windows, sem precisar de VM separada.

1

Habilitar WSL2 no Windows

Abra o PowerShell como Administrador e execute:

# Instalar WSL com Ubuntu (padrão)
wsl --install

# Ou especificar Ubuntu 22.04
wsl --install -d Ubuntu-22.04

# Verificar versão do WSL
wsl --version
💡 Reinicie o computador após a instalação. Na primeira abertura do Ubuntu, crie seu usuário e senha Linux.
2

Garantir que o WSL2 está ativo

# Listar distribuições instaladas e versão do WSL
wsl --list --verbose

# Saída esperada:
#   NAME            STATE    VERSION
# * Ubuntu-22.04   Running  2      ← precisa ser versão 2

# Se estiver na versão 1, converter:
wsl --set-version Ubuntu-22.04 2

# Definir WSL2 como padrão para novas distros:
wsl --set-default-version 2
3

Instalar Docker Desktop

Baixe o Docker Desktop para Windows em docker.com/products/docker-desktop

Durante a instalação, certifique-se de marcar:

  • Use WSL 2 instead of Hyper-V
  • Add shortcut to desktop
⚠️ O Docker Desktop requer Windows 10 versão 2004+ (build 19041+) ou Windows 11.
4

Integrar Docker Desktop com WSL2

No Docker Desktop, vá em Settings → Resources → WSL Integration e ative a integração com sua distro Ubuntu:

# Após ativar, abra o terminal Ubuntu (WSL) e teste:
docker --version
# Docker version 27.x.x, build xxxxxxx

docker compose version
# Docker Compose version v2.x.x
💡 Com a integração ativa, você usa o Docker direto no terminal do Ubuntu/WSL2 — sem precisar abrir o PowerShell.
5

Verificar instalação

# No terminal Ubuntu (WSL2):
docker run hello-world
Hello from Docker! This message shows that your installation appears to be working correctly. Steps: 1. The Docker client contacted the Docker daemon. 2. The Docker daemon pulled the "hello-world" image from Docker Hub. 3. The Docker daemon created a new container from that image. 4. The Docker daemon streamed that output to the Docker client.

🔧 Problemas Comuns no WSL2

❌ "Cannot connect to the Docker daemon"
O Docker Desktop não está rodando. Abra o Docker Desktop no Windows e aguarde o ícone ficar verde na bandeja do sistema.
❌ "WSL 2 requires an update to its kernel component"
Baixe e instale o pacote de atualização do kernel WSL2 em: aka.ms/wsl2kernel
❌ Docker lento no WSL2
Mantenha os arquivos do projeto dentro do sistema de arquivos Linux (~/projetos/), não na pasta Windows (/mnt/c/). A performance cai drasticamente ao acessar arquivos Windows pelo WSL.

🐧 Docker no Ubuntu Linux

Instalação via repositório oficial do Docker — mais atualizado que o pacote padrão do Ubuntu.

⚠️ Não use sudo apt install docker.io — esse pacote é desatualizado. Use o repositório oficial abaixo.
1

Remover versões antigas (se houver)

sudo apt remove docker docker-engine docker.io containerd runc 2>/dev/null
sudo apt autoremove -y
2

Instalar dependências e adicionar repositório oficial

# Atualizar e instalar dependências
sudo apt update
sudo apt install -y ca-certificates curl gnupg

# Adicionar chave GPG oficial do Docker
sudo install -m 0755 -d /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | \
  sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
sudo chmod a+r /etc/apt/keyrings/docker.gpg

# Adicionar repositório
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] \
  https://download.docker.com/linux/ubuntu \
  $(. /etc/os-release && echo "$VERSION_CODENAME") stable" | \
  sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
3

Instalar Docker Engine

sudo apt update
sudo apt install -y docker-ce docker-ce-cli containerd.io \
  docker-buildx-plugin docker-compose-plugin
4

Rodar Docker sem sudo (recomendado)

Por padrão, o Docker requer sudo. Para usar sem:

# Adicionar seu usuário ao grupo docker
sudo usermod -aG docker $USER

# Aplicar sem precisar fazer logout
newgrp docker
💡 Se preferir fazer logout e login novamente, a mudança também será aplicada.
5

Iniciar e habilitar o serviço

# Iniciar Docker agora
sudo systemctl start docker

# Habilitar para iniciar com o sistema
sudo systemctl enable docker

# Verificar status
sudo systemctl status docker
6

Verificar instalação

docker --version
docker compose version
docker run hello-world
Docker version: 27.x.x, build xxxxxxx Docker Compose version: v2.x.x Hello from Docker!

🔧 Problemas Comuns no Ubuntu

❌ "permission denied while trying to connect to the Docker daemon socket"
Execute newgrp docker ou faça logout/login após adicionar seu usuário ao grupo docker.
❌ "Cannot connect to the Docker daemon at unix:///var/run/docker.sock"
O serviço não está rodando. Execute: sudo systemctl start docker

🧪 Testes Práticos

Com o Docker instalado, execute estes testes para validar o ambiente:

Teste 1 — Servidor Web Nginx

Sobe um servidor web em segundos e acessa pelo navegador:

docker run -d -p 8080:80 --name teste-nginx nginx

# Acesse: http://localhost:8080
# Deve aparecer a página padrão do Nginx

# Remover ao terminar
docker stop teste-nginx && docker rm teste-nginx

Teste 2 — Banco de Dados PostgreSQL

Sobe um banco de dados completo sem instalar nada no sistema:

docker run -d \
  --name teste-postgres \
  -e POSTGRES_PASSWORD=minhasenha \
  -e POSTGRES_DB=testdb \
  -p 5432:5432 \
  postgres:15

# Conectar ao banco via psql dentro do container
docker exec -it teste-postgres psql -U postgres -d testdb

# Dentro do psql:
# CREATE TABLE usuarios (id SERIAL, nome TEXT);
# INSERT INTO usuarios (nome) VALUES ('AegisCloud');
# SELECT * FROM usuarios;
# \q  (para sair)

# Remover ao terminar
docker stop teste-postgres && docker rm teste-postgres

Teste 3 — Stack Completa com Docker Compose

Crie um arquivo docker-compose.yml e suba uma stack com app + banco:

# Criar pasta de teste
mkdir ~/teste-compose && cd ~/teste-compose

# Criar docker-compose.yml
cat > docker-compose.yml << 'EOF'
services:
  db:
    image: postgres:15
    environment:
      POSTGRES_PASSWORD: senha123
      POSTGRES_DB: appdb
    volumes:
      - dados:/var/lib/postgresql/data

  adminer:
    image: adminer
    ports:
      - "8081:8080"
    depends_on:
      - db

volumes:
  dados:
EOF

# Subir a stack
docker compose up -d

# Acesse: http://localhost:8081
# Sistema: PostgreSQL | Servidor: db | Usuário: postgres | Senha: senha123

# Derrubar tudo
docker compose down -v
💡 O Adminer é uma interface web para gerenciar bancos de dados. Acesse http://localhost:8081 e conecte com as credenciais acima.