Introdução ao .NET e Docker
Os contêineres são uma das maneiras mais populares de implantar e hospedar aplicativos em nuvem, com ferramentas como Docker, Kubernetese 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á suporte extensivo para ao usar o .NET com contentores.
O Docker fornece uma excelente visão geral de contêineres. Docker Desktop: Community Edition é uma boa ferramenta para usar contêineres na máquina desktop do desenvolvedor.
Imagens .NET
As imagens oficiais de contêiner .NET são publicadas no Microsoft Artifact Registry e podem ser detetadas no Docker Hub. Existem imagens de tempo de execução para produção e imagens SDK para construir seu código, para Linux (Alpine, Debian, Ubuntu, Mariner) e Windows. Para obter mais informações, consulte imagens de contêiner .NET.
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 Chiseled são imagens de contêiner do Ubuntu com um conjunto mínimo de componentes necessários para o runtime do .NET. Essas imagens são ~ 100 MB menores do que as imagens normais do Ubuntu e têm menos CVEs uma vez que têm menos componentes. Em particular, eles não contêm um shell ou gerenciador de pacotes, o que melhora significativamente seu perfil de segurança. Eles também incluem um utilizador não-root e estão configurados com esse utilizador habilitado.
Criação de imagens de contêiner
Você pode criar uma imagem de contêiner com um Dockerfile ou confiar no SDK do .NET para produzir uma imagem. Para obter exemplos sobre a criação de imagens, consulte dotnet/dotnet-docker e dotnet/sdk-container-builds.
O exemplo a seguir demonstra a criação e a execução de uma imagem de contêiner em algumas etapas rápidas (suportadas com o .NET 8 e o .NET 7.0.300).
$ 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 o Dockerfiles.
Portos
O mapeamento de portas é uma parte fundamental do uso de contentores. As portas devem ser publicadas fora do contêiner para responder a solicitações externas da Web. ASP.NET Imagens de contêiner principais alteradas no .NET 8 para escutar na porta 8080
, por padrão. .NET 6 e 7 escutam na porta número 80
.
No exemplo anterior com docker run
, a porta do host 8000
é mapeada para a porta do contêiner 8080
. O Kubernetes funciona de forma semelhante.
As variáveis de ambiente ASPNETCORE_HTTP_PORTS
, ASPNETCORE_HTTPS_PORTS
e ASPNETCORE_URLS
podem ser usadas para configurar esse comportamento.
Utilizadores
A partir do .NET 8, todas as imagens incluem um usuário não-root chamado app
. Por predefinição, as imagens esculpidas são configuradas com este utilizador ativado. O recurso de publicação do aplicativo como contentor .NET (demonstrado na seção Criando imagens de contentor) também configura imagens com esse utilizador habilitado por padrão. Em todos os outros cenários, o usuário app
pode ser definido manualmente, por exemplo, com a instrução USER
Dockerfile. Se uma imagem tiver sido configurada com app
e os comandos precisarem ser executados como root
, a instrução USER
pode ser usada para definir o usuário como root
.
Manter-se informado
Notícias relacionadas com contentores são postadas nas discussões de dotnet/dotnet-docker e na categoria "contentores" do Blog .NET .
Serviços do Azure
Vários serviços do Azure dão suporte a contêineres. Você cria uma imagem do Docker para seu aplicativo e a implanta em um dos seguintes serviços:
Serviço Kubernetes do Azure (AKS)
Dimensione e orquestre contêineres Windows & Linux usando Kubernetes.Serviço de Aplicativo do Azure
Implante aplicativos Web ou APIs usando contêineres em um ambiente PaaS.Aplicativos de Contêiner do Azure
Execute as suas cargas de trabalho de contentor sem gerir servidores, orquestração ou infraestrutura e tire partido do suporte nativo para Dapr e KEDA para observabilidade e dimensionamento até zero.Instâncias de Contêiner do Azure
Crie contêineres individuais na nuvem sem serviços de gerenciamento de nível superior.Azure Batch
Execute trabalhos de computação repetitivos usando contêineres.Azure Service Fabric
Levante, mude e modernize aplicativos .NET para microsserviços usando contêineres Windows & Linux.Registro de Contêiner do Azure
Armazene e gerencie imagens de contêiner em todos os tipos de implantações do Azure.