Compartilhar via


Imagens oficiais do .NET Docker

Dica

Esse conteúdo é um trecho do eBook da Arquitetura de Microsserviços do .NET para os Aplicativos .NET em Contêineres, disponível no .NET Docs ou como um PDF para download gratuito que pode ser lido offline.

Imagem em miniatura da capa do livro eletrônico da Arquitetura de Microsserviços do .NET para os Aplicativos .NET em Contêineres.

As imagens oficiais do .NET Docker são imagens do Docker criadas e otimizadas pela Microsoft. Eles estão disponíveis publicamente em Registro de Artefato da Microsoft. Você pode buscar no catálogo todos os repositórios de imagens do .NET, por exemplo, o repositório do SDK do .NET .

Cada repositório pode conter várias imagens, dependendo de versões do .NET e, dependendo do sistema operacional e das versões (Linux Debian, Linux Alpine, Windows Nano Server, Windows Server Core, entre outros). Os repositórios de imagens fornecem marcação extensiva para ajudar a selecionar não apenas uma versão de estrutura específica, mas também escolher um sistema operacional (distribuição Linux ou versão do Windows).

Otimizações de imagem do .NET e do Docker para desenvolvimento versus produção

Ao criar imagens do Docker para desenvolvedores, a Microsoft se concentrava nos seguintes cenários principais:

  • Imagens usadas para desenvolver e criar aplicativos .NET.

  • Imagens usadas para executar .NET.

Por que várias imagens? Ao desenvolver, criar e executar aplicativos em contêineres, você geralmente tem prioridades diferentes. Fornecendo diferentes imagens para essas tarefas separadas, a Microsoft ajuda a otimizar os processos separados de desenvolver, criar e implantar aplicativos.

Durante o desenvolvimento e o build

Durante o desenvolvimento, o que é importante é a velocidade em que é possível iterar alterações e a capacidade de depurá-las. O tamanho da imagem não é tão importante quanto a capacidade de fazer alterações em seu código e ver as alterações rapidamente. Algumas ferramentas e "contêineres de agentes de compilação" utilizam a imagem .NET de desenvolvimento (mcr.microsoft.com/dotnet/sdk:8.0) durante o processo de desenvolvimento e compilação. Ao compilar dentro de um contêiner do Docker, os aspectos importantes são os elementos necessários para compilar seu aplicativo. Isso inclui o compilador e quaisquer outras dependências do .NET.

Outra ótima opção são os contêineres de desenvolvimento. Esses contêineres são ambientes de desenvolvimento pré-criados que estão prontos para uso — você não precisa se preocupar com dependências e configurações. Eles também são fáceis de personalizar para incluir ferramentas ou dependências adicionais. Os contêineres de desenvolvimento fornecem uma configuração consistente e reproduzível que é fácil de compartilhar com sua equipe. Os contêineres de desenvolvimento estão em conformidade com a Especificação de Contêineres de Desenvolvimento, e muitas ferramentas de desenvolvedor populares, incluindo Visual Studio Code e GitHub Codespaces, dão suporte a eles. Os contêineres de desenvolvimento do .NET são baseados na imagem do SDK do .NET e incluem o SDK do .NET, o runtime e outras ferramentas necessárias para desenvolver aplicativos .NET.

Por que este tipo de imagem de build é importante? Você não implanta essa imagem em produção. Em vez disso, é uma imagem usada para criar o conteúdo inserido em uma imagem de produção. Essa imagem seria usada em seu ambiente de CI (integração contínua) ou no ambiente de build ao usar builds do Docker de vários estágios.

Em produção

O que é importante na produção é a rapidez com que é possível implantar e iniciar seus contêineres com base em uma imagem do .NET de produção. Portanto, a imagem somente em runtime baseada em mcr.microsoft.com/dotnet/aspnet:8.0 é pequena o suficiente para ser enviada rapidamente pela rede do registo do Docker para os hosts do Docker. O conteúdo está pronto para ser executado, habilitando o tempo mais rápido possível da inicialização do contêiner ao processamento de resultados. No modelo do Docker, não há necessidade de compilação de código C#, como há quando você executa dotnet build ou dotnet publish ao usar o contêiner de build.

Nesta imagem otimizada você colocar somente os binários e outro conteúdo necessário para executar o aplicativo. Por exemplo, o conteúdo criado pelo dotnet publish contém apenas os binários do .NET compilados, imagens e arquivos .js e .css. Ao longo do tempo, você verá imagens que contêm pacotes pré-compilados (compilação de IL para nativa que ocorre em runtime).

Embora haja várias versões das imagens do .NET e do ASP.NET Core, todas elas compartilham uma ou mais camadas, incluindo a camada base. Portanto, a quantidade de espaço em disco necessário para armazenar uma imagem é pequena; ela é composta apenas pelo delta entre sua imagem personalizada e sua imagem de base. O resultado é que é rápido extrair a imagem do Registro.

Ao explorar os repositórios de imagens .NET no Registro de Artefato da Microsoft, você encontrará várias versões de imagens classificadas ou marcadas com marcas. Essas marcas ajudam a decidir qual usar, dependendo da versão de que você precisa, como as que estão na tabela a seguir:

Imagem Comentários
mcr.microsoft.com/dotnet/aspnet:8.0 ASP.NET Core, somente com runtime e otimizações de ASP.NET Core, no Linux e no Windows (várias arquiteturas)
mcr.microsoft.com/dotnet/sdk:8.0 .NET 8, com SDKs incluídos, no Linux e no Windows (várias arquiteturas)

Você pode encontrar todas as imagens do docker disponíveis no dotnet-docker e também consultar as versões de pré-visualização mais recentes usando o build noturno mcr.microsoft.com/dotnet/nightly/*