Menyalin image dari Container Registry

Sebagai bagian dari transisi dari Container Registry ke Artifact Registry, Anda dapat menyalin image Container Registry yang ingin disimpan di Artifact Registry.

Ringkasan

Ada beberapa opsi untuk menyalin image dari Container Registry ke Artifact Registry. Sebaiknya salin gambar dengan alat migrasi otomatis karena mendukung penyalinan beberapa project, dapat menyalin gambar meskipun Anda telah mengaktifkan pengalihan, dan dapat menangani lebih banyak gambar daripada metode lainnya.

Untuk mengurangi biaya, lakukan tindakan berikut:

  1. Hapus image lama yang tidak diberi tag sebelum menyalin container ke Artifact Registry.

  2. Jika Anda menyalin image ke repositori Artifact Registry (pkg.dev) standar, nonaktifkan pemindaian otomatis untuk Artifact Registry sebelum menyalin image untuk mencegah biaya pemindaian duplikasi. Anda dapat mengaktifkan kembali pemindaian otomatis setelah menyalin semua gambar.

    Jika menyalin image ke repositori gcr.io di Artifact Registry, Anda tidak perlu menonaktifkan pemindaian otomatis.

    Untuk informasi selengkapnya tentang cara mengontrol biaya yang terkait dengan pemindaian kerentanan, lihat Mengontrol biaya pemindaian kerentanan.

Menghapus image yang tidak diberi tag dari Container Registry

Menghapus image yang tidak diberi tag akan mengurangi biaya penyimpanan di Container Registry serta biaya untuk menyalin image dari Container Registry ke Artifact Registry.

Sejumlah alat tersedia untuk mengidentifikasi dan mengotomatiskan penghapusan gambar yang tidak lagi Anda perlukan. Misalnya, alat gcr-cleaner membantu Anda menemukan dan menghapus image lama berdasarkan kriteria yang berbeda. Alat gcr-cleaner bukan produk resmi Google.

Untuk informasi selengkapnya tentang cara menyiapkan dan menggunakan alat ini, lihat dokumentasi gcr-cleaner.

Menyalin image dengan alat migrasi otomatis (direkomendasikan)

Gunakan alat migrasi otomatis untuk bertransisi dari Container Registry ke repositori gcr.io di Artifact Registry, atau ke repositori Artifact Registry standar, atau untuk menyalin image dari Container Registry ke Artifact Registry.

Alat ini hanya mendukung migrasi dan penyalinan ke multi-region yang sama.

Ikuti petunjuk di bagian Melakukan migrasi secara otomatis ke Artifact Registry untuk menyalin image dari Container Registry ke Artifact Registry.

Menyalin gambar dengan gcrane

Untuk menyalin image ke Artifact Registry, Anda juga dapat menggunakan alat gcrane.

gcrane memungkinkan penyalinan gambar antar-region, tetapi memiliki kelemahan berikut:

  • gcrane lebih lambat daripada alat otomatis.
  • gcrane dibatasi oleh kuota Container Registry.
  • gcrane dapat gagal jika gambar memiliki lebih dari 10.000 versi atau tag.
  • gcrane dapat gagal jika gambar salah dikonfigurasi atau tidak memiliki data.

Persyaratan

Verifikasi persyaratan berikut:

  1. Anda telah Mengaktifkan Artifact Registry di project Google Cloud sumber dan tujuan.

  2. Anda telah membuat repositori Docker di Artifact Registry untuk image yang Anda salin.

  3. Anda memiliki izin yang diperlukan:

    • Storage Object Viewer (roles/storage.objectViewer) atau peran dengan izin yang setara di bucket penyimpanan untuk host Container Registry. Pelajari cara memberikan izin ini.

    • Penulis Artifact Registry (roles/artifactregistry.writer) atau peran dengan izin yang setara untuk repositori Artifact Registry. Pelajari cara memberikan izin ini.

  4. Untuk menggunakan opsi salin cepat, verifikasi persyaratan berikut:

    • Anda harus menggunakan gcrane versi 0.10.0 atau yang lebih tinggi. Petunjuk penyiapan gcrane dalam dokumentasi ini mencakup langkah-langkah untuk mendownload versi terbaru.

      Untuk memeriksa versi penginstalan gcrane yang ada, jalankan perintah:

      gcrane version
      
    • Agen layanan Artifact Registry project tujuan harus memiliki peran Storage Object Viewer (roles/storage.objectViewer) atau peran dengan izin yang setara di project sumber. Jalankan perintah berikut untuk memberikan peran Storage Object Viewer ke agen layanan:

      gcloud projects add-iam-policy-binding SOURCE_PROJECT_ID \
          --member='serviceAccount:service-DEST_PROJECT_NUMBER@gcp-sa-artifactregistry.iam.gserviceaccount.com' \
          --role='roles/storage.objectViewer'
      

      Ganti SOURCE_PROJECT_ID dengan ID (misalnya: "my-project") project Google Cloud dengan host Container Registry Anda.

      Ganti DEST_PROJECT_NUMBER dengan nomor (misalnya: 12345) project Google Cloud dengan repositori Artifact Registry Anda.

Opsi dan biaya lingkungan

Anda dapat menjalankan gcrane dari beberapa lingkungan:

  • Instance Compute Engine - Gunakan opsi ini jika Anda memiliki lebih banyak penampung untuk disalin.

    Biaya:

    • Waktu aktif instance untuk VM Compute Engine.
    • Transfer data jaringan untuk gambar yang Anda salin, kecuali jika Anda menggunakan opsi salin cepat. Untuk meminimalkan biaya:
    • Gunakan instance VM di lokasi yang sama dengan bucket penyimpanan Container Registry.
    • Untuk meminimalkan biaya dan memaksimalkan kecepatan penyalinan, gunakan repositori Artifact Registry di multi-region yang sama dengan Container Registry. Transfer data dalam multi-region yang sama tidak dikenai biaya dan jauh lebih cepat daripada menyalin di seluruh lokasi.
  • Cloud Shell - Opsi untuk menyalin kumpulan kecil sekitar 40 GB atau kurang. Karena gcrane melewati upload lapisan gambar yang sudah diupload, batas ini adalah untuk data baru yang Anda salin.

    Menyalin repositori yang lebih besar dapat menyebabkan Cloud Shell terputus setelah periode waktu tunggu permintaan habis selama 10 menit.

    Biaya: Transfer data jaringan untuk gambar yang Anda salin, kecuali jika Anda menggunakan opsi salin cepat.

    • Anda tidak dapat memilih lokasi sesi Cloud Shell. Untuk memeriksa lokasi sesi saat ini, jalankan perintah:
    curl metadata/computeMetadata/v1/instance/zone
    
    • Untuk meminimalkan biaya dan memaksimalkan kecepatan penyalinan, gunakan repositori Artifact Registry di multi-region yang sama dengan Container Registry. Transfer data dalam multi-region yang sama tidak dikenai biaya dan jauh lebih cepat daripada menyalin di seluruh lokasi.
  • Komputer lokal - Jika tidak dapat menggunakan opsi lain, Anda dapat menjalankan gcrane dari komputer lokal.

    Biaya: Transfer data jaringan untuk gambar yang Anda salin, kecuali jika Anda menggunakan opsi salin cepat

    Untuk meminimalkan biaya dan memaksimalkan kecepatan penyalinan, gunakan repositori Artifact Registry di multi-region yang sama dengan Container Registry. Transfer data dalam multi-region yang sama tidak dikenai biaya dan jauh lebih cepat daripada menyalin di seluruh lokasi.

Menyiapkan Compute Engine

Untuk menyalin image dengan gcrane dari instance VM Compute Engine:

  1. Buat instance VM. Untuk meminimalkan biaya, buat instance di lokasi yang sama dengan registry tempat Anda menyalin.
  2. Secara default, instance VM dikaitkan dengan akun layanan default dan memiliki izin untuk mengambil gambar. Anda harus mengubah cakupan akses agar instance VM dapat mendorong gambar.

    1. Hentikan instance VM. Lihat Menghentikan instance.

    2. Ubah cakupan akses dengan perintah:

      gcloud compute instances set-service-account INSTANCE --scopes=storage-rw
      

      Ganti INSTANCE dengan nama instance VM.

    3. Mulai ulang instance VM. Lihat Memulai instance yang dihentikan.

  3. Hubungkan ke instance VM menggunakan SSH.

  4. Jalankan perintah berikut untuk mendownload gcrane.

    curl -L \
    https://github.com/google/go-containerregistry/releases/latest/download/go-containerregistry_Linux_x86_64.tar.gz \
    -o go-containerregistry.tar.gz
    
  5. Jalankan perintah berikut agar perintah gcrane dapat dieksekusi.

    tar -zxvf go-containerregistry.tar.gz
    chmod +x gcrane
    sudo mv gcrane /usr/local/bin/
    
  6. Jalankan perintah gcrane --help untuk memverifikasi penginstalan.

Sekarang Anda siap menyalin gambar. Untuk melanjutkan:

Menyiapkan Cloud Shell

  1. Buka jendela Cloud Shell.

    Buka Cloud Shell

  2. Tetapkan project default. Ganti PROJECT dengan ID project tempat Container Registry dan Artifact Registry diinstal

    gcloud config set project PROJECT
    
  3. Jalankan perintah berikut untuk mendownload alat gcrane.

    curl -L \
    https://github.com/google/go-containerregistry/releases/latest/download/go-containerregistry_Linux_x86_64.tar.gz \
    -o go-containerregistry.tar.gz
    
  4. Jalankan perintah berikut agar perintah gcrane dapat dieksekusi.

    tar -zxvf go-containerregistry.tar.gz
    chmod +x gcrane
    sudo mv gcrane /usr/local/bin/
    
  5. Jalankan perintah gcrane --help untuk memverifikasi penginstalan.

Sekarang Anda siap menyalin gambar. Untuk melanjutkan:

Menyiapkan komputer lokal

  1. Download gcrane dari repositori GitHub. Misalnya, perintah berikut mendownload distribusi Linux x86-64 dari command line.

    curl -L \
    https://github.com/google/go-containerregistry/releases/latest/download/go-containerregistry_Linux_x86_64.tar.gz \
    -o go-containerregistry.tar.gz
    
  2. Jalankan perintah berikut agar perintah gcrane dapat dieksekusi. Perintah ini mengasumsikan bahwa file yang didownload bernama go-containerregistry.tar.gz.

    tar -zxvf go-containerregistry.tar.gz
    chmod +x gcrane
    sudo mv gcrane /usr/local/bin/
    
  3. Jalankan perintah gcrane --help untuk memverifikasi penginstalan.

Sekarang Anda siap menyalin gambar. Untuk melanjutkan:

Mengidentifikasi gambar yang akan disalin

Setelah menginstal gcrane, Anda dapat mencantumkan image yang ada di Container Registry untuk menemukan image yang ingin disalin.

Untuk menampilkan daftar image yang ada, jalankan perintah:

gcrane ls LOCATION.gcr.io/PROJECT

Untuk mencantumkan tag yang dimiliki image, jalankan perintah:

gcrane ls LOCATION.gcr.io/PROJECT/IMAGE

Untuk menampilkan daftar image secara rekursif di jalur tertentu, jalankan perintah:

gcrane ls -r LOCATION.gcr.io/PROJECT/PATH

Untuk setiap perintah:

  • Ganti LOCATION dengan multi-region registry: asia, eu, atau us.
  • Ganti PROJECT dengan project ID.

Lihat Menyalin gambar untuk mengetahui perintah untuk menyalin gambar Anda.

Menyalin gambar

Anda dapat menyalin setiap image dari Container Registry, semua image di bawah jalur yang ditentukan di lokasi, atau semua image yang disimpan di lokasi.

Menyalin satu gambar

Untuk menyalin satu gambar yang diberi tag, jalankan perintah:

gcrane cp GCR-LOCATION.gcr.io/PROJECT/IMAGE \
AR-LOCATION.pkg.dev/PROJECT/REPOSITORY/IMAGE

Dari mana

  • GCR-LOCATION adalah multi-region host Container Registry: asia, eu, atau us.
  • AR-LOCATION adalah region atau multi-region repositori.
  • PROJECT adalah project ID.
  • REPOSITORY adalah nama repositori Artifact Registry.
  • GCR-IMAGE adalah image yang ingin Anda salin dari Container Registry.
  • AR-IMAGE adalah nama untuk image di Artifact Registry.

Misalnya, perhatikan gambar sumber dan tujuan berikut:

  • Image Container Registry: eu.gcr.io/my-project/my-image:tag1
  • Gambar Artifact Registry: europe-docker.pkg.dev/my-project/my-repo/my-image:tag1

Jalankan perintah berikut untuk menyalin image:

gcrane cp eu.gcr.io/my-project/my-image:tag1 \
europe-docker.pkg.dev/my-project/my-repo/my-image:tag1

Menyalin semua gambar di jalur

Untuk menyalin image secara rekursif di jalur tertentu di Container Registry, jalankan perintah:

gcrane cp -r GCR-LOCATION.gcr.io/PROJECT/GCR-PATH \
AR-LOCATION.pkg.dev/PROJECT/REPOSITORY/AR-PATH

Dari mana

  • GCR-LOCATION adalah multi-region host Container Registry: asia, eu, atau us.
  • AR-LOCATION adalah region atau multi-region repositori.
  • PROJECT adalah project ID.
  • REPOSITORY adalah nama repositori Artifact Registry.
  • GCR-PATH adalah jalur file yang ingin Anda salin.
  • AR-PATH adalah jalur untuk image di repositori Artifact Registry Anda.

Misalnya, pertimbangkan jalur sumber dan tujuan berikut:

  • Jalur Container Registry: eu.gcr.io/my-project/test-images/testing
  • Jalur Artifact Registry: europe-docker.pkg.dev/my-project/my-repo/test-images/testing

Perintah berikut secara rekursif menyalin semua image di test-images/testing ke repositori my-repo:

gcrane cp -r eu.gcr.io/my-project/test-images/testing \
europe-docker.pkg.dev/my-project/my-repo/test-images/testing

Menyalin semua image dari lokasi Container Registry

Untuk menyalin semua image dari multi-region Container Registry, jalankan perintah:

gcrane cp -r GCR-LOCATION.gcr.io/PROJECT \
AR-LOCATION.pkg.dev/PROJECT/REPOSITORY

Dari mana

  • GCR-LOCATION adalah multi-region host Container Registry: asia, eu, atau us.
  • AR-LOCATION adalah region atau multi-region repositori.
  • PROJECT adalah project ID.
  • REPOSITORY adalah nama repositori Artifact Registry.

Jika Anda ingin menyalin image untuk lebih dari satu lokasi Container Registry dalam project, jalankan perintah satu kali untuk setiap host.

Misalnya, pertimbangkan registry sumber dan repositori Artifact Registry target berikut. Dalam contoh ini, Container Registry dan Artifact Registry berada dalam project yang berbeda.

  • Host Container Registry: eu.gcr.io/my-project
  • Gambar Artifact Registry: europe-docker.pkg.dev/new-project/my-repo

Perintah berikut menyalin semua image dari multi-region eu di project my-project ke repositori my-repo di project new-project.

gcrane cp -r eu.gcr.io/my-project \
europe-docker.pkg.dev/new-project/my-repo

Menyalin image dengan Docker

Tidak seperti metode penyalinan gcrane dan gcloud, pendekatan ini adalah proses dua langkah.

  1. Mengambil image dari Container Registry
  2. Kirim image ke repositori Artifact Registry Anda.

Persyaratan

Verifikasi persyaratan berikut:

  1. Anda telah membuat repositori Docker di Artifact Registry untuk image yang Anda salin.

  2. Anda memiliki izin yang diperlukan:

    • Storage Object Viewer (roles/storage.objectViewer) atau peran dengan izin yang setara di bucket penyimpanan untuk host Container Registry. Pelajari cara memberikan izin ini.

    • Penulis Artifact Registry (roles/artifactregistry.writer) atau peran dengan izin yang setara untuk repositori Artifact Registry. Pelajari cara memberikan izin ini.

  3. Anda telah mengonfigurasi Docker untuk melakukan autentikasi ke Container Registry dan Artifact Registry.

Biaya

Saat mengambil gambar, Anda akan ditagih untuk transfer data jaringan. Harga spesifik bergantung pada tujuan perintah pull Anda. Misalnya, jika Anda mengambil image dari sesi Cloud Shell, harga adalah untuk transfer data jaringan dalam Google Cloud. Jika Anda menarik image ke komputer di luar Google Cloud, harga untuk transfer data jaringan umum.

Perintah Docker yang Anda gunakan untuk memberi tag, mengirim, dan menarik image di Artifact Registry mirip dengan yang Anda gunakan di Container Registry. Ada dua perbedaan utama:

  • Nama host untuk repositori Docker Artifact Registry menyertakan awalan lokasi, diikuti dengan -docker.pkg.dev. Contohnya meliputi australia-southeast1-docker.pkg.dev, europe-north1-docker.pkg.dev, dan europe-docker.pkg.dev.
  • Karena Artifact Registry mendukung beberapa repositori Docker dalam satu project, Anda harus menentukan nama repositori dalam perintah.

Untuk menyalin image ke Artifact Registry dengan Docker, ambil image dari Container Registry, lalu kirim ke repositori Artifact Registry Anda.

Misalnya, pertimbangkan image Container Registry di multi-region eu dan yang ingin Anda salin ke repositori Artifact Registry di region europe.

  • Image Container Registry: eu.gcr.io/my-project/my-image:tag1
  • Gambar Artifact Registry: europe-docker.pkg.dev/my-project/my-repo/my-image:tag1

Perintah berikut mengambil image dari Container Registry.

docker pull eu.gcr.io/my-project/my-image:tag1

Perintah berikut akan mengirim image ke repositori Artifact Registry yang bernama my-repo.

docker push europe-north1-docker.pkg.dev/my-project/my-repo/my-image

Anda juga dapat mengirim image ke repositori Artifact Registry yang Anda siapkan di project lain. Contoh ini mendorong image sumber yang sama ke repositori my-repo dalam project new-project.

docker push europe-north1-docker.pkg.dev/new-project/my-repo/my-image

Untuk mengetahui detail tentang cara mengirim dan mengambil image di Artifact Registry, lihat Mengirim dan mengambil image.

Menyalin image dengan gcloud

Gunakan perintah gcloud container images add-tag untuk menyalin image dari Container Registry ke repositori Artifact Registry Anda.

Persyaratan

Verifikasi persyaratan berikut:

  1. Anda telah membuat repositori Docker di Artifact Registry untuk image yang Anda salin.

  2. Anda memiliki izin yang diperlukan:

    • Storage Object Viewer (roles/storage.objectViewer) atau peran dengan izin yang setara di bucket penyimpanan untuk host Container Registry. Pelajari cara memberikan izin ini.

    • Penulis Artifact Registry (roles/artifactregistry.writer) atau peran dengan izin yang setara untuk repositori Artifact Registry. Pelajari cara memberikan izin ini.

Biaya

Jika Container Registry berada di lokasi yang berbeda dengan repositori Artifact Registry Anda, biaya transfer data jaringan akan berlaku untuk image yang Anda salin. Jika kedua layanan berada di lokasi yang sama, transfer data jaringan tidak dikenai biaya.

Jalankan perintah berikut untuk menyalin image dari Container Registry ke Artifact Registry:

gcloud container images add-tag GCR-IMAGE AR-IMAGE

Dari mana

  • GCR-IMAGE adalah jalur lengkap ke image Container Registry.
  • AR-IMAGE adalah jalur lengkap untuk image di repositori Artifact Registry.

Misalnya, perhatikan gambar sumber dan tujuan berikut:

  • Image Container Registry: eu.gcr.io/my-project/my-image:tag1
  • Gambar Artifact Registry: europe-docker.pkg.dev/my-project/my-repo/my-image:tag1

Perintah ini menyalin image dari Container Registry di multi-region eu ke repositori my-repo di multi-region europe.

gcloud container images add-tag eu.gcr.io/my-project/my-image:tag1 \
europe-docker.pkg.dev/my-project/my-repo/my-image:tag1

Anda juga dapat menyalin image ke repositori Artifact Registry yang Anda siapkan di project lain. Contoh ini menyalin image sumber yang sama ke repositori my-repo dalam project new-project.

gcloud container images add-tag eu.gcr.io/my-project/my-image:tag1 \
europe-docker.pkg.dev/new-project/my-repo/my-image:tag1

Langkah selanjutnya