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:
Hapus image lama yang tidak diberi tag sebelum menyalin container ke Artifact Registry.
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:
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.Artifact Registry Writer (
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
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:
- Membuat instance VM. Untuk meminimalkan biaya, buat instance di lokasi yang sama dengan registry tempat Anda menyalin.
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.
Hentikan instance VM. Baca bagian 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 untuk 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 untuk menyalin gambar. Untuk melanjutkan:
Menyiapkan mesin lokal
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
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 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
, atauus
. - 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
, 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
- 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
, 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, 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
, 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 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.
- 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.Artifact Registry Writer (
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 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 mencakupaustralia-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
- 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:
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.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
- 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 mem-build dan men-deploy di Google Cloud.