Se você já usou Docker no Windows, ou no Mac, e no Linux, sabe que a experiência é muito inferior fora do Linux. Como, até o momento, o Docker só sabe lidar com contêineres Linux (algo que deve mudar ainda esse ano), e depende do kernel do Linux, pra rodar qualquer coisa no Docker você depende de um Linux. Qualquer Linux, desde que tenha um kernel razoavelmente atualizado. Isso envolveu, desde sempre, ter uma máquina virtual, e fazer um monte de configurações. Os engenheiros do Docker ajudaram a tornar o trabalho mais simples com o docker-machine, mas você ainda dependia do uso do VirtualBox, e de ficar configurando máquinas, subindo máquinas, etc, tudo meio manual, ainda. E se você desenvolve para com Hyper-V, dá um trabalhão ficar trocando de Hyper-V para VirtualBox toda hora.

Isso acabou. Com o beta do docker no ar (ainda em beta privado – mas aberto, solicite seu convite aqui), a experiência melhorou de forma exponencial. Basicamente você nem percebe que está em uma máquina Windows, tudo simplesmente funciona. Vou mostrar um pouquinho dele aqui.

Instalando

A instalação é super tranquila. Após receber o e-mail do convite do beta, basta acessar o link, baixar e rodar o instalador:

image

A versão atual é a beta7 (build 1692):

image

Um aviso: se você tem habilitado o networking sharing em alguma das suas interfaces de rede, ou se já possui alguma virtual que ocupe um endereço que comece com 10.0.75 (por exemplo, 10.0.75.1 ou 10.0.75.2), arrume isso antes de começar a instalação (remova ou troque os IPs). Se esquecer de fazer isso a VM não vai subir. Então remova o sharing e a rede virtual, desinstale, reinstale, e refaça a máquina virtual clicando em “Reset to factory defaults”:

image

O time do docker disse que está trabalhando para isso não ser mais um problema no futuro.

Após a instalação, é uma boa ideia desligar aquele primeiro checkbox, ou o Docker vai iniciar a VM toda vez que o seu Windows subir, deixando o boot mais lento.

Colocando o Docker no ar

Após a instalação você vai ter uma baleiazinha bonitinha na sua área de trabalho:

image

Abra ela, o UAC vai demandar permissão, pode liberar. Vai aparecer outra baleiazinha ao lado do relógio:

image

Ele está inicializando:

image

Se der algum problema ela fica sangrando:

image

Veja os logs clicando com botão direito e pedindo os logs. No meu caso, era falta de memória. O docker cria uma VM no Hyper-V, por padrão com 2GB, e eu já estava com muita coisa rodando:

image

O legal é que essa memória vitual realmente é aplicada na VM Linux. Se o Windows perceber que a VM está demandando pouca memória, ele diminui a quantidade de memória alocada à VM. Se o Linux pedir mais, o Hyper-V entrega mais. Sempre achei essa feature do HyperV sensacional. Notem que em seguida ele entregou 3GB à VM (clique para ampliar):

image

Fechei o docker, arrumei pra 1GB e rodei de novo:

image

Nem tente olhar a console da VM, não tem nada gráfico que você possa olhar. Imagino que é de propósito:

image

Dando tudo certo, o Docker vai estar no ar:

image

E você já vai poder verificar. Vá em qualquer terminal (prefiro Powershell) e rode um “docker info”:

image

Se ele responder, tudo está funcionando. Note que a variável de ambiente “DOCKER_HOST” não tem nenhum valor, ou seja, o host é a sua própria máquina. De alguma forma, o docker está encaminhando chamadas à porta 2375 à máquina virtual. Mais fácil impossível.

A última dica, antes de começar, habilite o compartilhamento de pastas:

image

Isso vai permitir usar a funcionalidade de volumes, que é uma das novidades mais legais.

Se funcionar nesse ponto, tudo vai funcionar conforme o esperado daí em diante.

Rodando aplicações no docker beta

Nesse ponto você pode simplesmente usar o docker como usaria. Por exemplo, o mais básico é testar o hello world. Rode “docker run hello-world”:

image

Rodando com volumes

Agora a parte mais legal: subir um volume a partir de um drive do Windows. Rode

docker run -v C:\algumdiretorio\:/code --rm -ti ubuntu /bin/bash”

Ele vai carregar o contêiner do ubuntu, e montar o diretório informado no contêiner. Podemos então, trabalhar livremente no Windows, já que qualquer alteração de arquivo no Windows reflete no contêiner (clique para ampliar):

image

Isso é muito mais complexo do que parece, já que primeiro ele precisa montar o diretório na VM, para em seguida montar no contêiner. De qualquer forma, essa complexidade nem aparece pra gente.

Rodando aplicações web

Apps web também rodam de maneira muito simples. Peguei aqui o tutorial de WordPress do Docker e rodei, usando docker-compose:

image

Em seguida, você pode acessar http://docker:8000. Isso é outra funcionalidade muito legal, o docker agora mapeia o hostname “docker” para a máquina virtual que está rodando os contêineres:

image

E isso também aparece no terminal (clique para ampliar):

image

Concluindo

Com essa release no docker, aliada ao ferramental que temos hoje para desenvolver no Windows, já é possível dizer que o desenvolvimento de apps baseadas em Linux, usando Windows, se torna uma realidade, e bastante atrativa, pra dizer a verdade. Todo o ferramental de linha de comando fica disponível, seja para gestão de pacotes, build, testes, publicação, scripts ou o que for. Ruby por exemplo, que sempre foi tão problemático no Windows, fica absolutamente trivial.

Imagino que assim que o novo docker for lançado começaremos a ver empresas que trabalham com ferramental começarem a se plugar. Imagino que uma JetBrains, por exemplo, poderia passar a suportar docker no seu processo de dev, dentro do Rubymine.

Outra tecnologia que virá se aliar a isso tudo é o bash no Windows, que na verdade é todo o Ubuntu (ou o user mode dele) no Windows.

E prevejo que ferramentas como o Vagrant, para desenvolvimento, tendem a morrer. Ele simplesmente não é mais necessário.

Estou bastante satisfeito com essa nova ferramenta. Nossa vida aqui na Lambda3 vai ficar bem mais fácil, já que com frequência temos pessoas trabalhando em projetos Linux e Windows.

Ainda não experimentei o novo docker no Mac, porque não tenho a menor vontade de usar um Mac, mas imagino que deve funcionar bem também. Se você experimentou, comente aí nos comentários. E se você usa docker, ou quer usar, o que achou? Comente também!

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.