Mendorong dan menarik gambar

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

  1. Jika repositori target tidak ada, buat repositori baru.
  2. Anda harus memiliki setidaknya akses Penulis Artifact Registry akses ke repositori.
  3. Untuk mengirim image dengan Docker, instal Docker jika belum diinstal.
  4. Untuk mengirim image dengan Podman
  5. 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:

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.dev
    
  • Credential 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

  1. Pastikan Anda telah melakukan autentikasi ke repositori.

  2. Tentukan nama image. Format nama image lengkap adalah:

    LOCATION-docker.pkg.dev/PROJECT-ID/REPOSITORY/IMAGE
    

    Ganti nilai berikut:

    • LOCATION adalah lokasi regional atau multi-regional repositori tempat image disimpan.
    • PROJECT-ID adalah Google Cloud console project ID Anda. Jika project ID Anda berisi titik dua (:), lihat Project dengan cakupan domain.
    • REPOSITORY adalah nama repositori tempat image disimpan.
    • IMAGE adalah 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-image
    

    Untuk mengetahui detail tentang format nama image, termasuk cara menangani project dengan cakupan domain, lihat Nama repositori dan image.

  3. Beri tag pada image lokal dengan nama repositori.

    docker tag SOURCE-IMAGE LOCATION-docker.pkg.dev/PROJECT-ID/REPOSITORY/IMAGE:TAG
    

    Ganti SOURCE-IMAGE dengan nama image lokal atau ID image dan TAG dengan tag. Jika Anda tidak menentukan tag, Docker akan menerapkan tag latest default.

    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=LOCATION
    

    Untuk image contoh dari langkah sebelumnya, Anda akan menggunakan perintah berikut jika image lokal my-image berada di direktori saat ini:

    docker tag my-image us-west1-docker.pkg.dev/my-project/my-repo/test-image
    

    Jika Anda ingin menerapkan tag tertentu, gunakan perintah:

    docker tag SOURCE-IMAGE LOCATION-docker.pkg.dev/PROJECT-ID/REPOSITORY/IMAGE:TAG
    

    Untuk menggunakan tag staging dengan image contoh, tambahkan :staging ke 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

  1. Pastikan Anda telah melakukan autentikasi ke repositori.

    Jika Anda menggunakan gcloud auth configure-docker atau docker-credential-gcr configure-docker untuk mengonfigurasi klien Docker, pastikan nama host target ada dalam file konfigurasi Docker Anda.

  2. Kirim image yang diberi tag dengan perintah:

    docker push LOCATION-docker.pkg.dev/PROJECT-ID/REPOSITORY/IMAGE
    

    Perintah 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 gcloud untuk 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.

  1. Bangun image Anda dengan Podman menggunakan perintah berikut:

     podman build -t IMAGE:latest .
    

  2. 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:TAG

    Jalankan perintah berikut:

     podman tag IMAGE-NAME LOCATION-docker.pkg.dev/PROJECT-ID/REPOSITORY_NAME/PODMAN-IMAGE:TAG 
    
  3. 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
    
  4. 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, virtual
  1. Pastikan Anda telah melakukan autentikasi ke repositori.

    Jika Anda menggunakan gcloud auth configure-docker atau docker-credential-gcr configure-docker untuk mengonfigurasi klien Docker, pastikan nama host target ada dalam file konfigurasi Docker Anda.

  2. Untuk mengambil dari repositori, gunakan perintah:

    docker pull LOCATION-docker.pkg.dev/PROJECT-ID/REPOSITORY/IMAGE:TAG
    

    atau

    docker pull LOCATION-docker.pkg.dev/PROJECT-ID/REPOSITORY/IMAGE@IMAGE-DIGEST
    

    Ganti nilai berikut:

    • LOCATION adalah lokasi regional atau multi-regional repositori tempat image disimpan.
    • PROJECT adalah Google Cloud project ID konsol Anda. Jika project ID Anda berisi titik dua (:), lihat Project dengan cakupan domain.
    • PROJECT adalah Google Cloud project ID konsol Anda.
    • REPOSITORY adalah nama repositori tempat image disimpan.
    • IMAGE adalah nama image di repositori.
    • TAG adalah tag untuk versi image yang ingin Anda ambil.
    • IMAGE-DIGEST adalah 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 ke 100
  • secondary-repo1: Prioritas ditetapkan ke 80.
  • secondary-repo2: Prioritas ditetapkan ke 80.
  • test-repo: Prioritas ditetapkan ke 20.

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:

  1. Di Google Cloud konsol, buka halaman VM Instances.

    Buka Instance VM

  2. Gunakan SSH untuk mengakses node yang Anda gunakan untuk memecahkan masalah.

  3. Dapatkan token akses untuk autentikasi dengan repositori.

    curl -s "http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/default/token" -H "Metadata-Flavor: Google"
  4. Ambil image menggunakan crictl pull --creds dan nilai access_token

    crictl 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