Os contêineres são uma das maneiras mais populares de implantar e hospedar aplicativos de nuvem, com ferramentas como Docker, Kubernetes e Podman. Muitos desenvolvedores escolhem contêineres porque é simples empacotar um aplicativo com suas dependências e fazer com que esse aplicativo seja executado de forma confiável em qualquer host de contêiner. Há amplo suporte para usar o .NET com contêineres.
O Docker fornece uma ótima visão geral dos contêineres. Docker Desktop: Community Edition é uma boa ferramenta para usar contêineres no computador da área de trabalho do desenvolvedor.
As imagens do .NET são atualizadas regularmente sempre que um novo patch do .NET é publicado ou quando uma imagem base do sistema operacional é atualizada.
Imagens de contêiner cinzeladas são imagens de contêiner do Ubuntu com um conjunto mínimo de componentes exigidos pelo runtime do .NET. Essas imagens têm aproximadamente 100 MB menos que as imagens regulares do Ubuntu e têm menos CVEs, pois têm menos componentes. Em especial, eles não contêm um shell ou gerenciador de pacotes, o que melhora significativamente o seu perfil de segurança. Elas também incluem um usuário não raiz e são configuradas com esse usuário habilitado.
O exemplo a seguir demonstra a criação e a execução de uma imagem de contêiner em algumas etapas rápidas (com suporte para .NET 8 e .NET 7.0.300).
Bash
$ dotnet new webapp -o webapp
$ cd webapp/
$ dotnet publish -t:PublishContainer
MSBuild version 17.8.3+195e7f5a3 for .NET
Determining projects to restore...
All projects are up-to-date for restore.
webapp -> /home/rich/webapp/bin/Release/net8.0/webapp.dll
webapp -> /home/rich/webapp/bin/Release/net8.0/publish/
Building image 'webapp' with tags 'latest' on top of base image 'mcr.microsoft.com/dotnet/aspnet:8.0'.
Pushed image 'webapp:latest' to local registry via 'docker'.
$ docker run --rm -d -p 8000:8080 webapp
7c7ad33409e52ddd3a9d330902acdd49845ca4575e39a6494952b642e584016e
$ curl -s http://localhost:8000 | grep ASP.NET
<p>Learn about <a href="https://learn.microsoft.com/aspnet/core">building Web apps with ASP.NET Core</a>.</p>
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7c7ad33409e5 webapp "dotnet webapp.dll" About a minute ago Up About a minute 0.0.0.0:8000->8080/tcp, :::8000->8080/tcp jovial_shtern
$ docker kill 7c7ad33409e5
docker init é uma nova opção para desenvolvedores que desejam usar Dockerfiles.
Portos
O mapeamento de porta é uma parte fundamental do uso de contêineres. As portas devem ser publicadas fora do contêiner para responder a solicitações da Web externas. As imagens de contêiner do ASP.NET Core foram alteradas no .NET 8 para escutar na porta 8080, por padrão. O .NET 6 e 7 escutam na porta 80.
No exemplo anterior com docker run, a porta do host 8000 é mapeada para a porta 8080 do contêiner. O Kubernetes funciona de maneira semelhante.
As variáveis de ambiente ASPNETCORE_HTTP_PORTS, ASPNETCORE_HTTPS_PORTS e ASPNETCORE_URLS podem ser usadas para configurar esse comportamento.
Usuários
A partir do .NET 8, todas as imagens incluem um usuário não raiz chamado app. Por padrão, as imagens cinzeladas são configuradas com esse usuário habilitado. O aplicativo de publicação como recurso de contêiner do .NET (demonstrado na seção Compilar imagens de contêiner) também configura imagens com esse usuário habilitado por padrão. Em todos os outros cenários, o usuário app pode ser definido manualmente, por exemplo, com a instrução USERDockerfile. Se uma imagem tiver sido configurada com app e os comandos precisarem ser executados como root, a instrução USER poderá ser usada para definir o usuário como root.
Aplicativos de Contêiner do Azure
Execute as cargas de trabalho de contêiner sem gerenciar servidores, orquestração ou infraestrutura e aproveite o suporte nativo ao Dapr e ao KEDA para observabilidade e dimensionamento até zero.
A fonte deste conteúdo pode ser encontrada no GitHub, onde você também pode criar e revisar problemas e solicitações de pull. Para obter mais informações, confira o nosso guia para colaboradores.
Comentários do .NET
O .NET é um projeto código aberto. Selecione um link para fornecer comentários:
Crie soluções de ponta a ponta no Microsoft Azure para criar Funções do Azure, implementar e gerenciar aplicativos Web, desenvolver soluções utilizando o Armazenamento do Microsoft Azure e muito mais.