Saya menggunakan docker registry v1 dan saya tertarik untuk bermigrasi ke versi yang lebih baru, v2. Tapi saya perlu beberapa cara untuk mendapatkan daftar gambar yang ada di registri; misalnya dengan registry v1 saya dapat menjalankan permintaan GET http://myregistry:5000/v1/search?
dan hasilnya adalah:
{
"num_results": 2,
"query": "",
"results": [
{
"description": "",
"name": "deis/router"
},
{
"description": "",
"name": "deis/database"
}
]
}
Tapi saya tidak dapat menemukan sesuatu yang mirip di dokumentasi resmi untuk mendapatkan daftar gambar pada registri. Adakah yang tahu cara melakukannya di versi baru v2?
docker
docker-registry
kikicarbonell
sumber
sumber
Jawaban:
Untuk versi Registry V2 terbaru (per 2015-07-31), Anda bisa mendapatkan gambar ini dari DockerHub:
Daftar semua repositori (gambar yang efektif):
Daftar semua tag untuk repositori:
sumber
http://<registry-url>/v2/_catalog?n=<count>
dengan hitung misalnya 2000.curl -u <user>:<pass> -X GET ...
Anda dapat mencari di
sumber
Dapatkan katalog
Default, registry api mengembalikan 100 entri katalog, ada kode :
Ketika Anda meringkuk api registri:
curl --cacert domain.crt https://your.registry:5000/v2/_catalog
itu setara dengan:
curl --cacert domain.crt https://your.registry:5000/v2/_catalog?n=100
Ini adalah metod pagination.
Ketika jumlah entri melebihi 100, Anda dapat melakukannya dengan dua cara:
Pertama : berikan angka yang lebih besar
curl --cacert domain.crt https://your.registry:5000/v2/_catalog?n=2000
Sencond : uraikan url tautan berikutnya
curl --cacert domain.crt https://your.registry:5000/v2/_catalog
Elemen tautan yang terkandung dalam tajuk respons:
curl --cacert domain.crt https://your.registry:5000/v2/_catalog
header respons:
Link: </v2/_catalog?last=pro-octopus-ws&n=100>; rel="next"
Elemen tautan memiliki entri terakhir dari permintaan ini, maka Anda dapat meminta 'halaman' berikutnya:
curl --cacert domain.crt https://your.registry:5000/v2/_catalog?last=pro-octopus-ws
Jika tajuk respons berisi elemen tautan , Anda dapat melakukannya dalam satu lingkaran .
Dapatkan Gambar
Ketika Anda mendapatkan hasil katalog, itu seperti berikut:
{ "repositories": [ "busybox", "ceph/mds" ] }
Anda bisa mendapatkan gambar di setiap katalog:
curl --cacert domain.crt https://your.registry:5000/v2/busybox/tags/list
pengembalian:
{"name":"busybox","tags":["latest"]}
sumber
ceph/mds
? secara umum, untuk repositori apa pun yang didefinisikan dengan/
-/v2/_catalog/ceph/mdt/tags/list
tidak berfungsiVersi terbaru dari Docker Registry tersedia dari https://github.com/docker/distribution mendukung API Katalog. (v2 / _catalog). Ini memungkinkan kemampuan untuk mencari repositori
Jika tertarik, Anda dapat mencoba registry image docker CLI yang saya buat untuk memudahkan penggunaan fitur pencarian dalam distribusi Docker Registry yang baru ( https://github.com/vivekjuneja/docker_registry_cli )
sumber
Kami menulis alat CLI untuk tujuan ini: docker-ls Ini memungkinkan Anda untuk menelusuri register buruh pelabuhan dan mendukung otentikasi melalui token atau auth dasar.
sumber
Ini membuatku gila, tapi akhirnya aku menyatukan semuanya. Pada 1/25/2015, saya telah mengkonfirmasi bahwa adalah mungkin untuk membuat daftar gambar dalam register docker V2 (persis seperti @jonatan yang disebutkan di atas.)
Saya akan memilih jawaban itu, jika saya punya perwakilan untuk itu.
Sebaliknya, saya akan memperluas jawabannya. Karena registri V2 dibuat dengan mempertimbangkan keamanan, saya pikir pantas untuk memasukkan cara mengaturnya dengan sertifikat yang ditandatangani sendiri , dan menjalankan wadah dengan sertifikat tersebut agar panggilan https dapat dilakukan dengan sertifikat itu:
Ini skrip yang sebenarnya saya gunakan untuk memulai registri:
Ini mungkin jelas bagi sebagian orang, tetapi saya selalu bingung dengan kunci dan sertifikat. File yang perlu direferensikan untuk membuat panggilan @jonaton menyebutkan di atas **, adalah domain.crt yang tercantum di atas. (Karena saya memasukkan domain.crt
/root
, saya membuat salinan ke direktori pengguna tempat itu bisa diakses.)** Perintah di atas telah diubah: -X GET tidak benar-benar berfungsi ketika saya mencobanya.
Catatan:
https://myregistry:5000
(seperti di atas) harus cocok dengan domain yang diberikan ke sertifikat yang dibuat.sumber
Instal registri: 2.1.1 atau yang lebih baru (Anda dapat memeriksa yang terakhir, di sini ) dan gunakan GET / v2 / _catalog untuk mendapatkan daftar.
https://github.com/docker/distribution/blob/master/docs/spec/api.md#listing-repositories
Daftarkan semua gambar dengan contoh skrip Shell: https://gist.github.com/OndrejP/a2386d08e5308b0776c0
sumber
Ini adalah liner kecil yang bagus (menggunakan JQ) untuk mencetak daftar Repos dan tag terkait.
Jika Anda belum
jq
menginstal, Anda dapat menggunakan:brew install jq
sumber
Saya harus melakukan hal yang sama di sini dan pekerjaan di atas kecuali saya harus memberikan rincian login karena itu adalah repositori buruh pelabuhan lokal.
Itu sesuai dengan di atas tetapi dengan menyediakan nama pengguna / kata sandi di URL.
Itu kembali sebagai JSON yang tidak diformat.
Saya menyalurkannya melalui formatter python untuk kemudahan membaca manusia, jika Anda ingin memilikinya dalam format ini.
sumber
Dengan menggunakan "endpoint" / v2 / _catalog "dan" / tag / list "Anda tidak dapat membuat daftar semua gambar. Jika Anda mendorong beberapa gambar berbeda dan memberi tag "terbaru", Anda tidak dapat mencantumkan gambar lama dengan benar! Anda masih dapat menariknya jika merujuknya menggunakan digest "docker pull ubuntu @ sha256: ac13c5d2 ...". Jadi jawabannya adalah - tidak ada cara untuk membuat daftar gambar Anda hanya dapat mencantumkan tag yang tidak sama
sumber
Jika ada yang sampai sejauh ini.
Mengambil apa yang orang lain katakan di atas. Berikut ini adalah satu-liner yang menempatkan jawaban ke dalam file teks yang diformat, json.
Ini seperti
Anda mungkin perlu mengubah `? N = xxxx 'untuk mencocokkan dengan berapa banyak wadah yang Anda miliki.
Berikutnya adalah cara untuk secara otomatis menghapus wadah lama dan tidak terpakai.
sumber
Fungsi registri pencarian Docker v2 saat ini tidak didukung pada saat penulisan ini. Lihat diskusi sejak Feb 2015: "usulkan fungsi pencarian registri # 206" https://github.com/docker/distribution/issues/206
Saya menulis sebuah skrip yang dapat Anda temukan: https://github.com/BradleyA/Search-docker-registry-v2-script.1.0 Tidak cantik tetapi mendapatkan informasi yang dibutuhkan dari registri pribadi.
sumber
Saya menulis alat baris perintah yang mudah digunakan untuk mendaftar gambar dalam berbagai cara (seperti daftar semua gambar, daftar semua tag dari gambar-gambar itu, daftar semua lapisan dari tag-tag itu).
Hal ini juga memungkinkan Anda untuk menghapus gambar yang tidak digunakan dengan berbagai cara, seperti hanya menghapus tag lama dari satu gambar atau dari semua gambar dll. Ini nyaman ketika Anda mengisi registri Anda dari server CI dan hanya ingin menyimpan versi terbaru / stabil.
Ini ditulis dalam python dan tidak perlu Anda mengunduh gambar registri kustom besar yang besar.
sumber
Berikut adalah contoh yang mencantumkan semua tag dari semua gambar di registri. Ini menangani registri yang dikonfigurasi untuk autentikasi HTTP Basic juga.
Penjelasan:
sumber
Utas ini sudah ada sejak lama, alat paling baru yang harus dipertimbangkan adalah
skopeo
dancrane
.skopeo
mendukung penandatanganan dan memiliki banyak fitur lainnya, sementaracrane
itu sedikit lebih minimalis dan saya merasa lebih mudah untuk diintegrasikan dengan skrip shell sederhana.sumber
Karena setiap registri berjalan sebagai sebuah wadah ID wadah memiliki file log terkait ID-json.log file log ini berisi vars.name = [gambar] dan vars.reference = [tag]. Sebuah skrip dapat digunakan untuk memperkirakan dan mencetak ini. Ini mungkin salah satu metode untuk mendaftar gambar yang didorong ke registri V2-2.0.1.
sumber