Estou avaliando uma série de ferramentas para substituir o Docker Desktop. A ideia é ficar no máximo possível com ferramentas livres, que não é o caso desta específica do Docker. Além disso, como o Docker Desktop agora é pago para quem trabalha em empresas maiores, corre-se o risco de a ferramenta não estar licenciada.
Encontrei há um tempo o Rancher Desktop, que não funcionava muito bem, mas recentemente os problemas que ele apresentava foram resolvidos. Porém, infelizmente, ele não oferece (pelo menos por enquanto) suporte a contêineres Windows, então fui atrás de resolver isso.
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
, 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.
scoop install docker # pra ganhar o docker.exe e o dockerd.exe
Então, em um terminal administrativo, 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
É isso. Simples, né?
Giovanni Bassi
Arquiteto e desenvolvedor, agilista, escalador, provocador. É fundador e CSA da Lambda3. Programa porque gosta. Acredita que pessoas autogerenciadas funcionam melhor e por acreditar que heterarquia é mais eficiente que hierarquia. Foi reconhecido Microsoft MVP há mais de dez anos, dos mais de vinte que atua no mercado. Já palestrou sobre .NET, Rust, microsserviços, JavaScript, TypeScript, Ruby, Node.js, Frontend e Backend, Agile, etc, no Brasil, e no exterior. Liderou grupos de usuários em assuntos como arquitetura de software, Docker, e .NET.