Partilhar via


Imagens oficiais do .NET Docker

Gorjeta

Este conteúdo é um trecho do eBook, .NET Microservices Architecture for Containerized .NET Applications, disponível no .NET Docs ou como um PDF para download gratuito que pode ser lido offline.

Miniatura da capa do eBook .NET Microservices Architecture for Containerized .NET Applications.

As imagens oficiais do .NET Docker são imagens do Docker criadas e otimizadas pela Microsoft. Eles estão disponíveis publicamente no Microsoft Artifact Registry. Você pode pesquisar no catálogo para encontrar 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 das versões .NET e do sistema operacional e das versões (Linux Debian, Linux Alpine, Windows Nano Server, Windows Server Core e assim por diante). Os repositórios de imagens fornecem marcação extensa para ajudá-lo a selecionar não apenas uma versão específica da estrutura, mas também para escolher um sistema operacional (distribuição Linux ou versão Windows).

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

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

  • Imagens usadas para desenvolver e criar aplicativos .NET.

  • Imagens usadas para executar aplicativos .NET.

Porquê várias imagens? Ao desenvolver, criar e executar aplicativos em contêineres, você geralmente tem prioridades diferentes. Ao fornecer imagens diferentes para essas tarefas separadas, a Microsoft ajuda a otimizar os processos separados de desenvolvimento, criação e implantação de aplicativos.

Durante o desenvolvimento e a construção

Durante o desenvolvimento, o que é importante é a rapidez com que você pode iterar as alterações e a capacidade de depurar as alterações. O tamanho da imagem não é tão importante quanto a capacidade de fazer alterações no seu código e ver as alterações rapidamente. Algumas ferramentas e "contêineres build-agent", usam a imagem .NET de desenvolvimento (mcr.microsoft.com/dotnet/sdk:8.0) durante o processo de desenvolvimento e compilação. Ao criar dentro de um contêiner do Docker, os aspetos 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êiner de Desenvolvimento, e muitas ferramentas de desenvolvedor populares, incluindo Visual Studio Code e GitHub Codespaces, oferecem 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 tempo de execução e outras ferramentas necessárias para desenvolver aplicativos .NET.

Por que esse tipo de imagem de construção é importante? Você não implanta essa imagem na produção. Em vez disso, é uma imagem que você usa para criar o conteúdo que você coloca em uma imagem de produção. Essa imagem seria usada em seu ambiente de integração contínua (CI) ou ambiente de compilação ao usar compilações de vários estágios do Docker.

Em produção

O que é importante na produção é a rapidez com que você pode implantar e iniciar seus contêineres com base em uma imagem .NET de produção. Portanto, a imagem somente em tempo de execução baseada em mcr.microsoft.com/dotnet/aspnet:8.0 é pequena para que possa viajar rapidamente pela rede do registro do Docker para os hosts do Docker. O conteúdo está pronto para ser executado, permitindo o tempo mais rápido desde o início do contêiner até o processamento dos resultados. No modelo Docker, não há necessidade de compilação a partir do código C#, pois há quando você executa dotnet build ou dotnet publish ao usar o contêiner build.

Nesta imagem otimizada, você coloca apenas os binários e outros conteúdos necessários para executar o aplicativo. Por exemplo, o conteúdo criado por dotnet publish contém apenas os binários, imagens, .js e arquivos .css compilados do .NET. Com o tempo, você verá imagens que contêm pacotes pré-jitted (a compilação de IL para native que ocorre em tempo de execução).

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

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

Image Comentários
mcr.microsoft.com/dotnet/aspnet:8.0 ASP.NET Core, com otimizações apenas de tempo de execução e ASP.NET Core, em Linux e Windows (multi-arch)
mcr.microsoft.com/dotnet/sdk:8.0 .NET 8, com SDKs incluídos, em Linux e Windows (multi-arch)

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