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ção 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 tem nativas todas essas features, 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, para isso, 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 ;).
Gostou? Então nos ajude divulgando o mundodocker.com.br, grande abraço!