DEV Community

Cover image for Rodando Docker no Windows sem Docker Desktop
葛城矢ヶ崎 × 鬼渋谷
葛城矢ヶ崎 × 鬼渋谷

Posted on

Rodando Docker no Windows sem Docker Desktop

"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
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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

Set-Service docker -StartupType Manual
Enter fullscreen mode Exit fullscreen mode

Inicia o serviço

Start-Service docker
Enter fullscreen mode Exit fullscreen mode

Checa se o pipe foi criado

Get-Item //./pipe/docker_engine
Enter fullscreen mode Exit fullscreen mode

Verifica se o Docker está funcionando no terminal de admin

docker info
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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)
    }
}
Enter fullscreen mode Exit fullscreen mode

Reinicia o serviço do Docker

Stop-Service docker
Start-Service docker
Enter fullscreen mode Exit fullscreen mode

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

docker info
docker ps
docker build ...
Enter fullscreen mode Exit fullscreen mode

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
Enter fullscreen mode Exit fullscreen mode

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

Start-Service docker
Enter fullscreen mode Exit fullscreen mode

É isso. Simples, né? Espero que tenha ajudado.

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

Você pode ver esse artigo escrito originalmente no meu blog.

Top comments (0)