DevSecOps

DevSecOps

Contêineres Linux no Windows nativamente, sem máquina virtual – Parte 02

27 fev, 2018
Publicidade

Se você não leu o primeiro artigo para entender o que estou falando, ele está aqui.

O suporte ao Linux Containers On Windows (LCOW) melhorou bastante desde Outubro de 2017, quando avaliei o LCOW pela primeira vez. Tanto é que agora o LCOW vem habilitado por padrão, não sendo mais necessário ligá-lo e desligá-lo como antes. Vamos ver o que mudou e o que melhorou.

O que você precisa pra rodar

O último update do Windows 10 (versão 1709). Para saber se essa versão é a sua, rode no Powershell:

(Get-ItemProperty -Path "HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion" -Name ReleaseId).ReleaseId

Ou rode winver na linha de comando e verifique na janela.

Você também precisa estar com a versão edge do Docker, e com o flag de experimental habilitado, o que pode ser feito pelas configurações do Docker for Windows.

Você não precisa de uma versão insider do Windows 10.

Não testei se funciona no Windows Server. Se você testou, comente aqui no artigo para outras pessoas saberem. Mas eu acho que funciona. A Microsoft comenta que você precisa da versão Windows Server Insider Preview build 16267 ou mais recente. Veja mais aqui.

O que passou a funcionar

Agora é possível rodar um contêiner Windows e um contêiner Linux em paralelo. É importante, no entanto, utilizar –platform=linux no comando run ou pull, ou o Docker informará que não existe imagem para sua plataforma.

Isso é importante, também, porque se você não fizer isso, pode ser que esteja usando uma imagem multiplataforma baseada em Windows, como a do Mongo, e acabar rodando um contêiner Windows quando queria rodar um contêiner Linux.

Outro ponto muito importante, é que agora o compartilhamento de portas funciona. O único problema é o mesmo que já acontece com contêineres Windows, ou seja, o mapeamento é feito para um IP maluco que o Docker inventa, não para o localhost, como acontece com contêineres Linux quando usamos a máquina virtual ou nativamente.

O que está melhor

Não tive problemas pra baixar ou extrair imagens, e não tive erros em geral. Antes, ele tinha me dado uma série de problemas e bugs, e agora não mais.

Não era possível usar multi stage build. Agora testei e funcionou perfeitamente. Usei uma imagem do node:9 de base, depois node:alpine, e funcionou perfeitamente.

O que segue funcionando

O tempo para realizar as ações está como antes. Ele inicia um contêiner muito rápido. Não tão rápido quanto com a máquina virtual ou nativo no Linux, mas rápido o suficiente. Na prática, pelo que eu medi, leva menos de 3 segundos para iniciar um contêiner. As ações de pull de uma imagem são tão rápidas quanto nativamente no Linux.

O mount de diretórios funciona conforme o esperado, mas há detalhes para melhorar. Mais informações sobre isso abaixo.

O que ainda tem problemas

Não é possível rodar com docker-compose, porque ele ainda não consegue especificar que quer imagens de outra plataforma, ele sempre pede imagens de Windows. Acompanhe essa issue no Github para saber mais.

O tempo de build me pareceu bastante pior que o tempo de build nativo.

O terminal interativo não funciona direito. Ao rodar uma app Node.js, o CTRL-C não era capaz de parar a aplicação. Tive que ir em outro terminal e chamar um docker stop na mão.

Há problemas pontuais no mount. Você pode ler mais sobre no documento que a Microsoft mantém online no MS Docs sobre o LCOW.

Conclusão

Vou tentar usar só o LCOW a partir de agora e avaliar se eu sinto muita diferença. Se ficar satisfeito será muito legal, porque a máquina virtual, para ficar ligada, consome 2GB de memória, mesmo se eu não estiver rodando nada. Com o LCOW, o contêiner vai usar só a memória que ele precisar, então não preciso reservar os 2GB.

Com a efetiva evolução do LCOW, teremos no Windows o único SO capaz de rodar nativamente contêineres Linux e Windows.

Para ler mais, veja o artigo do Docker (em inglês).

Ainda não vi pronunciamento da Docker ou da Microsoft se isso será suportado em produção ou será só para desenvolvedores. Eu imagino que será suportado, mas acho que ainda estamos longe desta confirmação. E a recomendação é nunca rodar a versão edge em produção ou habilitar a flag de experimental, ou seja, hoje, não pense em produção.

***

Este artigo foi produzido em parceria com a Lambda3. Leia outros conteúdos no blog da empresa: blog.lambda3.com.br