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:
Hapus image lama yang tidak diberi tag sebelum menyalin container ke Artifact Registry.
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:
Anda telah Mengaktifkan Artifact Registry di project Google Cloud sumber dan tujuan.
Anda telah membuat repositori Docker di Artifact Registry untuk image yang Anda salin.
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.
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:
- 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 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
, atauus
. - 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
, atauus
. - 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
, atauus
. - 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
, atauus
. - 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.
- Mengambil image dari Container Registry
- Kirim image ke repositori Artifact Registry Anda.
Persyaratan
Verifikasi persyaratan berikut:
Anda telah membuat repositori Docker di Artifact Registry untuk image yang Anda salin.
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.
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 meliputiaustralia-southeast1-docker.pkg.dev
,europe-north1-docker.pkg.dev
, daneurope-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:
Anda telah membuat repositori Docker di Artifact Registry untuk image yang Anda salin.
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
- Pelajari lebih lanjut cara bertransisi dari Container Registry ke Artifact Registry, termasuk perbandingan fitur dan perintah gcloud CLI.
- Pelajari Perubahan untuk Docker.
- Pelajari Perubahan untuk proses build dan deployment di Google Cloud.