Linux no Windows com WSL2, Docker e ZSH
Geralmente eu utilizo um Container configurado com as ferramentas e ambientes que trabalho já definidos, porém como nem sempre estou utilizando um dispositivo com Linux, além de ver o lançamento do Windows Subsystem for Linux (WSL) 2, fiquei tentado em construir o mesmo ambiente que utilizo no GNU/Linux, no Windows 10.
Note
WSL2 necessita que a virtualização esteja habilitada no BIOS/UEFI do seu dispositivo.
Atualize o Windows
Para utilizar o WSL2, o Windows 10 deve estar atualizado com a versão 2004 (Build 19041) ou superior. Verifique se a versão que está utilizando atende o requisito, caso contrário, atualize.
Habilitar o Subsistema do Windows para Linux
Antes de instalar qualquer distribuição do Linux no Windows, você precisará primeiro habilitar o recurso opcional “Subsistema do Windows para Linux”. Abra o PowerShell como administrador e execute:
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
Esse procedimento irá instalar o WSL (v1), agora após reiniciar o computador, atualize para a versão 2.
Habilitar o recurso de Máquina Virtual (Hyper-V)
Antes de instalar o WSL 2, você precisa habilitar o recurso opcional Plataforma de Máquina Virtual
.
Abra o PowerShell como administrador e execute:
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
Atualizar o pacote do Kernel do Linux para o WSL 2
Baixar a versão mais recente do Pacote de atualização do kernel do Linux do WSL2 para computadores x64
Definir o WSL 2 como a sua versão padrão
Abra o PowerShell e execute este comando para definir o WSL 2 como a versão padrão ao instalar uma nova distribuição do Linux:
wsl --set-default-version 2
Instalar a distribuição do Linux Ubuntu 20.04 LTS
Abra a Microsoft Store e escolha sua distribuição do Linux favorita.
Neste exemplo, utilizaremos o Ubuntu 20.04 LTS.
Ajustando DNS do WSL
Comigo o DNS padrão que veio configurado no Ubuntu não estava resolvendo nomes, sendo assim, recomendo fortemente que você modifique para o servidor DNS público de sua preferência. Para isso, basta seguir os seguintes passos:
- Crie o arquivo
/etc/wsl.conf
e coloque o seguinte conteúdo
[network]
generateResolvConf = false
- No Powershell do Windows, rode o comando abaixo para finalizar o WSL em execução
wsl --shutdown
Abra novamente o WSL
Modifique o arquivo
/etc/resolv.conf
para utilizar o DNS de sua preferência
nameserver 8.8.8.8
- Repita os passos 2 e 3 que o DNS estará atualizado.
Instalando ferramentas básicas no WSL
Este passo é opcional, mas caso você necessite de algumas ferramentas específicas em seu WSL, basta instalar. Neste exemplo, deixo instalado algumas ferramentas para diagnóstico de rede e compilação, além de modificar meu bash padrão para o ZSH.
sudo apt update && sudo apt upgrade -y
sudo apt install build-essential net-tools dnsutils nmap -y
Instale o ZSH seguindo os passos descritos no post Maior produtividade no terminal com o Oh My ZSH.
Instalando o Docker
A própria Docker aconselha a utilização do aplicativo Docker para Windows. Porém resolvi instalar o Docker diretamente no WSL, como faço no Linux. Caso você ache melhor utilizar a aplicação para Windows, basta baixar e instalar. Mas caso queira instalar o Docker dentro do WSL, basta seguir os passos abaixo.
Agora iremos fazer a instalação básica do Docker no WSL para podermos criar nossos ambientes de desenvolvimento.
sudo apt install apt-transport-https ca-certificates curl software-properties-common
Adicionando as chaves oficiais do Docker
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
Adicionando o Repositório Oficial do Docker
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
Agora basta atualizar a lista de repositórios e instalar o docker-ce
e o docker-compose
sudo apt update
sudo apt install docker-ce docker-compose -y
Info
Geralmente o serviço do Docker inicia automáticamente após a instalação. Comigo não foi assim, caso aconteça o mesmo com você, basta rodar o comando sudo service docker start
Aproveite e adicione seu usuário ao grupo docker para possibilitar subir os containers sem a necessidade do sudo.
sudo usermod -a -G docker $USER
Confira se o Docker está rodando lançando um container
docker container run -dp 80:80 nginx
A saída deverá ser parecida com a imagem abaixo:
Agora basta testar se a comunicação está funcionando lançando o browser apontado para o localhost
Concluindo
Este post surgiu principalmente da curiosidade de ver o WSL2 em funcionamento, e claro, tentar portar o meu ambiente de ferramentas Linux para dentro do Windows 10. Provavelmente não utilizarei muito, mas pelo menos já serviu para escrever este Post =).
Acabei configurando as fontes powerline dentro no VS Code, ficou tudo funcional, caso alguém tenha interesse, só chamar no Telegram que trocamos uma ideia sobre o que deve ser feito para configurar tudo certinho.
Um forte abraço e até a próxima.