Anda dapat menggunakan alat gcrane
untuk menyalin image antar-repositori Docker di
Artifact Registry.
Sebelum memulai
Verifikasi persyaratan berikut:
Anda telah membuat repositori Docker target di Artifact Registry untuk image yang Anda salin.
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:
- Buat instance VM. Untuk meminimalkan biaya, buat instance di lokasi yang sama dengan registry tempat Anda menyalin.
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.
Hentikan instance VM. Lihat Menghentikan instance.
Ubah cakupan akses dengan perintah:
gcloud compute instances set-service-account INSTANCE --scopes=storage-rw
Ganti INSTANCE dengan nama instance VM.
Mulai ulang instance VM. Lihat Memulai instance yang dihentikan.
Hubungkan ke instance VM menggunakan SSH.
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
Jalankan perintah berikut agar perintah
gcrane
dapat dieksekusi.tar -zxvf go-containerregistry.tar.gz chmod +x gcrane sudo mv gcrane /usr/local/bin/
Jalankan perintah
gcrane --help
untuk memverifikasi penginstalan.
Sekarang Anda siap menyalin gambar. Untuk melanjutkan:
Menyiapkan Cloud Shell
Buka jendela Cloud Shell.
Tetapkan project default. Ganti PROJECT dengan ID project tempat Container Registry dan Artifact Registry diinstal
gcloud config set project PROJECT
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
Jalankan perintah berikut agar perintah
gcrane
dapat dieksekusi.tar -zxvf go-containerregistry.tar.gz chmod +x gcrane sudo mv gcrane /usr/local/bin/
Jalankan perintah
gcrane --help
untuk memverifikasi penginstalan.
Sekarang Anda siap menyalin gambar. Untuk melanjutkan:
Menyiapkan komputer lokal
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
Jalankan perintah berikut agar perintah
gcrane
dapat dieksekusi. Perintah ini mengasumsikan bahwa file yang didownload bernamago-containerregistry.tar.gz
.tar -zxvf go-containerregistry.tar.gz chmod +x gcrane sudo mv gcrane /usr/local/bin/
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