Najlepsze rozwiązania dla usługi Azure Container RegistryBest practices for Azure Container Registry

Zastosowanie tych najlepszych rozwiązań pozwala zmaksymalizować wydajność i ekonomiczne wykorzystanie rejestru prywatnego na platformie Azure do przechowywania i wdrażania obrazów kontenerów i innych artefaktów.By following these best practices, you can help maximize the performance and cost-effective use of your private registry in Azure to store and deploy container images and other artifacts.

Aby uzyskać podstawowe informacje na temat pojęć dotyczących rejestru, zobacz About registries, repositories, and images (Informacje o rejestrach, repozytoriach i obrazach).For background on registry concepts, see About registries, repositories, and images. Zobacz też zalecenia dotyczące tagowania i wersjonarowania obrazów kontenerów, aby uzyskać informacje na temat strategii tagowania i wersjowania obrazów w rejestrze.See also Recommendations for tagging and versioning container images for strategies to tag and version images in your registry.

Wdrażanie w pobliskiej sieciNetwork-close deployment

Utwórz rejestr kontenerów w tym samym regionie świadczenia usług Azure, w którym zostały wdrożone kontenery.Create your container registry in the same Azure region in which you deploy containers. Dzięki umieszczeniu rejestru w regionie blisko sieci, w której hostowane są kontenery, można zmniejszyć opóźnienia i obniżyć koszty.Placing your registry in a region that is network-close to your container hosts can help lower both latency and cost.

Wdrożenie w pobliskiej sieci jest jednym z głównych powodów używania prywatnego rejestru kontenerów.Network-close deployment is one of the primary reasons for using a private container registry. Obrazy platformy Docker mają wydajną konstrukcję warstw, która umożliwia przeprowadzanie wdrożeń przyrostowych.Docker images have an efficient layering construct that allows for incremental deployments. Jednak nowe węzły muszą ściągać wszystkie warstwy wymagane dla danego obrazu.However, new nodes need to pull all layers required for a given image. Ten początkowy docker pull może szybko powiększyć się do wielu gigabajtów.This initial docker pull can quickly add up to multiple gigabytes. Posiadanie prywatnego rejestru blisko wdrożenia minimalizuje opóźnienia sieci.Having a private registry close to your deployment minimizes the network latency. Ponadto wszystkich chmury publiczne, w tym Azure, stosują opłaty za transfer danych wychodzących z sieci.Additionally, all public clouds, Azure included, implement network egress fees. Ściąganie obrazów z jednego centrum danych do innego skutkuje dodatkowymi opłatami za dane wychodzące z sieci, a poza tym zwiększa opóźnienia.Pulling images from one datacenter to another adds network egress fees, in addition to the latency.

Replikacja geograficzna wdrożeń w wielu regionachGeo-replicate multi-region deployments

Użyj funkcji replikacji geograficznej usługi Azure Container Registry, jeśli wdrażasz kontenery w wielu regionach.Use Azure Container Registry's geo-replication feature if you're deploying containers to multiple regions. Bez względu na to, czy obsługujesz globalnych klientów z lokalnych centrów danych, czy też Twój zespół deweloperów znajduje się w różnych lokalizacjach, możesz uprościć zarządzanie rejestrem i zminimalizować opóźnienia dzięki replikacji geograficznej rejestru.Whether you're serving global customers from local data centers or your development team is in different locations, you can simplify registry management and minimize latency by geo-replicating your registry. Można również skonfigurować regionalne webhook, aby powiadamiać o zdarzeniach w określonych replikach, takich jak wypychanie obrazów.You can also configure regional webhooks to notify you of events in specific replicas such as when images are pushed.

Replikacja geograficzna jest dostępna w rejestrach Premium.Geo-replication is available with Premium registries. Aby dowiedzieć się, jak korzystać z replikacji geograficznej, zobacz trzyczęściowy samouczek Replikacja geograficzna w usłudze Azure Container Registry.To learn how to use geo-replication, see the three-part tutorial, Geo-replication in Azure Container Registry.

Maksymalizuj wydajność ściąganiaMaximize pull performance

Oprócz umieszczania obrazów w pobliżu wdrożeń charakterystyka samych obrazów może mieć wpływ na wydajność ściągania.In addition to placing images close to your deployments, characteristics of your images themselves can impact pull performance.

  • Rozmiar obrazu — minimalizowanie rozmiarów obrazów przez usunięcie niepotrzebnych warstw lub zmniejszenie rozmiaru warstw.Image size - Minimize the sizes of your images by removing unnecessary layers or reducing the size of layers. Jednym ze sposobów zmniejszenia rozmiaru obrazu jest zastosowanie wieloetapowego podejścia do kompilacji platformy Docker w celu dołączania tylko niezbędnych składników środowiska uruchomieniowego.One way to reduce image size is to use the multi-stage Docker build approach to include only the necessary runtime components.

    Sprawdź również, czy obraz może zawierać jaśniejszy podstawowy obraz systemu operacyjnego.Also check whether your image can include a lighter base OS image. Jeśli korzystasz ze środowiska wdrażania, takiego jak Azure Container Instances buforuje niektóre obrazy podstawowe, sprawdź, czy można zamienić warstwę obrazu na jeden z obrazów buforowanych.And if you use a deployment environment such as Azure Container Instances that caches certain base images, check whether you can swap an image layer for one of the cached images.

  • Liczba warstw — zrównoważyć liczbę używanych warstw.Number of layers - Balance the number of layers used. Jeśli jest ich zbyt mało, ponowne użycie warstwy i buforowanie na hoście nie jest korzystne.If you have too few, you don’t benefit from layer reuse and caching on the host. Zbyt wiele, a środowisko wdrażania poświęca więcej czasu na ściąganie i dekompresowanie.Too many, and your deployment environment spends more time pulling and decompressing. Optymalne jest od pięciu do 10 warstw.Five to 10 layers is optimal.

Wybierz również warstwę usługi o Azure Container Registry która spełnia Twoje wymagania dotyczące wydajności.Also choose a service tier of Azure Container Registry that meets your performance needs. Warstwa Premium zapewnia największą przepustowość i najwyższy stopień współbieżnych operacji odczytu i zapisu w przypadku wdrożeń o dużej ilości danych.The Premium tier provides the greatest bandwidth and highest rate of concurrent read and write operations when you have high-volume deployments.

Przestrzenie nazw repozytoriówRepository namespaces

Korzystając z przestrzeni nazw repozytorium, można zezwolić na udostępnianie pojedynczego rejestru w wielu grupach w organizacji.By using repository namespaces, you can allow sharing a single registry across multiple groups within your organization. Rejestry mogą być współużytkowane przez wdrożenia i zespoły.Registries can be shared across deployments and teams. Usługa Azure Container Registry obsługuje zagnieżdżone przestrzenie nazw, umożliwiając izolację grup.Azure Container Registry supports nested namespaces, enabling group isolation. Jednak rejestr zarządza wszystkimi repozytoriami niezależnie, a nie jako hierarchią.However, the registry manages all repositories independently, not as a hierarchy.

Rozważmy na przykład poniższe znaczniki obrazów kontenera.For example, consider the following container image tags. Obrazy, które są używane dla całej firmy, takie jak , są umieszczane w głównej przestrzeni nazw, podczas gdy obrazy kontenerów należące do grup Products i Marketing używają aspnetcore własnych przestrzeni nazw.Images that are used corporate-wide, like aspnetcore, are placed in the root namespace, while container images owned by the Products and Marketing groups each use their own namespaces.

  • contoso.azurecr.io/aspnetcore:2.0contoso.azurecr.io/aspnetcore:2.0
  • contoso.azurecr.io/products/widget/web:1contoso.azurecr.io/products/widget/web:1
  • contoso.azurecr.io/products/bettermousetrap/refundapi:12.3contoso.azurecr.io/products/bettermousetrap/refundapi:12.3
  • contoso.azurecr.io/marketing/2017-fall/concertpromotions/campaign:218.42contoso.azurecr.io/marketing/2017-fall/concertpromotions/campaign:218.42

Dedykowana grupa zasobówDedicated resource group

Ponieważ rejestry kontenerów są zasobami używanymi na wielu hostach kontenerów, rejestr powinien znajdować się we własnej grupie zasobów.Because container registries are resources that are used across multiple container hosts, a registry should reside in its own resource group.

Mimo że możesz eksperymentować z określonym typem hosta, takim jak Azure Container Instances, po jego usunięciu prawdopodobnie będziesz chcieć usunąć wystąpienie kontenera.Although you might experiment with a specific host type, such as Azure Container Instances, you'll likely want to delete the container instance when you're done. Można jednak również zachować kolekcję obrazów, które zostały wypchnięte do usługi Azure Container Registry.However, you might also want to keep the collection of images you pushed to Azure Container Registry. Dzięki umieszczeniu rejestru w jego własnej grupie zasobów można zminimalizować ryzyko przypadkowego usunięcia kolekcji obrazów w rejestrze podczas usuwania grupy zasobów wystąpienia kontenera.By placing your registry in its own resource group, you minimize the risk of accidentally deleting the collection of images in the registry when you delete the container instance resource group.

Uwierzytelnianie i autoryzacjaAuthentication and authorization

Istnieją dwa podstawowe scenariusze uwierzytelniania w usłudze Azure Container Registry: uwierzytelnianie indywidualne i uwierzytelnianie usługi („bezobsługowe”).When authenticating with an Azure container registry, there are two primary scenarios: individual authentication, and service (or "headless") authentication. Poniższa tabela zawiera krótkie omówienie tych scenariuszy i wskazuje zalecaną metodę uwierzytelniania w przypadku każdego z nich.The following table provides a brief overview of these scenarios, and the recommended method of authentication for each.

TypType Przykładowy scenariuszExample scenario Zalecana metodaRecommended method
Indywidualne tożsamościIndividual identity Deweloper ściągający obrazy na swoją maszynę deweloperską lub wypychający z niej obrazy.A developer pulling images to or pushing images from their development machine. Polecenie az acr loginaz acr login
Bezobsługowe/tożsamość usługiHeadless/service identity Potoki kompilacji i wdrażania, w których użytkownik nie bierze bezpośrednio udziału.Build and deployment pipelines where the user isn't directly involved. Jednostka usługiService principal

Aby uzyskać szczegółowe informacje na temat tych i innych scenariuszy uwierzytelniania Azure Container Registry, zobacz Authenticate with an Azure container registry (Uwierzytelnianie za pomocą usługi Azure Container Registry).For in-depth information about these and other Azure Container Registry authentication scenarios, see Authenticate with an Azure container registry.

Azure Container Registry obsługuje rozwiązania w zakresie zabezpieczeń w organizacji w celu rozdzielania obowiązków i uprawnień do różnych tożsamości.Azure Container Registry supports security practices in your organization to distribute duties and privileges to different identities. Za pomocą kontroli dostępu opartej na rolachprzypisz odpowiednie uprawnienia różnym użytkownikom, jednostkom usługi lub innym tożsamościom, które wykonują różne operacje rejestru.Using role-based access control, assign appropriate permissions to different users, service principals, or other identities that perform different registry operations. Na przykład przypisz uprawnienia wypychania do jednostki usługi używanej w potoku kompilacji i przypisz uprawnienia do ściągania do innej tożsamości używanej do wdrożenia.For example, assign push permissions to a service principal used in a build pipeline and assign pull permissions to a different identity used for deployment. Tworzenie tokenów w celu uzyskania szczegółowego, ograniczonego czasowo dostępu do określonych repozytoriów.Create tokens for fine-grained, time-limited access to specific repositories.

Zarządzanie rozmiarem rejestruManage registry size

Ograniczenia magazynu poszczególnych warstw usług rejestru kontenerów mają być zgodne z typowym scenariuszem: Podstawowa dla rozpoczynania pracy, Standardowa dla większości aplikacji produkcyjnych i Premium na temat wydajności hiperskali i replikacji geograficznej.The storage constraints of each container registry service tier are intended to align with a typical scenario: Basic for getting started, Standard for most production applications, and Premium for hyper-scale performance and geo-replication. W ciągu cyklu życia rejestru należy zarządzać jego rozmiarem, okresowo usuwając nieużywaną zawartość.Throughout the life of your registry, you should manage its size by periodically deleting unused content.

Użyj polecenia interfejsu wiersza polecenia platformy Azure az acr show-usage, aby wyświetlić bieżący rozmiar rejestru:Use the Azure CLI command az acr show-usage to display the current size of your registry:

az acr show-usage --resource-group myResourceGroup --name myregistry --output table
NAME      LIMIT         CURRENT VALUE    UNIT
--------  ------------  ---------------  ------
Size      536870912000  185444288        Bytes
Webhooks  100                            Count

Bieżący magazyn używany w przeglądzie rejestru można również znaleźć w Azure Portal:You can also find the current storage used in the Overview of your registry in the Azure portal:

Informacje o użyciu rejestru w witrynie Azure Portal

Usuwanie danych obrazuDelete image data

Azure Container Registry obsługuje kilka metod usuwania danych obrazu z rejestru kontenerów.Azure Container Registry supports several methods for deleting image data from your container registry. Możesz usuwać obrazy według tagu lub skrótu manifestu albo usuwać całe repozytorium.You can delete images by tag or manifest digest, or delete a whole repository.

Aby uzyskać szczegółowe informacje na temat usuwania danych obrazów z rejestru, w tym obrazów nieoznakowanych (czasami nazywanych "zwisającym" lub "oddzielonym"), zobacz Usuwanie obrazów kontenerów w Azure Container Registry .For details on deleting image data from your registry, including untagged (sometimes called "dangling" or "orphaned") images, see Delete container images in Azure Container Registry.

Następne krokiNext steps

Azure Container Registry jest dostępna w kilku warstwach (nazywanych również jednostkami SKU), które zapewniają różne możliwości.Azure Container Registry is available in several tiers (also called SKUs) that provide different capabilities. Aby uzyskać szczegółowe informacje na temat dostępnych warstw usług, zobacz Azure Container Registry usługi.For details on the available service tiers, see Azure Container Registry service tiers.

Aby uzyskać zalecenia dotyczące poprawy stanu zabezpieczeń rejestrów kontenerów, zobacz Punkt odniesienia zabezpieczeń platformy Azure dla Azure Container Registry.For recommendations to improve the security posture of your container registries, see Azure Security Baseline for Azure Container Registry.