Escolar Documentos
Profissional Documentos
Cultura Documentos
Desktop
Introdução
Recentemente, a Docker passou a precificar a utilização do Docker Desktop para Windows por
contas corporativas de grandes empresas. Isto motivou a a busca por uma alternativa para
utilizar o Docker no Windows de forma gratuita e legal. Alguns artigos sugerem a utilização do
WSL (Windows Subsystem for Linux) para execução do Docker. Portanto, o objetivo deste
documento é prover um passo-a-passo para a utilização desta técnica, além de apresentar um
caso de teste utilizado para validação dessa ferramenta.
Setup
1. É necessário ter o WSL2 instalado, pois a versão 1 não contém o kernel Linux. Sendo assim,
apenas o WSL2 tem suporte para containers. Para verificar a versão do WSL, execute o
comando no powershell:
wsl --set-default-version 2
Se o comando retornar uma mensagem de êxito, a versão correta do WSL está sendo usada.
2. Instalar o Ubuntu 20.04, que pode ser instalado pela Microsoft Store. Atentar-se para a versão
_20.04_. Concluir configurações iniciais de usuário e senha normalmente. No terminal do
Ubuntu, execute os comandos a seguir:
c. Reconfiguração de repositórios:
source /etc/os-release
Você deverá digitar a senha de seu usuário para executar o último comando. Após isso, caso o
comando tenha sucesso, depois de várias linhas com INFOs e WARNs, terá uma mensagem
com algo como "API listen on <IP>:2375". O que significa que o Docker está rodando no WSL,
nesta janela do terminal.
4. Para executar o Docker pelo terminal do Windows, é necessário baixar o arquivo docker.exe
deste repositório no GitHub: https://github.com/StefanScherer/docker-cli-builder/releases, e
colocar em alguma pasta que esteja no path para executáveis. Você pode se certificar disso
abrindo uma janela de terminal do Windows, e executando:
docker --version
a. Em seguida, você irá adicionar uma nova variável de ambiente do sistema:
DOCKER_HOST = tcp://localhost:2375
Contanto que a janela do terminal pela qual o Docker foi iniciado ainda esteja aberta, o
comando "docker" pode ser usado normalmente:
docker run --rm hello-world
Uma dica, é agrupar os três comandos abaixo em um arquivo de script para ser executado toda
vez que o Docker precisar ser executado. Para isso, é preciso que a política de execução
permita a execução de scripts. Comandos:
$ip = (wsl sh -c "hostname -I").Split(" ")[0]
Teste
Dois testes foram executados, o primeiro subindo um container e o segundo com dois
containers iguais para testar a execução simultânea de mais de um container. No segundo
teste em cada container havia uma aplicação Node.js com a biblioteca Express, contendo um
endpoint GET / retornando uma mensagem teste. Os arquivos são:
app.js : (Javascript)
import express from "express";
import dotenv from "dotenv";
dotenv.config();
const app = express();
const port = process.env.PORT;
app.use(express.json());
.env :
PORT=3000
Dockerfile :
FROM docker.io/library/node:latest
WORKDIR /usr/src/app
COPY package*.json ./
RUN npm install
COPY . .
CMD ["npm", "start"]
docker-compose.yml:
version: "3.9"
services:
app:
container_name: app
image: app
restart: always
build:
context: .
dockerfile: Dockerfile
ports:
- "${PORT}:${PORT}"
b. Em seguida, copiou-se a pasta do projeto para uma nova, alterou-se o nome "app" para
"app2" no docker-compose.yml, e a porta 3000 para 3001 no .env, e executou-se nesta
nova pasta:
docker compose up --build
Conclusão
A precificação do Docker sobre o uso do Docker Desktop para Windows por usuários
corporativos motivou o uso do Docker com o WSL. Um passo-a-passo foi elaborado e um teste
com dois containers rodando API's Express.js foi executado, obtendo resultados satisfatórios.
Com base nestes resultados, acredita-se que o WSL com o Docker pode suprir a necessidade
de utilizar o Docker Desktop.