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 Cloud de Confiance by S3NS lingkungan runtime, lihat Men-deploy ke Cloud de Confiance.

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 host registry ke file konfigurasi Docker, sehingga Anda harus menambahkan host Anda ke file.

Jalankan credential helper untuk menambahkan host. Misalnya, perintah berikut menambahkan u-france-east1-docker.s3nsregistry.fr.

  • Credential helper gcloud CLI:

    gcloud auth configure-docker u-france-east1-docker.s3nsregistry.fr
    
  • Credential helper mandiri

    docker-credential-gcr configure-docker u-france-east1-docker.s3nsregistry.fr
    

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.s3nsregistry.fr

Windows

gcloud auth print-access-token `
--impersonate-service-account  ACCOUNT

ya29.8QEQIfY_...

docker login -u oauth2accesstoken -p "ya29.8QEQIfY_..." `
https://LOCATION-docker.s3nsregistry.fr

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 u-france-east1-docker.s3nsregistry.fr.

Linux

cat key.json | docker login -u _json_key_base64 --password-stdin \
https://u-france-east1-docker.s3nsregistry.fr

Windows

docker login -u _json_key_base64 --password-stdin https://u-france-east1-docker.s3nsregistry.fr < 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 waktu upload Anda diperkirakan melebihi 60 menit, gunakan metode autentikasi lain.
Ukuran image
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.s3nsregistry.fr/PROJECT-ID/REPOSITORY/IMAGE
    

    Ganti nilai berikut:

    Misalnya, pertimbangkan image dengan karakteristik berikut:

    • Lokasi repositori: u-france-east1
    • Nama repositori: my-repo
    • Project ID: my-project
    • Nama image lokal: my-image
    • Nama image target: test-image

    Nama image untuk contoh ini adalah:

    u-france-east1-docker.s3nsregistry.fr/my-project/my-repo/test-image
    

    Untuk mengetahui detail tentang format nama image, lihat Nama repositori dan image.

  3. Beri tag pada image lokal dengan nama repositori.

    docker tag SOURCE-IMAGE LOCATION-docker.s3nsregistry.fr/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 u-france-east1-docker.s3nsregistry.fr/my-project/my-repo/test-image
    

    Jika Anda ingin menerapkan tag tertentu, gunakan perintah:

    docker tag SOURCE-IMAGE LOCATION-docker.s3nsregistry.fr/PROJECT-ID/REPOSITORY/IMAGE:TAG
    

    Untuk menggunakan tag staging dengan image contoh, tambahkan :staging ke perintah:

    docker tag my-image u-france-east1-docker.s3nsregistry.fr/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.s3nsregistry.fr/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.s3nsregistry.fr/PROJECT-ID/REPOSITORY/IMAGE:TAG
    

Saat Anda mengirim image, image tersebut akan disimpan di repositori yang ditentukan.

Setelah mengirim image, Anda dapat:

  • Buka Cloud de Confiance konsol untuk melihat image.

  • Jalankan perintah gcloud untuk melihat tag image dan ringkasan yang dibuat secara otomatis:

    gcloud artifacts docker images list \
    LOCATION-docker.s3nsregistry.fr/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
      u-france-east1-docker.s3nsregistry.fr/my-project/my-repo/my-image  sha256:85f...  2019-04-10T15:08:45  2019-04-10T15:08:45
      u-france-east1-docker.s3nsregistry.fr/my-project/my-repo/my-image  sha256:238...  2019-04-10T17:23:53  2019-04-10T17:23:53
      u-france-east1-docker.s3nsregistry.fr/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. Buat 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
  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.s3nsregistry.fr/PROJECT-ID/REPOSITORY/IMAGE:TAG
    

    atau

    docker pull LOCATION-docker.s3nsregistry.fr/PROJECT-ID/REPOSITORY/IMAGE@IMAGE-DIGEST
    

    Ganti nilai berikut:

    • LOCATION adalah lokasi regional repositori tempat image disimpan.
    • PROJECT adalah Cloud de Confiance project ID konsol Anda.
    • PROJECT adalah Cloud de Confiance 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 Cloud de Confiance konsol, klik image tertentu untuk melihat metadatanya. Ringkasan tercantum sebagai Ringkasan image.

    Misalnya, pertimbangkan image dengan karakteristik berikut:

    • Lokasi repositori: u-france-east1
    • Nama repositori: my-repo
    • Project ID: my-project
    • Nama image: test-image
    • Tag: staging

    Perintah untuk mengambil image ini adalah:

    docker pull u-france-east1-docker.s3nsregistry.fr/my-project/my-repo/test-image:staging
    

Docker mendownload image yang ditentukan.

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 Cloud de Confiance 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.s3nsregistry.fr/PROJECT-ID/REPOSITORY/IMAGE:TAG

    atau

    crictl pull --creds "oauth2accesstoken:ACCESS_TOKEN" LOCATION-docker.s3nsregistry.fr/PROJECT-ID/REPOSITORY/IMAGE@IMAGE-DIGEST

    Outputnya akan terlihat seperti berikut:

    Image is up to date for sha256:0f25067aa9c180176967b4b50ed49eed096d43fa8c17be9a5fa9bff05933bee5

Langkah berikutnya