Pengantar Detail untuk Driver Penyimpanan Docker
Saya baru -baru ini mengerjakan sebuah proyek dan tidak tahu cara menggunakan driver penyimpanan Docker selama periode ini, jadi saya mencari informasi secara online dan menyelesaikannya. Saya akan merekamnya di sini.
Tujuan
Docker adalah mesin wadah aplikasi open source yang terutama menggunakan namespace kernel linux untuk mencapai isolasi kotak pasir dan menggunakan cgroup untuk mencapai batasan sumber daya. Docker adalah wadah Linux ringan yang digunakan untuk pengembangan dan penyebaran terpadu, mencoba menyelesaikan masalah "ketergantungan neraka", menggabungkan layanan dan komponen dependen, mirip dengan wadah yang digunakan oleh kapal, dan mencapai instalasi dan penyebaran yang cepat.
1. Arsitektur Dasar Docker - Klien dan Daemon
Pertama -tama mari kita pahami arsitektur dasar dan proses startup Docker. Bahkan, Docker mengadopsi arsitektur C/S, termasuk klien dan server. Docker Daemon menerima permintaan dari pelanggan sebagai server dan memproses permintaan ini (buat, jalankan, kirimkan kontainer). Klien dan server berkomunikasi pada mesin yang sama melalui API yang tenang. Dalam proses penggunaan yang spesifik, setelah melaksanakan Layanan Docker Start, proses Docker Deamon Daemon dihasilkan pada host, dijalankan di latar belakang dan menunggu untuk menerima pesan dari klien (mis., Perintah input Docker, seperti Docker Pull XXX, Docker Run ..., Docker Commit XXX) untuk mencapai interaksi dengan Docker Deamon. Setelah memulai layanan Docker, Anda dapat melihat proses Docker.
Bawaan
[root@localhost ~]# ps -aux | Grep Dockerroot 11701 0,0 0,4 359208 16624? Ssl 21:05 0:00 /usr/bin/docker -d -H fd:// --selinux-enabled --insecure-registry 186.100.8.216:5000root 11861 0.0 0.0 113004 2256 pts/0 S+ 23:01 0:00 grep --color=auto docker
Ini terutama karena ketika menentukan sistem file nanti, Anda perlu mengkonfigurasi driver penyimpanan tertentu di/etc/sysconfig/docker (ini akan menulis blog khusus), dan kemudian mulai Docker Daemon, dan tidak dapat beroperasi melalui parameter perintah run. Anda juga dapat mengaturnya langsung dari baris perintah host melalui Docker D.
2. Metode Penyimpanan Docker - Driver Penyimpanan
Bagian inti dari model Docker adalah untuk secara efektif memanfaatkan mekanisme mirroring hierarkis. Cermin dapat diwariskan melalui hierarki. Berdasarkan gambar dasar (tanpa gambar induk), berbagai gambar aplikasi spesifik dapat dibuat. Wadah Docker yang berbeda dapat berbagi beberapa lapisan sistem file dasar, dan pada saat yang sama, ditambah dengan lapisan perubahan unik mereka sendiri, sangat meningkatkan efisiensi penyimpanan. Mekanisme utamanya adalah untuk model hierarkis dan memasang direktori yang berbeda ke sistem file virtual yang sama (menyatukan beberapa direktori menjadi satu sistem file virtual tunggal, dari artikel ini). Beberapa driver penyimpanan yang berbeda digunakan untuk Mirror Storage Docker, termasuk: AUFS, Devicemapper, BTRFS dan Overlay (dari situs web resmi). Berikut ini adalah pengantar singkat untuk driver penyimpanan yang berbeda.
Aufs
AUFS (OtherUnionFS) adalah sistem file bersama. AUFS mendukung pengaturan readityly, readwrite dan izin yang dapat diputar untuk setiap direktori anggota (mirip dengan git). Pada saat yang sama, ada konsep serupa di AUFS, di mana cabang dengan izin baca saja dapat dimodifikasi secara logis secara bertahap (tidak mempengaruhi bagian baca saja). Satu -satunya driver penyimpanan AUFS dapat mewujudkan berbagi perpustakaan runtime yang dapat dieksekusi dan dibagikan antar wadah, jadi ketika Anda menjalankan ratusan runtime dengan kode program yang sama atau pustaka runtime, AUFS adalah pilihan yang sangat baik.
Perangkat Mapper
Perangkat Mapper adalah mekanisme kerangka kerja pemetaan dari perangkat logis ke perangkat fisik yang disediakan dalam kernel Linux 2.6. Di bawah mekanisme ini, pengguna dapat dengan mudah merumuskan strategi manajemen untuk menerapkan sumber daya penyimpanan sesuai dengan kebutuhan mereka (lihat detail). Driver Device Mapper akan membuat file 100g sederhana yang berisi gambar dan wadah Anda, setiap wadah terbatas pada volume ukuran 10g (Catatan: Ini adalah file jarang yang secara otomatis dibuat menggunakan loopback, khususnya data dan metadata di bawah/var/lib/docker/devicemapper/devicemapper, yang dapat diperluas secara dinamis). Anda dapat menyesuaikan ukuran wadah Docker, untuk referensi tertentu) Anda dapat menggunakan parameter -s untuk menentukan driver saat memulai daemon Docker, yaitu, Anda dapat mengatur driver penyimpanan Docker dengan devicemapper Docker -D -s. Pertama tutup layanan Docker dan jalankan perintah:
Bawaan
[root@localhost ~]# docker -d -s devicemapperInfo [0000] +job serveAPI (unix: ///var/run/docker.sock) info [0000] Mendengarkan http pada unix (/var/run/docker.sock) info [0000] +job init init _netdrork (/noat 0000) [0000] +pekerjaan diinit, 0000] +JOBROWDROWDRWORK (/OPRIVER.) OK (0) Info [0000] Memuat Kontainer: Mulai. .... info [0000] Memuat kontainer: selesai. Info [0000] Docker Daemon: 1.4.0 4595D4F/1.4.0; Execdriver: Native-0.2; GraphDriver: Info DeviceMapper [0000] +Pekerjaan AcceptConnections () Info [0000] -job AcceptConnections () = OK (0)
Selain itu, Docker dapat menentukan parameter opt-opt saat memulai wadah, tetapi sekarang hanya DeviceMapper yang dapat menerima pengaturan parameter. Akan ada tampilan blog yang ditargetkan nanti.
BTRFS
Driver BTRFS bisa sangat efisien dalam build docker. Namun, seperti Devicemapper, itu tidak mendukung penyimpanan bersama antar perangkat (berpartisipasi dalam situs web resmi). BTRFS mendukung snapshot dan klon, dan juga dapat dengan mudah mengelola beberapa perangkat fisik. (Untuk detailnya, silakan merujuk ke pengantar IBM ke BTRFS)
hamparan
Overlay sangat mirip dengan AUFS, tetapi kinerjanya lebih baik daripada AUFS dan memiliki pemanfaatan memori yang baik. Sekarang telah digabungkan ke dalam Kernel Linux 3.18. Perintah Penggunaan Khusus: Docker DS Overlay
Catatan di situs web resmi: Saat ini tidak didukung pada BTRFS atau Salinan pada Sistem File Write dan hanya boleh digunakan melalui partisi EXT4.
3 Struktur Direktori Docker
Dua konsep Docker yang paling penting adalah cermin dan wadah. Jadi di mana gambar yang kita tarik ke bawah disimpan? Setelah wadah Mirror Run dimulai, di mana konten operasi kami dimodifikasi? Karena driver spesifik berbeda, efek implementasi akhir berbeda. Mari kita analisis struktur penyimpanan Docker menggunakan driver penyimpanan mapper perangkat sebagai contoh.
1. Masukkan direktori/var/lib/docker dan daftarkan isinya:
Bawaan
[root@localhost ~]# cd/var/lib/docker/[root@localhost docker]# lscontainers devicemapper execdriver grafik init linkgraph.db repositories-devicemapper volume trust TMP trust TMP
Menurut isi direktori, jelas bahwa driver Devicemapper digunakan.
Catatan: Folder yang ditampilkan di bawah ini semuanya di bawah/var/lib/docker.
2. Folder mana yang ada file gambar? (Lihat)
Informasi gambar tarik disimpan di folder grafik, dan konten gambar ada di bawah Devicemapper/ Devicemapper/ Data.
3. Di mana wadah yang dimulai dijalankan?
Informasi konfigurasi wadah yang dimulai disimpan dalam wadah, dan Execdriver/ Native/ juga dilihat.
Isi operasi dalam wadah disimpan di bawah devicemapper/devicemapper/data.
4. Peran grafik
Dalam Arsitektur Docker, ia memainkan penjaga gambar kontainer yang diunduh dan perekam hubungan antara gambar kontainer yang diunduh. Di direktori grafik lokal, informasi spesifik yang disimpan untuk setiap gambar kontainer adalah: metadata (JSON) dari gambar wadah, informasi ukuran lapisan (lapisan) dari gambar kontainer, dan rootf spesifik yang diwakili oleh gambar kontainer.
5. Tes Eksperimental:
- Awalnya tidak ada wadah yang diaktifkan:
Bawaan
[root@localhost docker]# ll containers/total 0
- Mulai wadah:
Bawaan
[root@localhost docker]# docker run -i -t --rm centos: 7 /bin /bash [root@187a8f9d2865 /]#
UUID dari wadah yang dimulai = 187a8f9d2865
- Sebelum memulai wadah, periksa ukuran sebenarnya file di bawah/var/lib/docker/devicemapper/devicemapper/
Bawaan
[root@bhdocker216 docker]# du -h devicemapper/devicemapper/*2.1g devicemapper/devicemapper/data3.5m devicemapper/devicemapper/metadata
- Lihat di host
Bawaan
[root@bhdocker216 docker]# ls wadah/187a8f9d2865c2ac *** 91b981
Periksa isi wadah yang dimulai di bawah folder UUID:
Bawaan
[root@bhdocker216 wadah]# ll 187a8f9d2865c2ac *** 91b981total 24-rw -----. 1 root root 273 Mar 5 23:59 187A8F9D2865 ***-json.log-rw-r--. 1 root root 1683 Mar 5 23:58 config.json-rw-r--. 1 root root 334 5 Mar 23:58 hostconfig.json-rw-r--. 1 root root 13 Mar 5 23:58 Nama host-rw-r--. 1 root root 174 5 Mar 23:58 Hosts-rw-r--. 1 root root 69 5 Mar 23:58 resolv.conf- Tambahkan file di wadah startup dan lihat.
Pertama -tama buat file di wadah berjalan:
Bawaan
[root@8a1e3ad05d9e /]# dd if=/dev/zero of=floppy.img bs=512 count=57605760+0 records in5760+0 records out2949120 bytes (2.9 MB) copied, 0.0126794 s, 233 MB/s
Kemudian lihat file di bawah/var/lib/docker/devicemapper/devicemapper/:
Bawaan
[root@bhdocker216 docker]# du -h devicemapper/devicemapper/*5.5g devicemapper/devicemapper/data4.6m devicemapper/devicemapper/metadata
Ukuran tempat ini sedikit berbeda karena saya pertama kali dieksekusi #DD if =/dev/nol of = test.txt bs = 1m count = 8000 untuk membuat file berukuran 8g. Saya menghentikannya karena terlalu lambat, tetapi saya dapat dengan jelas melihat bahwa kedua folder telah berubah (ditambahkan) saat beroperasi di wadah yang sedang berjalan.
- Periksa grafiknya. Ketika hanya satu gambar (ubuntu14.10) ditarik, 7 direktori bernama uuid panjang muncul. Bagaimana ini bisa terjadi?
Gunakan pohon gambar Docker untuk mendaftar struktur pohon cermin, dan kita dapat melihat struktur penyimpanan hierarkis cermin. Ubuntu terakhir (lapisan 7) didasarkan pada perubahan lapisan 6, yaitu, lapisan ke-n di pohon logis ini didasarkan pada perubahan N-1, dan lapisan-N tergantung pada gambar N-1. Lapisan ke -0, ukurannya 0, disebut gambar dasar.
- Apa konten dalam direktori grafik/uuid?
Bawaan
[root@localhost grafik]# ll 01bf15a18638145eb *** -htotal 8.0k-rw -----. 1 root root 1.6k 5 Mar 18:02 JSON-RW -----. 1 root root 9 Mar 5 18:02 Lapisan
Lihat Konten Lapisan: Ukuran Lapisan Representasi Digital (Unit: B). Josn: Simpan metadata gambar ini (seperti: ukuran, arsitektur, konfigurasi, wadah, ** uuid orang tua **, dll.).
- Lihat folder Devicemapper/Devicemapper
Ada dua folder, data, dan metadata. Faktanya, driver mapper perangkat menyimpan file cermin dan wadah dalam file ** data **. Anda dapat melihat ukuran data dan metadata melalui info Docker. Selain itu, Anda dapat menggunakan Du H (digunakan di atas) untuk melihat ukuran aktual dari dua file yang jarang ini.
- Execdriver
Bawaan
[root@bhdocker216 docker]# ls execdriver/asli/8a1e3ad05d9e66a45e683a2c *** 2437bdcccdfdfa // lihat konten di dalam: [root@bhdocker216 8a1eAdfa //
- Volume
Volume tanpa parameter -V kosong. Setelah pengujian, jika wadah dimulai, tambahkan parameter -V, UUID akan ditampilkan di folder volume. Pencarian global akan dilakukan pada host dan hanya ditemukan di bawah volume. Ini tidak ada hubungannya dengan gambar dan uuid wadah.
Bawaan
[root@bhDocker216 docker]# find / -name 86eb77f9f5e25676f100***d5a/var/lib/docker/volumes/86eb77f9f5e25676f100***d5a//View the content inside: [root@bhDocker216 volumes]# ls 86eb77f9f5e25676f100 *** d5aconfig.json [root@bhdocker216 volume]# cat 86eb77f9f5e25676f100 *** d5a /config.json {"Id": "86eb77f9f5e25676f100a89ba727bc15185303236aae0dcf4c17223e37651d5a", "path": "/home/data", "isbindmount": tru, " Deskripsi tabel fungsi folder
Buat ringkasan, atur tabel, dan jelaskan fungsi folder yang berbeda di bawah/var/lib/docker:
Terima kasih telah membaca, saya harap ini dapat membantu Anda. Terima kasih atas dukungan Anda untuk situs ini!