Halaman ini menjelaskan cara mengirim dan mengambil image container dengan Docker. Halaman ini juga memberikan informasi tentang cara mengambil image dengan alat crictl jika Anda memecahkan masalah di Google Kubernetes Engine.
Untuk mengetahui informasi tentang cara men-deploy ke Google Cloud lingkungan runtime, lihat Men-deploy ke Google Cloud.
Untuk mengetahui petunjuk tentang cara membuat daftar, memberi tag, dan menghapus image, lihat Mengelola image.
Sebelum memulai
- Jika repositori target tidak ada, buat repositori baru.
- Anda harus memiliki setidaknya akses Penulis Artifact Registry akses ke repositori.
- Untuk mengirim image dengan Docker, instal Docker jika belum diinstal.
- Untuk mengirim image dengan Podman
- Instal Google Cloud CLI jika belum diinstal.
Peran yang diperlukan
Untuk mendapatkan izin yang Anda perlukan untuk mengirim dan mengambil image, minta administrator untuk memberi Anda peran IAM berikut di repositori:
-
Mengambil image:
Pembaca Artifact Registry (
roles/artifactregistry.reader) -
Memberi tag dan mengirim image:
Penulis Artifact Registry (
roles/artifactregistry.writer)
Untuk mengetahui informasi selengkapnya tentang pemberian peran, lihat Mengelola akses ke project, folder, dan organisasi.
Anda mungkin juga bisa mendapatkan izin yang diperlukan melalui peran khusus atau peran bawaan lainnya.
Mengautentikasi ke repositori
Anda harus melakukan autentikasi ke repositori setiap kali menggunakan Docker atau klien pihak ketiga lainnya dengan repositori Docker. Bagian ini memberikan ringkasan singkat tentang hal yang Anda perlukan untuk melakukan autentikasi dengan berhasil. Untuk mengetahui petunjuk mendetail, lihat Menyiapkan autentikasi untuk Docker.
Menggunakan credential helper
Untuk credential helper gcloud CLI atau credential helper mandiri, host Artifact Registry yang Anda gunakan harus ada dalam file konfigurasi Docker.
Artifact Registry tidak otomatis menambahkan semua host registry ke file konfigurasi Docker. Waktu respons Docker jauh lebih lambat jika ada banyak registry yang dikonfigurasi. Untuk meminimalkan jumlah registry dalam file konfigurasi, Anda menambahkan host yang diperlukan ke file.
Untuk mengonfirmasi host mana yang dikonfigurasi, jalankan perintah berikut untuk menampilkan konten file konfigurasi:
- Linux:
cat ~/.docker/config.json - Windows:
type %USERPROFILE%\.docker\config.json
Bagian credHelpers mencantumkan host Docker Artifact Registry yang dikonfigurasi.
Nama host diakhiri dengan -docker.pkg.dev. Contoh berikut menunjukkan beberapa host yang dikonfigurasi untuk credential helper gcloud CLI.
"credHelpers": {
"asia.gcr.io": "gcloud",
"eu.gcr.io": "gcloud",
"gcr.io": "gcloud",
"marketplace.gcr.io": "gcloud",
"northamerica-northeast1-docker.pkg.dev": "gcloud",
"us-central1-docker.pkg.dev": "gcloud",
"us-east1-docker.pkg.dev": "gcloud",
"us.gcr.io": "gcloud"
}
Jika host yang ingin Anda gunakan tidak ada dalam daftar, jalankan credential helper lagi untuk menambahkan host. Misalnya, perintah berikut menambahkan
us-west1-docker.pkg.dev.
Credential helper gcloud CLI:
gcloud auth configure-docker us-west1-docker.pkg.devCredential helper mandiri
docker-credential-gcr configure-docker us-west1-docker.pkg.dev
Menggunakan token akses
Untuk autentikasi token akses, Anda membuat token dan menggunakannya sebagai sandi dengan perintah docker login. Token berlaku selama 60 menit, jadi Anda harus melakukan autentikasi sesaat sebelum memberi tag, mengirim, atau mengambil image.
Contoh berikut membuat token akses menggunakan peniruan identitas akun layanan
dan kemudian
melakukan autentikasi ke Artifact Registry. Anda harus memiliki izin dalam peran Pembuat Token Akun Layanan (roles/iam.serviceAccountTokenCreator) untuk membuat token dengan cara ini.
Linux
gcloud auth print-access-token \
--impersonate-service-account ACCOUNT | docker login \
-u oauth2accesstoken \
--password-stdin https://LOCATION-docker.pkg.dev
Windows
gcloud auth print-access-token `
--impersonate-service-account ACCOUNT
ya29.8QEQIfY_...
docker login -u oauth2accesstoken -p "ya29.8QEQIfY_..." `
https://LOCATION-docker.pkg.dev
Jika tidak memiliki izin untuk meniru identitas akun layanan, Anda dapat mengaktifkan akun layanan di sesi gcloud CLI, lalu mendapatkan token. Untuk mengetahui detailnya, lihat petunjuk untuk menyiapkan autentikasi token akses.
Menggunakan kunci akun layanan
Untuk kunci akun layanan, Anda menggunakan kunci sebagai sandi dengan perintah docker login.
Misalnya, perintah berikut menggunakan kunci akun layanan berenkode base64
dalam file key.json untuk melakukan autentikasi ke us-west1-docker.pkg.dev.
Linux
cat key.json | docker login -u _json_key_base64 --password-stdin \
https://us-west1-docker.pkg.dev
Windows
docker login -u _json_key_base64 --password-stdin https://us-west1-docker.pkg.dev < key.json
Untuk mengetahui detailnya, lihat petunjuk untuk menyiapkan autentikasi kunci akun layanan.
Mengirim image dengan Docker
Mode repositori: standar
Untuk mengirim image lokal ke repositori Docker standar, Anda memberi tag pada image dengan nama repositori, lalu mengirim image.
Jika repositori Docker Artifact Registry Anda mengaktifkan imutabilitas tag, tag harus selalu mereferensikan ringkasan image yang sama di repositori. Anda tidak dapat menggunakan tag pada versi lain dari image yang sama yang Anda kirim ke repositori. Untuk mengetahui informasi selengkapnya tentang ringkasan image, tag, dan tag imutabilitas, lihat Versi image container.
Untuk image besar, batasan berikut berlaku:
- Waktu upload
- Jika Anda melakukan autentikasi ke Artifact Registry menggunakan token akses, token hanya berlaku selama 60 menit. Jika Anda memperkirakan waktu upload akan melebihi 60 menit, gunakan metode autentikasi lain.
- Ukuran gambar
- Ukuran artefak maksimum adalah 5 TB.
- Artifact Registry tidak mendukung upload Docker yang dipecah menjadi beberapa bagian. Beberapa alat mendukung upload image besar dengan upload yang dipecah menjadi beberapa bagian atau a single upload monolitik tunggal. Anda harus menggunakan upload monolitik untuk mengirim image ke Artifact Registry.
Memberi tag pada image lokal
Pastikan Anda telah melakukan autentikasi ke repositori.
Tentukan nama image. Format nama image lengkap adalah:
LOCATION-docker.pkg.dev/PROJECT-ID/REPOSITORY/IMAGEGanti nilai berikut:
LOCATIONadalah lokasi regional atau multi-regional repositori tempat image disimpan.PROJECT-IDadalah Google Cloud console project ID Anda. Jika project ID Anda berisi titik dua (:), lihat Project dengan cakupan domain.REPOSITORYadalah nama repositori tempat image disimpan.IMAGEadalah nama image. Nama ini dapat berbeda dengan nama lokal image.
Misalnya, pertimbangkan image dengan karakteristik berikut:
- Lokasi repositori:
us-west1 - Nama repositori:
my-repo - Project ID:
my-project - Nama image lokal:
my-image - Nama image target:
test-image
Nama image untuk contoh ini adalah:
us-west1-docker.pkg.dev/my-project/my-repo/test-imageUntuk mengetahui detail tentang format nama image, termasuk cara menangani project dengan cakupan domain, lihat Nama repositori dan image.
Beri tag pada image lokal dengan nama repositori.
docker tag SOURCE-IMAGE LOCATION-docker.pkg.dev/PROJECT-ID/REPOSITORY/IMAGE:TAGGanti SOURCE-IMAGE dengan nama image lokal atau ID image dan TAG dengan tag. Jika Anda tidak menentukan tag, Docker akan menerapkan tag
latestdefault.Jika setelan tag image imutabel diaktifkan, tag harus unik untuk setiap versi image, termasuk tag
latest. Anda tidak dapat mengirim image ke repositori jika tag sudah digunakan oleh versi lain dari image yang sama di repositori. Untuk memverifikasi apakah setelan diaktifkan untuk repositori, jalankan perintah:gcloud artifacts repositories describe REPOSITORY \ --project=PROJECT-ID \ --location=LOCATIONUntuk image contoh dari langkah sebelumnya, Anda akan menggunakan perintah berikut jika image lokal
my-imageberada di direktori saat ini:docker tag my-image us-west1-docker.pkg.dev/my-project/my-repo/test-imageJika Anda ingin menerapkan tag tertentu, gunakan perintah:
docker tag SOURCE-IMAGE LOCATION-docker.pkg.dev/PROJECT-ID/REPOSITORY/IMAGE:TAGUntuk menggunakan tag
stagingdengan image contoh, tambahkan:stagingke perintah:docker tag my-image us-west1-docker.pkg.dev/my-project/my-repo/test-image:staging
Mengirim image yang diberi tag ke Artifact Registry
Pastikan Anda telah melakukan autentikasi ke repositori.
Jika Anda menggunakan
gcloud auth configure-dockerataudocker-credential-gcr configure-dockeruntuk mengonfigurasi klien Docker, pastikan nama host target ada dalam file konfigurasi Docker Anda.Kirim image yang diberi tag dengan perintah:
docker push LOCATION-docker.pkg.dev/PROJECT-ID/REPOSITORY/IMAGEPerintah ini mengirim image yang memiliki tag
latest. Jika Anda ingin mengirim image yang memiliki tag berbeda, gunakan perintah:docker push LOCATION-docker.pkg.dev/PROJECT-ID/REPOSITORY/IMAGE:TAG
Saat Anda mengirim image, image tersebut akan disimpan di repositori yang ditentukan.
Setelah mengirim image, Anda dapat:
Buka Google Cloud konsol untuk melihat image.
Jalankan perintah
gclouduntuk melihat tag image dan ringkasan yang dibuat secara otomatis:gcloud artifacts docker images list \ LOCATION-docker.pkg.dev/PROJECT-ID/REPOSITORY/IMAGE [--include-tags]Output contoh berikut menunjukkan ringkasan image yang dipangkas, tetapi perintah selalu menampilkan ringkasan image lengkap.
IMAGE DIGEST CREATE_TIME UPDATE_TIME us-west1-docker.pkg.dev/my-project/my-repo/my-image sha256:85f... 2019-04-10T15:08:45 2019-04-10T15:08:45 us-west1-docker.pkg.dev/my-project/my-repo/my-image sha256:238... 2019-04-10T17:23:53 2019-04-10T17:23:53 us-west1-docker.pkg.dev/my-project/my-repo/my-image sha256:85f... 2019-04-10T15:08:46 2019-04-10T15:08:46
Mengirim image dengan Podman
Anda dapat mengirim image container dari Podman ke Artifact Registry.
Bangun image Anda dengan Podman menggunakan perintah berikut:
podman build -t IMAGE:latest .
Beri tag pada image Podman lokal Anda untuk Artifact Registry.
Gunakan jalur Artifact Registry lengkap untuk tag. Formatnya sama seperti untuk Docker:
LOCATION-docker.pkg.dev/PROJECT_ID/REPOSITORY_NAME/IMAGE:TAGJalankan perintah berikut:
podman tag IMAGE-NAME LOCATION-docker.pkg.dev/PROJECT-ID/REPOSITORY_NAME/PODMAN-IMAGE:TAG
Autentikasi Podman dengan Artifact Registry. Untuk menggunakannya dengan credential helper, jalankan perintah berikut:
gcloud auth configure-docker LOCATION-docker.pkg.dev
Jika Podman tidak dapat memperoleh kredensial secara otomatis, Anda juga dapat melakukan autentikasi dengan token akses. Jalankan perintah berikut:
gcloud auth print-access-token | podman login -u oauth2accesstoken --password-stdin LOCATION-docker.pkg.dev
Kirim image yang diberi tag ke Artifact Registry:
podman push LOCATION-docker.pkg.dev/PROJECT-ID/REPOSITORY_NAME/IMAGE:TAG
Pastikan tag sama persis dengan tag yang Anda gunakan untuk memberi tag pada image Podman lokal.
Mengambil image dengan Docker
Mode repositori: standar, jarak jauh, virtualPastikan Anda telah melakukan autentikasi ke repositori.
Jika Anda menggunakan
gcloud auth configure-dockerataudocker-credential-gcr configure-dockeruntuk mengonfigurasi klien Docker, pastikan nama host target ada dalam file konfigurasi Docker Anda.Untuk mengambil dari repositori, gunakan perintah:
docker pull LOCATION-docker.pkg.dev/PROJECT-ID/REPOSITORY/IMAGE:TAGatau
docker pull LOCATION-docker.pkg.dev/PROJECT-ID/REPOSITORY/IMAGE@IMAGE-DIGESTGanti nilai berikut:
LOCATIONadalah lokasi regional atau multi-regional repositori tempat image disimpan.PROJECTadalah Google Cloud project ID konsol Anda. Jika project ID Anda berisi titik dua (:), lihat Project dengan cakupan domain.PROJECTadalah Google Cloud project ID konsol Anda.REPOSITORYadalah nama repositori tempat image disimpan.IMAGEadalah nama image di repositori.TAGadalah tag untuk versi image yang ingin Anda ambil.IMAGE-DIGESTadalah nilai hash sha256 dari konten image. Setiap versi image memiliki ringkasan image yang unik. Di Google Cloud konsol, klik image tertentu untuk melihat metadatanya. Ringkasan tercantum sebagai Ringkasan image.
Misalnya, pertimbangkan image dengan karakteristik berikut:
- Lokasi repositori:
us-west1 - Nama repositori:
my-repo - Project ID:
my-project - Nama image:
test-image - Tag:
staging
Perintah untuk mengambil image ini adalah:
docker pull us-west1-docker.pkg.dev/my-project/my-repo/test-image:staging
Docker mendownload image yang ditentukan.
Jika Anda meminta image dari repositori jarak jauh, repositori jarak jauh akan mendownload dan menyimpan image dalam cache dari sumber upstream jika salinan yang di-cache tidak ada.
Jika Anda meminta image dari repositori virtual, Artifact Registry akan menelusuri repositori upstream untuk image yang diminta. Jika Anda meminta versi yang tersedia di lebih dari satu repositori upstream, Artifact Registry akan memilih repositori upstream yang akan digunakan berdasarkan setelan prioritas yang dikonfigurasi untuk repositori virtual.
Misalnya, pertimbangkan repositori virtual dengan setelan prioritas berikut untuk repositori upstream:
main-repo: Prioritas ditetapkan ke100secondary-repo1: Prioritas ditetapkan ke80.secondary-repo2: Prioritas ditetapkan ke80.test-repo: Prioritas ditetapkan ke20.
main-repo memiliki nilai prioritas tertinggi, sehingga repositori virtual selalu menelusurinya terlebih dahulu.
secondary-repo1 dan secondary-repo2 memiliki prioritas yang ditetapkan ke 80. Jika image yang diminta tidak tersedia di main-repo, Artifact Registry akan menelusuri repositori ini berikutnya. Karena keduanya memiliki nilai prioritas yang sama, Artifact Registry dapat memilih untuk menayangkan image dari salah satu repositori jika versi tersebut tersedia di keduanya.
test-repo memiliki nilai prioritas terendah dan akan menayangkan artefak yang disimpan jika tidak ada repositori upstream lain yang memilikinya.
Mengambil image dengan crictl
crictl adalah alat command line yang berguna bagi developer runtime CRI untuk men-debug runtime mereka tanpa perlu menyiapkan komponen Kubernetes. Jika node
Google Kubernetes Engine Anda menggunakan runtime containerd, Anda dapat mengambil image dari
Artifact Registry menggunakan crictl.
Karena crictl terutama merupakan alat pemecahan masalah, beberapa perintah Docker seperti mengirim atau memberi tag pada image tidak tersedia.
Untuk mengambil image dari Artifact Registry:
Di Google Cloud konsol, buka halaman VM Instances.
Gunakan SSH untuk mengakses node yang Anda gunakan untuk memecahkan masalah.
Dapatkan token akses untuk autentikasi dengan repositori.
curl -s "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/token" -H "Metadata-Flavor: Google"
Ambil image menggunakan
crictl pull --credsdan nilaiaccess_tokencrictl pull --creds "oauth2accesstoken:ACCESS_TOKEN" LOCATION-docker.pkg.dev/PROJECT-ID/REPOSITORY/IMAGE:TAG
atau
crictl pull --creds "oauth2accesstoken:ACCESS_TOKEN" LOCATION-docker.pkg.dev/PROJECT-ID/REPOSITORY/IMAGE@IMAGE-DIGEST
Outputnya akan terlihat seperti berikut:
Image is up to date for sha256:0f25067aa9c180176967b4b50ed49eed096d43fa8c17be9a5fa9bff05933bee5
Langkah berikutnya
- Pelajari cara mengelola tag dan menghapus image.
- Jika Anda ingin menjalankan container di Compute Engine, pelajari container di Compute Engine.
- Gunakan
crictluntuk men-debug node Kubernetes - Pelajari cara menggunakan
crictluntuk mengambil image dari repositori Artifact Registry pribadi - Pelajari lebih lanjut cara mengonfigurasi
crictlregistry image