Menyalin image di antara repositori

Anda dapat menggunakan alat gcrane untuk menyalin image di antara repositori Docker di Artifact Registry.

Anda juga dapat menggunakan alat ini untuk menyalin image dari Container Registry ke Artifact Registry.

Sebelum memulai

Verifikasi persyaratan berikut:

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

  2. Anda memiliki izin yang diperlukan:

    • Artifact Registry Reader (roles/storage.objectViewer) atau peran dengan izin yang setara untuk repositori tempat Anda menyalinnya.

    • Artifact Registry Writer (roles/artifactregistry.writer) atau peran dengan izin yang setara untuk repositori target.

Ringkasan

Alat gcrane menyederhanakan penyalinan di seluruh repositori dengan dukungan untuk:

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

Menghapus gambar yang tidak digunakan

Menghapus gambar yang tidak digunakan sebelum melakukan operasi penyalinan dapat membantu Anda mengurangi biaya penyimpanan.

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

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

Menyiapkan gcrane

Anda dapat menjalankan gcrane dari beberapa lingkungan:

  • Instance Compute Engine - Gunakan opsi ini jika Anda memiliki jumlah container yang lebih besar yang akan disalin.

    Biaya: Waktu beroperasi instance untuk VM Compute Engine. Jika instance VM berada di lokasi yang berbeda dengan repositori sumber, biaya traffic keluar jaringan mungkin berlaku untuk image yang Anda salin.

  • Cloud Shell - Opsi untuk menyalin set kecil berukuran sekitar 40 GB atau kurang. Karena alat gcrane melewati 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 selama 10 menit.

    Biaya: Jika instance Cloud Shell berada di lokasi yang berbeda dengan repositori sumber, biaya traffic keluar jaringan mungkin berlaku untuk image yang Anda salin. Anda tidak dapat memilih lokasi sesi Cloud Shell. Untuk memeriksa lokasi sesi saat ini, jalankan perintah:

    curl metadata/computeMetadata/v1/instance/zone
    

Sebaiknya gunakan alat gcrane versi terbaru untuk memanfaatkan semua fitur dan peningkatan yang tersedia. Petunjuk penyiapan di bagian berikut mencakup langkah-langkah untuk mendownload versi terbaru.

Untuk memeriksa versi penginstalan gcrane yang ada, jalankan perintah:

gcrane version

Menyiapkan Compute Engine

Untuk menyalin gambar 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 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 komputer 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 diberi nama 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 alat gcrane, Anda dapat mencantumkan gambar yang ada di repositori sumber untuk menemukan gambar yang ingin disalin.

Untuk menampilkan daftar gambar yang ada, jalankan perintah:

gcrane ls LOCATION-docker.pkg.dev/PROJECT/REPOSITORY

Untuk menampilkan daftar tag yang dimiliki gambar, jalankan perintah:

gcrane ls LOCATION-docker.pkg.dev/PROJECT/IMAGE

Untuk mencantumkan gambar secara berulang pada jalur tertentu, jalankan perintah:

gcrane ls -r LOCATION-docker.pkg.dev/PROJECT/PATH

Untuk setiap perintah:

  • Ganti LOCATION dengan lokasi repositori.
  • Ganti PROJECT dengan project ID.
  • Ganti PATH dengan jalur yang akan disalin.

Lihat Menyalin gambar untuk perintah penyalinan gambar Anda.

Menyalin gambar

Anda dapat menyalin gambar satu per satu atau kumpulan gambar dengan perintah gcrane cp.

Untuk menyalin satu gambar, jalankan perintah:

gcrane cp LOCATION1-docker.pkg.dev/PROJECT1/REPOSITORY1/IMAGE1 \
LOCATION2-docker.pkg.dev/PROJECT2/REPOSITORY2/IMAGE2

Untuk menyalin gambar secara rekursif di jalur tertentu dalam repositori, jalankan perintah:

gcrane cp -r LOCATION1-docker.pkg.dev/PROJECT1/REPOSITORY1/IMAGE1/PATH1 \
LOCATION2-docker.pkg.dev/PROJECT2/REPOSITORY2/IMAGE2/PATH2

Untuk menyalin semua gambar dalam repositori, jalankan perintah:

gcrane cp -r LOCATION1-docker.pkg.dev/PROJECT1/REPOSITORY1 \
LOCATION2-docker.pkg.dev/PROJECT2/REPOSITORY2

Ganti nilai berikut:

  • LOCATION1 adalah lokasi repositori sumber.
  • LOCATION2 adalah lokasi repositori target.
  • PROJECT1 adalah ID project Google Cloud yang terkait dengan repositori sumber.
  • PROJECT2 adalah ID project Google Cloud yang terkait dengan repositori target.
  • REPOSITORY1 adalah nama repositori sumber.
  • REPOSITORY2 adalah nama repositori target.
  • IMAGE1 adalah gambar yang ingin Anda salin.
  • IMAGE2 adalah nama untuk image di repositori target.

Contoh

Perintah berikut menyalin my-image:tag1 dari repositori repo1 ke repositori repo2 dalam project dan region yang sama.

gcrane cp us-east1-docker.pkg.dev/my-project/repo1/my-image:tag1 \
us-east1-docker.pkg.dev/my-project/repo2/my-image:tag1

Perintah berikut secara berulang menyalin semua gambar di bagian test-images/testing dalam repo1 repositori ke jalur yang sama pada repositori repo2.

gcrane cp -r us-east1-docker.pkg.dev/my-project/repo1/test-images/testing \
us-east1-docker.pkg.dev/my-project/repo2/test-images/testing

Perintah berikut menyalin semua image dari repositori my-repo dalam project dev-project ke my-repo repositori dalam project lain yang disebut prod-project.

gcrane cp -r us-east1-docker.pkg.dev/dev-project/my-repo \
us-east1-docker.pkg.dev/prod-project/my-repo