A Microsoft acaba de anunciar o suporte a contêineres nativos no Windows, com suporte à gestão baseada em Docker.
Como entusiasta da ideia de contêineres e do Docker eu vejo isso com muito bons olhos. Já aproveitava os benefícios que os contêineres oferecem no Linux desenvolvendo Node, Java, Ruby, etc, e agora poderei fazer isso também quando desenvolver pra Windows, com .NET ou qualquer outra coisa. Vejam a arquitetura dentro do Windows, muito semelhante à que temos no Linux (tirado do post linkado acima):
Outra coisa muito legal é que o Windows também conseguirá ser um docker client, o que hoje não é possível sem uma máquina virtual. Eles vão criar o “docker.exe” e rodar comandos para contêineres Windows e Linux, e a Microsoft vai colaborar diretamente com o projeto do Docker, que é open source. Isso também é uma notícia muito boa. Aqui como vai ficar, sem grandes surpresas, exatamente como deveria ser:
Parece que o Azure também vai ter um suporte muito bom ao Docker, permitindo administrar os contêineres direto via portal (e imagino que via API). Isso traz uma nova categoria de PaaS, que não existia antes, não de forma tão simples.
Fico imaginando como a Microsoft vai fazer para rodar contêineres no Windows. A arquitetura do Windows é completamente diferente da do Linux. A do Linux facilita muito mais o trabalho, a forma com que os processos, arquivos, sockets, e usuários são criados e administrados (entre outras coisas) é muito ligada ao sistema de arquivos, o que permite a criação e gestão de contêineres de forma muito simples. O Union File System do Docker é baseado em tecnologias que já existiam no Linux para montar diretórios e devices, e não há nada semelhante no Windows. O CGroups e os Namespaces, fundamentais nos contêineres de Linux, não existem no Windows. As imagens do Docker Hub são públicas, a Microsoft vai permitir a sua publicação e disponibilização livre? Estou curiosíssimo em saber como eles vão resolver esses desafios.
Algumas informações sobre contêinteres no Windows haviam sido divulgadas no passado, mas tudo muito incipiente, eu não esperava um anúncio tão rápido. Acho que ninguém esperava. Imagino que o suporte a contêineres Windows vem do projeto Drawbridge, que ainda está no Microsoft Research. Mas não tenho certeza, já que ele sequer é mencionado no post sobre contêineres do Windows. Aqui o esquema do Drawbridge, baseado em Picoprocesses, que são processos isolados dentro do contêiner, e no Library OS, que é a ideia do SO contido, muito semelhante à dos contêineres LInux:
O suporte a contêineres deve vir na próxima versão do Windows Server, o que é muito rápido! O mercado espera esse lançamento na metade do ano que vem, ainda que a Microsoft não tenha anunciado nenhuma data. Espero que eles suportem contêineres também no Windows Client, não só no Server, para que possamos completar o processo de desenvolvimento, algo sumariamente importamente no processo todo, e que utilizamos muito no Docker para Linux.
Sábado passado palestrei sobre Docker no Azure Summit Brasil 2014. Sou um grande entusiasta da ideia, e aqui na Lambda3 temos usado o Docker para toda sorte de aplicação, de dev a operação. É uma tecnologia que gostamos e recomendamos. Estamos todos muito felizes por aqui de ver isso tudo acontecendo. Podem esperar muito mais coisas legais vindo por aí. Essa é uma tecnologia que veio pra ficar. Assim que tivermos mais novidades concretas compartilho por aqui, vou querer me aprofundar no Docker com Windows da mesma forma que fiz com a versão Linux.
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.