Oi, pessoal!
Rodar .Net em container? Sim! É possível e vamos mostrar hoje como você pode fazer esse ambiente funcionar e testar sua aplicação. Bem, antes de tudo você precisa entender todo o movimento que a Microsoft vem fazendo para que sua linguagem de programação torne-se cada vez mais utilizada pelos desenvolvedores. Para isso eles repensaram tudo que já fizeram, e lançaram uma versão do .Net com features muito parecidas como as encontradas em node e ruby on rails, e a batizaram de ASP.NET Core. Conceitualmente o ASP.NET Core é uma plataforma open source de desenvolvimento leve e eficiente para aplicações escritas em .net. Veja abaixo uma lista dos principais pontos do ASP.NET Core:
- Suporte integrado para criação e utilização de pacotes NuGet;
- Pipeline de request mais leve e modular;
- Ambiente configurado para cloud;
- Suporte a injeção de dependência;
- Novas ferramentas que facilitam o desenvolvimento web;
- Capacidade de hospedar o processo no IIS ou em um Self-Host;
- Suporte para desenvolvimento de aplicação asp.net em Windows, Linux e Mac;
- Open Source e com comunidade ativa;
- Todos os pacotes do .Net no NuGet;
- .Net Core construido com suporte a versionamento side-by-side;
- Uma unica Stack para Web UI e Web APIs.
Por que a Microsoft vem tomando esse rumo? Simples, para atrair mais pessoas para o seu produto, tendo em vista que as principais linguagens, ou as que mais crescem, têm nativas todas essas features. A a melhor alternativa para a Microsoft foi mudar a abordagem e atrair pessoas para melhorar seu produto/serviço e, claro, isso consolida ainda mais o Windows Azure, fazendo com o desenvolvimento e deploy de apps em .Net torne-se menos doloroso.
Vamos ver isso rodando em um container?
Simples, tendo o Docker instalado (em qualquer host, seja ele Windows, Linux ou Mac), execute:
docker run -it microsoft/dotnet:latest
Dentro do container, você deve criar sua aplicação, de forma parecida com o que ocorre com o ruby on rails, para isso o .Net core disponibiliza um utilitário chamado: dotnet, veja:
mkdir app cd app dotnet new
O comando dotnet new criará toda a estrutura necessária para rodar uma aplicação hello world básica. Ele criará um arquivo chamado project.json com o seguinte código:
{ "version": "1.0.0-*", "compilationOptions": { "emitEntryPoint": true }, "dependencies": { "Microsoft.NETCore.Runtime": "1.0.1-beta-*", "System.IO": "4.0.11-beta-*", "System.Console": "4.0.0-beta-*", "System.Runtime": "4.0.21-beta-*" }, "frameworks": { "dnxcore50": { } } }
Esse arquivo project.json contém as informações de dependência que sua aplicação precisará para rodar. É fundamental que você informe nesse aquivo todos os pacotes que necessita. Nessa mesma estrutura será criado um arquivo chamado Program.cs com este código:
using System; namespace ConsoleApplication { public class Program { public static void Main(string[] args) { Console.WriteLine("Hello World!"); } } }
Agora basta realizar a instalação das dependências:
dotnet restore
E pronto! Sua aplicação estará pronta para rodar, basta executar o comando:
dotnet run
Fácil, certo? E é possível deixar ainda mais fácil; basta criar Dockerfile e gerar uma imagem com esse ambiente:
FROM microsoft/dotnet:latest RUN mkdir /app WORKDIR /app RUN ["dotnet", "new"] RUN ["dotnet", "restore"] ENTRYPOINT ["dotnet", "run"]
Agora crie a imagem: docker build -t myapp.
E crie um container baseado nessa nova imagem: docker run -d myapp. Quer ver o que retornou nessa execução? docker logs iddocontainer. Ele deverá retornar algo desse tipo: Hello, World!
É claro que você pode aprimorar esse ambiente, principalmente se quiser rodar uma aplicação web, mas esse ambiente básico já serve como inicio para seus testes.