Neste artigo, vou apresentar alguns motivos para usar o Docker no ambiente .NET Core. Se você não conhece o Docker, sugiro que acompanhe esta série de artigos.
Vamos aos motivos!
1 – Esqueça o sistema operacional e configurações manuais
Normalmente, quando você configura uma máquina física ou virtual, precisa instalar o sistema operacional – o software que seu aplicativo precisa (servidores da Web, SDKs, bibliotecas, etc.), e precisa executar as configurações específicas de que o aplicativo precisa.
Se você usar o Docker, poderá especificar tudo isso no seu dockerfile e, sempre que o ambiente for iniciado, ele garantirá que o software apropriado seja instalado no contêiner.
Quando atualizações forem necessárias, você pode simplesmente atualizar a definição do contêiner e reimplementá-lo. Isso pode reduzir bastante o tempo de manutenção.
2 – “Na minha máquina funciona”
Se você é desenvolvedor, alguma vez já disse isso ao seu cliente e, se você já esteve no papel de cliente, talvez tenha ouvido tal frase também.
Não há nada mais frustrante do que ter um aplicativo pronto e testado (em sua máquina) e, ao levá-lo para produção, ver que ele começa a falhar.
Com o Docker isso é coisa do passado. O que o Docker oferece é, acima de tudo, consistência. Garantindo que o que vai dentro de um contêiner será executado da mesma maneira em sua máquina e em qualquer outro lugar no mundo não tem preço.
Se funcionar em desenvolvimento, funcionará na produção, porque são a mesma coisa – simples assim.
3 – Contêineres são mais leves e escaláveis do que uma máquina virtual
Quando você define uma máquina virtual, precisa especificar quantos recursos (memória, processadores, disco, etc.) da máquina host alocará no momento em que a criar. Esses recursos também ficam indisponíveis para o sistema operacional subjacente.
Pelo contrário, um contêiner Docker usa apenas os recursos necessários a qualquer momento, e você também pode implantar várias instâncias do mesmo contêiner, ao mesmo tempo, sem a única opção de fornecer mais e mais recursos de hardware a um contêiner pré-existente.
Além disso, você pode controlar o consumo de recursos do host ao qual um contêiner ou um conjunto deles terá acesso. Se um determinado contêiner estiver sobrecarregado por ter muito uso, ele não monopolizará todos os recursos da máquina ou fará com que outros contêineres caiam nesse host.
Se também quiser recursos mais poderosos, Kubernetes permite orquestrar todos os seus contêineres, monitorá-los, protegê-los, executá-los periodicamente, e criar ambientes corporativos com a complexidade que você precisa.
4 – Tão seguro quanto uma máquina virtual
Os contêineres Docker usam os recursos da máquina host, mas eles têm seu próprio ambiente de runtime. Têm uma versão reduzida do espaço do usuário do sistema operacional, o que significa que você pode proteger um contêiner de uma forma muito semelhante ao que você faria em uma máquina real, já que no fundo é quase uma máquina real.
Um contêiner não pode acessar outros contêineres ou o sistema operacional subjacente (exceto os volumes de armazenamento aos quais você concede permissão) e se comunicará com outras redes e contêineres, com a configuração de rede específica que você deseja conceder.
Tenha em mente que um container o isola tanto quanto uma máquina virtual, mas é muito menos pesado, requer menos configuração, e faz isso com total segurança
5 – Concebido para funcionar na nuvem
Os contêineres foram pensados com a nuvem em mente. E, atualmente, os principais atores do Cloud oferecem ótimas opções para a implantação de contêineres em suas infraestruturas.
Assim, tanto a Amazon Web Services, como o Microsoft Azure ou o Google Compute Engine (entre muitos outros), permitem que você implante contêineres na nuvem de maneira bem simples, usando a linha de comando ou ferramentas visuais. Eles ainda permitem que você fature os contêineres por segundo, o que abre um mundo de possibilidades.
Além disso, todos eles suportam o Kubernetes para poder fazer implementações complexas de vários contêineres orquestrados para funcionar e dimensionar independentemente.
Implantar infra-estruturas simples ou complexas nunca foi tão fácil quanto agora.
6 – Vantagens concretas para .NET
Outra vantagem do Docker é que ele também pode ser usado para unificar os ambientes de desenvolvimento e o fluxo de trabalho.
Ou seja, você não precisa instalar os seus SDKs de trabalho ou compiladores – você define um ambiente de trabalho baseado em imagens Docker para toda a equipe, e assim você garante que todos possuam exatamente o mesmo ambiente, e que tudo vai se comportar da mesma forma.
A Microsoft está contribuindo muito com a comunidade Docker, e oferece uma integração muito boa do Docker e desses fluxos de trabalho em suas ferramentas para desenvolvedores – tanto no Visual Studio e no Visual Studio Code, quanto no Team System.
Se você criar aplicativos .NET Core e, especialmente, aplicativos da Web com .NET Core MVC, eles poderão trabalhar em contêineres do Linux da mesma maneira que qualquer aplicativo de linguagem com Node.js, Go, PHP ou outros que tenham sido usados neste sistema.
Há algum tempo os contêineres tradicionais do Linux funcionam no Windows Server (e no Windows 10). Você não precisa de Linux ou Mac para trabalhar com o Docker, e agora temos também contêineres nativos do Windows, que permitem executar como contêiner aplicações desse sistema operacional.
Isto significa que se – por exemplo – você tem uma aplicação Web Forms feita no velho e bom ASP.NET, você poderá usá-la em um contêiner e obter todas as vantagens que isso lhe dá, podendo ainda combinar com outros contêineres de aplicativos e implantá-los na nuvem.
A ASP.NET Core usa o Kestrel para atender aos aplicativos, e você deve usar algum proxy reverso para o Kestrel para fornecer os recursos de um servidor de aplicativos real.
Se os seus aplicativos forem implantados em contêineres, você consegue isso de várias maneiras padronizadas: desde o uso de um proxy NGINX específico de uma imagem já criada, até o uso do Ingress no Kubernetes.
Embora o Docker tenha sido criado para o Linux, seu uso na plataforma .NET e Windows não para de crescer e está melhorando. A Microsoft trabalha em estreita colaboração com a equipe do Docker e sua comunidade.
Como vimos, motivos não faltam para você conhecer e começar a usar o Docker.
Até a próxima!