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 alat ini mendukung penyalinan beberapa project, dapat menyalin gambar meskipun Anda telah mengaktifkan pengalihan, dan dapat menangani jumlah gambar yang lebih besar daripada metode lain. Jika tidak memiliki lebih dari 10.000 gambar, dan belum mengaktifkan pengalihan, Anda dapat menggunakan alat gcrane yang juga mendukung penyalinan kumpulan gambar dengan satu perintah.

Untuk mengurangi biaya, lakukan hal berikut:

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

  2. Jika Anda menyalin image ke repositori Artifact Registry standar (pkg.dev), nonaktifkan pemindaian otomatis untuk Artifact Registry sebelum menyalin image guna mencegah biaya pemindaian duplikat. 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 mengetahui informasi lebih lanjut mengenai pengendalian biaya terkait pemindaian kerentanan, lihat Mengontrol biaya pemindaian kerentanan.

Menghapus gambar 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 Anda perlukan lagi. Misalnya, alat gcr-cleaner membantu Anda menemukan dan menghapus image lama berdasarkan kriteria yang berbeda. Alat gcr-cleaner bukan produk Google resmi.

Untuk mengetahui informasi selengkapnya tentang penyiapan dan penggunaan alat ini, lihat dokumentasi gcr-cleaner.

Menyalin gambar dengan alat migrasi otomatis

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 Anda dari Container Registry ke Artifact Registry.

Ikuti petunjuk di bagian Automatically migration to Artifact Registry untuk menyalin image Anda dari Container Registry ke Artifact Registry.

Menyalin gambar dengan gcrane

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

gcrane menawarkan beberapa manfaat dibandingkan menyalin image dengan Docker, termasuk:

  • Menyalin kumpulan gambar dengan satu perintah, termasuk semua gambar pada jalur yang ditentukan atau semua gambar yang disimpan di host multi-regional dalam project Anda.
  • Melewati lapisan gambar yang sudah diupload.
  • Opsi salinan cepat saat menyalin image antara Container Registry dan Artifact Registry dalam multi-region Google Cloud yang sama.

    Opsi salin cepat juga merupakan metode penyalinan yang paling murah. Karena opsi ini tidak bergantung pada pengambilan dan pengiriman image, tidak ada biaya untuk transfer data jaringan dari Container Registry selama operasi penyalinan.

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.

    • Artifact Registry Writer (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
      
    • Akun layanan yang dikelola Google Artifact Registry project tujuan harus memiliki peran Storage Object Viewer (roles/storage.objectViewer) atau peran dengan izin yang setara dalam project sumber. Jalankan perintah berikut untuk memberikan peran Storage Object Viewer ke akun 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 jumlah container yang lebih besar untuk disalin.

    Biaya:

    • Waktu beroperasi 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 lintas lokasi.
  • Cloud Shell - Opsi untuk menyalin set kecil berukuran sekitar 40 GB atau kurang. Karena gcrane melewati proses upload lapisan gambar yang sudah diupload, batas ini ditujukan untuk data baru yang Anda salin.

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

    Biaya: Transfer data jaringan untuk gambar yang Anda salin, kecuali jika Anda menggunakan opsi menyalin 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 lintas lokasi.
  • Mesin 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 lintas lokasi.

Menyiapkan Compute Engine

Untuk menyalin image dengan gcrane dari instance VM Compute Engine:

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

    1. Hentikan instance VM. Baca bagian 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 untuk 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 untuk menyalin gambar. Untuk melanjutkan:

Menyiapkan mesin lokal

  1. Download gcrane dari repositori GitHub. Misalnya, perintah berikut akan 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 untuk menyalin gambar. Untuk melanjutkan:

Mengidentifikasi gambar yang akan disalin

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

Untuk menampilkan daftar gambar yang ada, jalankan perintah:

gcrane ls LOCATION.gcr.io/PROJECT

Untuk menampilkan daftar tag yang dimiliki gambar, jalankan perintah:

gcrane ls LOCATION.gcr.io/PROJECT/IMAGE

Untuk menampilkan daftar gambar secara rekursif pada jalur tertentu, jalankan perintah:

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

Untuk setiap perintah:

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

Lihat Menyalin gambar untuk mengetahui perintah tentang cara menyalin gambar Anda.

Menyalin gambar

Anda dapat menyalin masing-masing image dari Container Registry, semua image pada jalur yang ditentukan di lokasi, atau semua image yang disimpan di suatu 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 dari 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
  • Image 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 pada jalur

Untuk menyalin gambar secara rekursif pada 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 dari 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, perhatikan 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 berulang menyalin semua gambar pada 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 gambar 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 dari 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 di project, jalankan perintah satu kali untuk setiap host.

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

  • Host Container Registry: eu.gcr.io/my-project
  • Image 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.

    • Artifact Registry Writer (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 dikenai biaya untuk transfer data jaringan. Harga spesifik bergantung pada tujuan perintah pull Anda. Misalnya, jika Anda mengambil gambar dari sesi Cloud Shell, harganya adalah untuk transfer data jaringan dalam Google Cloud. Jika Anda menarik image ke mesin di luar Google Cloud, harga untuk transfer data jaringan umum.

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

  • Nama host untuk repositori Docker Artifact Registry menyertakan awalan lokasi, yang diikuti dengan -docker.pkg.dev. Contohnya mencakup 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
  • Image 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 mengirim image ke repositori Artifact Registry 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 mengirim 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 pengiriman dan pengambilan image di Artifact Registry, lihat Mengirim dan mengambil image.

Menyalin gambar 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.

    • Artifact Registry Writer (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, biaya transfer data jaringan akan berlaku untuk image yang Anda salin. Jika kedua layanan berada di lokasi yang sama, transfer data jaringan tidak dikenakan 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
  • Image Artifact Registry: europe-docker.pkg.dev/my-project/my-repo/my-image:tag1

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

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 gambar sumber yang sama ke repositori my-repo di 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