Obrazy z wieloma architekturami w rejestrze kontenerów platformy Azure
W tym artykule przedstawiono obrazy z wieloma architekturami (wieloma łukami) oraz sposób użycia funkcji usługi Azure Container Registry w celu ułatwienia tworzenia, przechowywania i używania ich.
Obraz z wieloma łukami to typ obrazu kontenera, który może łączyć warianty dla różnych architektur, a czasami w różnych systemach operacyjnych. W przypadku uruchamiania obrazu z obsługą wielu architektur klienci kontenerów będą automatycznie wybierać wariant obrazu zgodny z systemem operacyjnym i architekturą.
Manifesty i listy manifestów
Obrazy z wieloma łukami są oparte na manifestach obrazów i listach manifestów.
Manifest
Każdy obraz kontenera jest reprezentowany przez manifest. Manifest to plik JSON, który jednoznacznie identyfikuje obraz, odwołując się do jego warstw i odpowiadających im rozmiarów.
Podstawowy manifest obrazu systemu Linux hello-world
wygląda podobnie do następującego:
{
"schemaVersion": 2,
"mediaType": "application/vnd.docker.distribution.manifest.v2+json",
"config": {
"mediaType": "application/vnd.docker.container.image.v1+json",
"size": 1510,
"digest": "sha256:fbf289e99eb9bca977dae136fbe2a82b6b7d4c372474c9235adc1741675f587e"
},
"layers": [
{
"mediaType": "application/vnd.docker.image.rootfs.diff.tar.gzip",
"size": 977,
"digest": "sha256:2c930d010525941c1d56ec53b97bd057a67ae1865eebf042686d2a2d18271ced"
}
]
}
Manifest można wyświetlić w usłudze Azure Container Registry przy użyciu witryny Azure Portal lub narzędzi, takich jak polecenie az acr manifest list-metadata w interfejsie wiersza polecenia platformy Azure.
Lista manifestów
Lista manifestu dla obrazu z wieloma łukami (ogólnie znana jako indeks obrazu dla obrazów OCI) to kolekcja obrazów (indeks) obrazów, którą można utworzyć, określając jedną lub więcej nazw obrazów. Zawiera szczegółowe informacje o poszczególnych obrazach, takich jak obsługiwany system operacyjny i architektura, rozmiar i skrót manifestu. Lista manifestów może być używana w taki sam sposób jak nazwa obrazu w docker pull
poleceniach i docker run
.
Interfejs docker
wiersza polecenia zarządza manifestami i listami manifestów przy użyciu polecenia manifestu platformy Docker.
Uwaga
docker manifest
Obecnie polecenia i podpolecenia są eksperymentalne. Aby uzyskać szczegółowe informacje na temat używania poleceń eksperymentalnych, zobacz dokumentację platformy Docker.
Listę manifestów można wyświetlić za pomocą docker manifest inspect
polecenia . Poniżej przedstawiono dane wyjściowe dla obrazu mcr.microsoft.com/mcr/hello-world:latest
z wieloma łukami, który ma trzy manifesty: dwa dla architektury systemu operacyjnego Linux i jeden dla architektury systemu Windows.
{
"schemaVersion": 2,
"mediaType": "application/vnd.docker.distribution.manifest.list.v2+json",
"manifests": [
{
"mediaType": "application/vnd.docker.distribution.manifest.v2+json",
"size": 524,
"digest": "sha256:83c7f9c92844bbbb5d0a101b22f7c2a7949e40f8ea90c8b3bc396879d95e899a",
"platform": {
"architecture": "amd64",
"os": "linux"
}
},
{
"mediaType": "application/vnd.docker.distribution.manifest.v2+json",
"size": 525,
"digest": "sha256:873612c5503f3f1674f315c67089dee577d8cc6afc18565e0b4183ae355fb343",
"platform": {
"architecture": "arm64",
"os": "linux"
}
},
{
"mediaType": "application/vnd.docker.distribution.manifest.v2+json",
"size": 1124,
"digest": "sha256:b791ad98d505abb8c9618868fc43c74aa94d08f1d7afe37d19647c0030905cae",
"platform": {
"architecture": "amd64",
"os": "windows",
"os.version": "10.0.17763.1697"
}
}
]
}
Gdy lista manifestu z wieloma łukami jest przechowywana w usłudze Azure Container Registry, możesz również wyświetlić listę manifestów przy użyciu witryny Azure Portal lub narzędzi, takich jak polecenie az acr manifest list-metadata .
Importowanie obrazu z wieloma łukami
Istniejący obraz z wieloma łukami można zaimportować do rejestru kontenerów platformy Azure przy użyciu polecenia az acr import . Składnia importowania obrazów jest taka sama jak w przypadku obrazu z jedną architekturą. Podobnie jak importowanie obrazu z jedną architekturą, importowanie obrazu z wieloma łukami nie korzysta z poleceń platformy Docker.
Aby uzyskać szczegółowe informacje, zobacz Importowanie obrazów kontenerów do rejestru kontenerów.
Wypychanie obrazu z wieloma łukami
Jeśli masz utworzone przepływy pracy służące do tworzenia obrazów kontenerów dla różnych architektur, wykonaj następujące kroki, aby wypchnąć obraz z wieloma łukami do rejestru kontenerów platformy Azure.
Oznaczanie i wypychanie każdego obrazu specyficznego dla architektury do rejestru kontenerów. W poniższym przykładzie przyjęto założenie, że dwie architektury systemu Linux: arm64 i amd64.
docker tag myimage:arm64 \ myregistry.azurecr.io/multi-arch-samples/myimage:arm64 docker push myregistry.azurecr.io/multi-arch-samples/myimage:arm64 docker tag myimage:amd64 \ myregistry.azurecr.io/multi-arch-samples/myimage:amd64 docker push myregistry.azurecr.io/multi-arch-samples/myimage:amd64
Uruchom polecenie
docker manifest create
, aby utworzyć listę manifestów, aby połączyć powyższe obrazy w obraz z wieloma łukami.docker manifest create myregistry.azurecr.io/multi-arch-samples/myimage:multi \ myregistry.azurecr.io/multi-arch-samples/myimage:arm64 \ myregistry.azurecr.io/multi-arch-samples/myimage:amd64
Wypchnij manifest do rejestru kontenerów przy użyciu polecenia
docker manifest push
:docker manifest push myregistry.azurecr.io/multi-arch-samples/myimage:multi
Użyj polecenia ,
docker manifest inspect
aby wyświetlić listę manifestów. Przykładowe dane wyjściowe polecenia są wyświetlane w poprzedniej sekcji.
Po wypchnięciu manifestu z wieloma łukami do rejestru należy pracować z obrazem z wieloma łukami w taki sam sposób, jak w przypadku obrazu z pojedynczą architekturą. Możesz na przykład ściągnąć obraz przy użyciu polecenia docker pull
az acr repository , aby wyświetlić tagi, manifesty i inne właściwości obrazu.
Kompilowanie i wypychanie obrazu z wieloma łukami
Korzystając z funkcji usługi ACR Tasks, można utworzyć i wypchnąć obraz z wieloma łukami do rejestru kontenerów platformy Azure. Na przykład zdefiniuj wieloetapowe zadanie w pliku YAML, które kompiluje obraz z wieloma łukami systemu Linux.
W poniższym przykładzie przyjęto założenie, że masz oddzielne pliki Dockerfile dla dwóch architektur, arm64 i amd64. Tworzy i wypycha obrazy specyficzne dla architektury, a następnie tworzy i wypycha manifest z wieloma łukami, który zawiera latest
tag:
version: v1.1.0
steps:
- build: -t {{.Run.Registry}}/multi-arch-samples/myimage:{{.Run.ID}}-amd64 -f dockerfile.arm64 .
- build: -t {{.Run.Registry}}/multi-arch-samples/myyimage:{{.Run.ID}}-arm64 -f dockerfile.amd64 .
- push:
- {{.Run.Registry}}/multi-arch-samples/myimage:{{.Run.ID}}-arm64
- {{.Run.Registry}}/multi-arch-samples/myimage:{{.Run.ID}}-amd64
- cmd: >
docker manifest create
{{.Run.Registry}}/multi-arch-samples/myimage:latest
{{.Run.Registry}}/multi-arch-samples/myimage:{{.Run.ID}}-arm64
{{.Run.Registry}}/multi-arch-samples/myimage:{{.Run.ID}}-amd64
- cmd: docker manifest push --purge {{.Run.Registry}}/multi-arch-samples/myimage:latest
- cmd: docker manifest inspect {{.Run.Registry}}/multi-arch-samples/myimage:latest
Następne kroki
- Usługa Azure Pipelines umożliwia tworzenie obrazów kontenerów dla różnych architektur.
- Dowiedz się więcej o tworzeniu obrazów wieloplatformowych przy użyciu eksperymentalnej wtyczki docker buildx .