Pular para o conteúdo principal

Rodando Docker no Windows sem Docker Desktop

· Leitura de 4 minutos
Anderson Marlon

"Essa publicação aborda como fazer isso no Windows 10, mas deve funcionar com Windows 11 e qualquer WSL que suporte a execução do Docker. Digo "deveria" porque não experimentei pessoalmente todas as distros, mas não há nada sobre isso que indique que não funcionará em outras distros."

Anteriormente eu havia escrito um artigo no TabNews sobre como fazer para rodar o Docker no Windows sem a necessidade do Docker Desktop. Hoje, novamente, alguns meses depois, trago uma melhoria dessa evolução. E muito mais instruída para que você não fique perdido em como rodar a aplicação por debaixo dos panos.

O processo para rodar contêineres Windows é muito fácil, você precisa primeiro habilitar essa funcionalidade. Faça isso em um terminal administrativo usando PowerShell:

Enable-WindowsOptionalFeature -Online -FeatureName Containers

Você provavelmente vai precisar reiniciar. Se ele reclamar, você pode precisar primeiro habilitar a funcionalidade de Hyper-V:

Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V -All

Então instale o Docker. Estou usando o Scoop, porque ele já traz também o dockerd.exe através do Windows, sem precisar de interação direta no WSL, mas você pode usar outro método se preferir, baixando esses executáveis diretamente no site do Docker. O Rancher Desktop trará o docker.exe, mas não o dockerd.exe, então não é suficiente para este passo, mesmo que você o tenha instalado.

Lembrando que o Scoop é usado fora de um terminal administrativo.

Pra ganhar o docker.exe e o dockerd.exe

scoop install docker

Então, em um terminal administrativo (WSL por exemplo), instale e configure o serviço do Docker:

Cria o Serviço NT Docker

dockerd --register-service

Configura o serviço para iniciar manualmente assim ele não inicia com o Windows

Set-Service docker -StartupType Manual

Inicia o serviço

Start-Service docker

Checa se o pipe foi criado

Get-Item //./pipe/docker_engine

Verifica se o Docker está funcionando no terminal de admin

docker info

Até esse momento você precisou de um terminal administrativo para usar o Docker, mas agora vamos permitir que seu usuário faça o acesso por um terminal normal. O Docker usa o named pipe //./pipe/docker_engine para se comunicar. Alguns tutoriais indicam mexer nas ACLs deste pipe, mas isso não é o ideal. A melhor opção é alterar o arquivo de configuração do Docker e deixá-lo controlar o acesso, assim (de novo no terminal administrativo):

Configura o Docker para funcionar com o usuário atual sem precisar de um terminal admin

mkdir $env:ProgramData\docker\config
@{ group = "docker-users" } | ConvertTo-Json | Out-File $env:ProgramData\docker\config\daemon.json

Coloca usuário atual no grupo docker-users, se ele já não existe e já está lá

$dockerUsers = Get-LocalGroup docker-users -ErrorAction SilentlyContinue
if (!($dockerUsers)) {
dockerUsers = New-LocalGroup docker-users
Add-LocalGroupMember -Group $dockerUsers -Member $(whoami)
} else {
if (!(Get-LocalGroupMember $dockerUsers | ? { $_.Name -eq $(whoami) })) {
Add-LocalGroupMember -Group $dockerUsers -Member $(whoami)
}
}

Reinicia o serviço do Docker

Stop-Service docker
Start-Service docker

E a partir daí você já pode usar o Docker direto pelo terminal não-administrativo:

docker info
docker ps
docker build ...

Lembrando que você não vai poder usar o Rancher (ou qualquer outro runtime de contêineres) enquanto o serviço do Docker estiver rodando. Para usá-lo, pare o serviço primeiro:

Stop-Service docker

E, quando for usar contêineres Windows, primeiro inicie o serviço:

Start-Service docker

Consigo instalar o Docker via CLI usando WSL diretamente?

Sim, caso você utilize o WSL, você irá adicionar o docker as dependências da apt

# Add Docker's official GPG key:
sudo apt-get update
sudo apt-get install ca-certificates curl gnupg
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

# Add the repository to Apt sources:
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
sudo apt-get update

Em seguida, você irá instalar a última versão do Docker

sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

E depois você poderá verificar se o Docker está instalado corretamente

docker --version

É isso. Muito simples, né? Espero que tenha ajudado.

Caso você ainda queira revisar a primeira versão desse artigo.