Pré-requisitos
Antes de começar, verifique se o seu sistema possui aproximadamente a seguinte configuração:- Windows 10 Versão 1803 Build 1734 e posterior
- Ubuntu para WSL 16.0.4 LTS ou algo parecido (sua versão pode variar um pouco)
É importante que a versão e a compilação do Windows não sejam inferiores às indicadas aqui. O fato é que, começando com esses números, foram feitas alterações fundamentais no kernel do Windows WSL que permitem o uso de cgroups (grupos de controle - adicionados ao kernel do Linux em 2008). E eles são necessários para o Docker gerenciar os recursos do seu sistema em contêineres.
Instale o Docker-CE 09.17.0
Instalaremos o Docker Community Edition 17.09.0 (porque no momento da redação deste artigo, as versões mais recentes caíram quando instaladas na WSL).A primeira coisa que faremos é se livrar de todas as instalações anteriores do Docker (se houver). Para fazer isso, execute o terminal bash e escreva o seguinte:$ sudo apt-get remove docker docker-engine docker.io containerd runc
Agora instale o repositório para o Docker CE. Através do apt-get, podemos instalar a versão necessária sem precisar compilá-la a partir das fontes. Seguindo as recomendações no site oficial do Docker, escrevemos os seguintes comandos:
$ sudo apt-get update
$ sudo apt-get install apt-transport-https ca-certificates curl gnupg2 software-properties-common
$ curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
$ sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
$ sudo apt-get update
Se você já adicionou um novo repositório usando o apt, tudo isso é familiar para você como um todo. Caso contrário, espero que você ainda tenha ficado comigo :)Em seguida, instale o Docker:$ sudo apt-get install docker-ce=17.09.0~ce-0~ubuntu
Se você não estiver usando WSL no estilo Ubuntu, poderá ver a lista de versões disponíveis como esta:$ apt list -a docker-ce
... ou use um comando semelhante de alguma outra biblioteca se você abandonou o APT.No final, você precisa adicionar seu usuário atual ao grupo de janelas de encaixe para poder usar corretamente o Docker Engine, que deve estar em execução no seu sistema com o Docker Engine. como raiz.sudo usermod -aG docker $USER
Executando Docker no Windows
Agora que o Docker está instalado, precisamos usar um método bastante complicado para iniciá-lo como um serviço na WSL toda vez que inicializamos o Windows. Isso não é tão fácil quanto pode parecer. Precisamos agir em nome do superusuário e executar o shell de comando com privilégios elevados, o que complica um pouco a tarefa.Para simplificar um pouco o processo, crie um novo arquivo em / usr / local / sbin / - um script que contém os comandos apropriados para iniciar o serviço Docker:$ sudo nano /usr/local/sbin/start_docker.sh
com o seguinte conteúdo:#!/usr/bin/env bash
sudo cgroups-mount
sudo service docker start
O primeiro comando sudo é montar o cgroups (será executado na reinicialização) e o segundo fornece o serviço docker ao systemd (este é o subsistema Ubuntu para inicializar e gerenciar serviços).Agora deixe o script executar e execute:$ sudo chmod +x /usr/local/sbin/start_docker.sh
$ sudo chmod 755 /usr/local/sbin/start_docker.sh
$ /bin/sh /usr/local/sbin/start_docker.sh
No entanto, o serviço Docker não será iniciado por dois motivos:- O script faz chamadas como superusuário, portanto, o próprio script deve ser executado com privilégios de superusuário para funcionar como pretendido. Em teoria, fazer isso é tão simples quanto escrever qualquer comando sudo, mas para isso, o usuário deve inserir seus dados após cada download, o que é muito irritante.
- O primeiro comando para montar o cgroups deve ser executado no bash com privilégios elevados. Para executá-lo sem a entrada do usuário, precisamos usar o Agendador de tarefas do Windows.
Tudo limpo? Então, ao ponto ...Executando um script com privilégios de root sem entrada do usuário
Na família de sistemas operacionais Linux, o arquivo / etc / sudoers determina quem e o que pode ser executado com privilégios de superusuário. Vamos modificá-lo para que seu usuário possa chamar o script sem precisar digitar constantemente a senha root. (Mas tenha muito cuidado com este arquivo! É muito fácil sair do sistema se você não souber o que está fazendo!)$ sudo nano /etc/sudoers
Adicione uma nova linha ao final do arquivo. Nesse caso, você deve saber exatamente o seu nome de usuário (execute echo $ USER, se não tiver certeza):<your username here> ALL=(ALL:ALL) NOPASSWD: /bin/sh /usr/local/sbin/start_docker.sh
Agora podemos iniciar o serviço Docker como root sem a entrada do usuário:$ sudo /bin/sh /usr/local/sbin/start_docker.sh
Viva, camaradas!Inicialização adequada do Docker na inicialização do Windows
Agora, quando o sistema inicializar, poderemos iniciar o Docker como administrador usando um comando separado que não requer interação do usuário.
Inicie o Agendador de tarefas do Windows e selecione a Biblioteca do agendador de tarefas no painel esquerdo. Em seguida, selecione Criar tarefa no painel direito.
Em seguida, você será solicitado a editar as configurações básicas da tarefa. Dê um nome claro à sua tarefa e verifique se o restante das configurações corresponde ao meu. É importante que você selecione Executar com os privilégios mais altos .
Na guia Triggers , adicione um novo gatilho que iniciará a tarefa assim que o usuário local efetuar login.
Alternando para a guia Actions , crie uma nova ação que será executada no bash e imediatamente executará nosso script com a opção -c :-c "sudo /bin/sh /usr/local/sbin/start_docker.sh"
Observe que isso deve ser feito com privilégios elevados; portanto, marque a caixa de seleção Executar com mais privilégios na guia Geral .
O restante dos parâmetros depende principalmente das preferências individuais, mas mostrarei minhas configurações. Se você quiser, você pode copiá-los. Algumas configurações de energia podem não aparecer se você estiver sentado em um carro parado. Pessoalmente, eu uso um laptop.
Bem, tudo corre como pretendemos. Se você não iniciou o Docker nas etapas anteriores usando comandos com privilégios elevados, clique com o botão direito do mouse na tarefa que criamos no Agendador de tarefas e selecione "Executar"! Isso é tudo!Verifique se tudo funciona
Se você quiser jogar com segurança, reinicie sua máquina (sim, para isso você precisará fechar as guias do navegador por algum tempo) , inicie o bash e digite:$ docker run --rm hello-world
Se tudo correr bem, você verá a saudação padrão do Docker. O serviço será iniciado automaticamente e diretamente na WSL! Parabéns!Arredondar
Você acabou de instalar e iniciar o Docker na WSL. Isso significa que seus contêineres agora podem compartilhar o Ubuntu já em execução no seu sistema. Portanto, não há necessidade de implantar um novo sistema operacional (virtualizado), como faz o Docker for Windows comum.Até agora, o desempenho do Docker na WSL [no momento da redação do artigo original] deixa muito a desejar, mas à medida que a plataforma se desenvolve e as atualizações do Windows são lançadas, ela só melhora.- onomatopellan GitHub: https://github.com/Microsoft/WSL/issues/2291#issuecomment-383698720
- Official Docker Documentation: https://docs.docker.com/install/linux/docker-ce/ubuntu/
- cgroupfs-mount: https://github.com/tianon/cgroupfs-mount
- Bash Command Line Interface: https://docs.microsoft.com/en-us/windows/wsl/reference
