Menyalin gambar antar-repositori

Anda dapat menggunakan alat gcrane untuk menyalin image antar-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 menyalin.

    • Penulis Artifact Registry (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 di 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 Anda melakukan operasi salinan dapat membantu Anda mengurangi biaya penyimpanan.

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.

Menyiapkan gcrane

Anda dapat menjalankan gcrane dari lingkungan berikut:

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

    Biaya: Waktu aktif 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 kumpulan kecil sekitar 40 GB atau kurang. Karena alat gcrane melewati upload lapisan gambar yang sudah diupload, batas ini berlaku 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: Jika instance Cloud Shell berada di lokasi yang berbeda dengan repositori sumber, biaya 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 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 alat gcrane, Anda dapat mencantumkan gambar yang ada di repositori sumber untuk menemukan gambar yang ingin disalin.

Untuk menampilkan daftar image yang ada, jalankan perintah:

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

Untuk mencantumkan tag yang dimiliki image, jalankan perintah:

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

Untuk menampilkan daftar image secara rekursif di 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 mengetahui perintah untuk menyalin gambar Anda.

Menyalin gambar

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

Untuk menyalin satu image, jalankan perintah:

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

Untuk menyalin image 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 image 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 project ID Google Cloud yang terkait dengan repositori sumber.
  • PROJECT2 adalah project ID 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-west1-docker.pkg.dev/my-project/repo1/my-image:tag1 \
us-west1-docker.pkg.dev/my-project/repo2/my-image:tag1

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

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

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

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