Untuk tujuan penelitian, saya mencoba merayapi registri Docker publik ( https://registry.hub.docker.com/ ) dan mencari tahu 1) berapa banyak lapisan yang dimiliki gambar rata-rata dan 2) ukuran lapisan ini untuk mendapatkan ide distribusi.
Namun saya mempelajari API dan perpustakaan umum serta detail di github tetapi saya tidak dapat menemukan metode apa pun untuk:
- ambil semua repositori / gambar publik (meskipun jumlahnya ribuan, saya masih memerlukan daftar awal untuk mengulang)
- temukan semua lapisan gambar
- temukan ukuran untuk sebuah lapisan (jadi bukan gambar tetapi untuk lapisan individu).
Adakah yang bisa membantu saya menemukan cara untuk mendapatkan kembali informasi ini?
Terima kasih!
EDIT: adakah yang dapat memverifikasi bahwa mencari '*' di registri Docker mengembalikan semua repositori dan bukan sembarang yang menyebutkan '*' di mana saja? https://registry.hub.docker.com/search?q=*
image
docker
web-crawler
pengguna134589
sumber
sumber
docker history myimage
dan Anda akan melihat ukuran setiap lapisan. Secara lebih umum, pada gambar, Anda dapat melakukandocker history myimage | awk 'NR>1 {print $1}' | xargs docker inspect --format '{{ ((index .ContainerConfig.Cmd ) 0) }}'
untuk melihat perintah apa yang dikeluarkan untuk membuat gambarhttps://registry.hub.docker.com/search?q=*
menunjukkan kepada saya 87031 repositori,Jawaban:
Anda dapat menemukan lapisan gambar di folder / var / lib / docker / aufs / layers; berikan jika Anda mengkonfigurasi untuk driver penyimpanan sebagai aufs (opsi default)
Contoh:
Sekarang untuk melihat lapisan wadah yang dibuat dengan gambar "Ubuntu"; pergi ke / var / lib / docker / aufs / layers direktori dan cat file dimulai dengan ID penampung (ini dia 0ca502fa6aae *)
Ini akan menunjukkan hasil yang sama dengan berlari
Untuk melihat ID lapisan penuh; dijalankan dengan opsi --no-trunc sebagai bagian dari perintah history.
sumber
docker history
perintah tidak akan memberikan lapisan gambar seperti yang ditunjukkan di folder / var / lib / docker / aufs / layers. Baca pembaruannya di sini .docker history
perintah tidak lagi memberitahu informasi penyimpanan lapisan disk yang sebenarnya pada host buruh pelabuhan. Periksa blogLihat penyelaman yang ditulis dalam golang.
Alat yang luar biasa!
sumber
Anda dapat menemukan ID gambar terlebih dahulu menggunakan:
Kemudian temukan lapisan gambar dan ukurannya:
Catatan: Saya menggunakan Docker versi 1.13.1
sumber
Menurut saya,
docker history <image>
sudah cukup. Ini mengembalikan ukuran setiap lapisan:sumber
Mereka memiliki jawaban yang sangat bagus di sini: https://stackoverflow.com/a/32455275/165865
Jalankan saja gambar di bawah ini:
sumber
Ini akan memeriksa gambar buruh pelabuhan dan mencetak lapisan:
sumber
satu alat lagi: https://github.com/CenturyLinkLabs/dockerfile-from-image
GUI menggunakan ImageLayers.io
sumber
https://hub.docker.com/search?q=* menampilkan semua gambar di seluruh hub Docker, tidak mungkin mendapatkannya melalui perintah pencarian karena tidak menerima wildcard.
Mulai v1.10 Anda dapat menemukan semua lapisan dalam gambar dengan menariknya dan menggunakan perintah berikut:
3) Ukuran dapat ditemukan
/var/lib/docker/image/aufs/layerdb/sha256/{LAYERID}/size
meskipun LAYERID! = Diff_ids ditemukan dengan perintah sebelumnya. Untuk ini, Anda perlu melihat/var/lib/docker/image/aufs/layerdb/sha256/{LAYERID}/diff
dan membandingkan dengan keluaran perintah sebelumnya agar sesuai dengan diff_id dan ukuran yang benar.sumber
Memang dapat dilakukan untuk menanyakan info manifes atau blob dari server registri buruh pelabuhan tanpa menarik gambar ke disk lokal.
Anda dapat merujuk ke Registry v2 API untuk mengambil manifes gambar.
Catatan, Anda harus menangani versi manifes yang berbeda. Untuk v2 Anda bisa langsung mendapatkan ukuran layer dan digest dari blob. Untuk manifes v1 , Anda dapat mengepalai url unduhan blob untuk mendapatkan ukuran lapisan yang sebenarnya.
Ada script sederhana untuk menangani kasus-kasus di atas yang akan terus dipertahankan.
sumber
Bukan pertanyaan asli tetapi untuk menemukan jumlah total semua gambar tanpa lapisan bersama penghitungan ganda, berikut ini berguna (ubuntu 18):
sumber
Saya telah memecahkan masalah ini dengan menggunakan fungsi pencarian di situs Docker di mana '*' adalah pencarian valid yang mengembalikan 200k repositori dan kemudian saya merayapi setiap halaman invididual. Penguraian HTML memungkinkan saya mengekstrak semua nama gambar di setiap halaman.
sumber