Ingin tahu di mana gambar, wadah, dan volume Docker berada?
Di lingkungan Linux pada umumnya, Anda dapat menemukan image Docker dan data container di:
/var/lib/docker/
Jika server Anda kehabisan ruang, Anda harus melihat direktori ini.
Terutama, semua entitas terkait Docker terletak di /var/lib/docker
. Tapi mari kita lihat lebih spesifik, dengan gambar Alpine dan wadah sebagai contoh langsung.
Lokasi gambar buruh pelabuhan
Setiap kali Anda menggunakan docker pull
perintah atau jalankan docker-compose up -d
untuk mempersiapkan peluncuran aplikasi, di sinilah gambar disimpan di server Ubuntu:
/var/lib/docker/overlay2
Di sini, Overlay2 adalah driver penyimpanan Docker default di Ubuntu. Anda dapat mengonfirmasi ini dengan menjalankan docker info
perintah dan mencari Driver Penyimpanan:
...
Storage Driver: overlay2
...
Jika ini berbeda dari milik Anda, maka Anda menggunakan driver penyimpanan yang berbeda untuk Docker. Demikian juga, lokasi direktori akan dinamai sesuai dengan driver penyimpanan yang sama. Ketersediaan driver penyimpanan tergantung pada dukungan kernel.
Lokasi gambar tertentu
Jika Anda mencari lokasi gambar tertentu, Anda dapat menggunakan perintah inspect pada Docker untuk gambar yang ditarik.
Katakanlah, misalnya, saya telah menarik gambar alpine dengan docker pull alpine
. Jalankan perintah berikut untuk memeriksanya:
[email protected]:~$ docker inspect alpine
Setelah Anda menjalankan perintah, Anda akan melihat tiga bidang di dalam Data
subbagian di bawah GraphDriver
:
...
"GraphDriver": {
"Data": {
"MergedDir": "/var/lib/docker/overlay2/64c9c0cf8c9cfb0e2168071df0652a317d49f58a68fe86e4a9a9a525ab9e365e/merged",
"UpperDir": "/var/lib/docker/overlay2/64c9c0cf8c9cfb0e2168071df0652a317d49f58a68fe86e4a9a9a525ab9e365e/diff",
"WorkDir": "/var/lib/docker/overlay2/64c9c0cf8c9cfb0e2168071df0652a317d49f58a68fe86e4a9a9a525ab9e365e/work"
},
...
Semua jalur direktori di atas adalah lokasi fisik gambar alpine pada sistem host. Perhatikan direktori besar bernama hash di tiga bidang di atas:64c9c0cf8c9cfb0e2168071df0652a317d49f58a68fe86e4a9a9a525ab9e365e
.
Secara total, sebenarnya ada empat jenis bidang:
Dir Bawah :Ini adalah lapisan read-only dari sistem file overlay. Untuk buruh pelabuhan, ini adalah lapisan gambar yang disusun secara berurutan.
UpperDir :Ini adalah lapisan baca-tulis dari sistem file overlay. Untuk buruh pelabuhan, itu setara dengan lapisan khusus wadah yang berisi perubahan yang dibuat oleh wadah itu.
WorkDir :Ini adalah direktori yang diperlukan untuk overlay, perlu direktori kosong untuk penggunaan internal.
MergedDir :Ini adalah hasil dari sistem file overlay. Docker secara efektif melakukan chroot ke direktori ini saat menjalankan container.
Dikutip dari referensi ini (baik untuk bacaan lebih lanjut).
Lokasi kontainer buruh pelabuhan
Seperti gambar, container juga disimpan di dalam direktori berbasis driver penyimpanan yang sama.
/var/lib/docker/overlay2
Lokasi kontainer tertentu
Jika Anda mencari lokasi wadah tertentu, Anda dapat kembali menggunakan inspect
perintah pada wadah yang sedang berjalan.
Katakanlah, misalnya, saya telah menjalankan wadah alpine dengan docker run -ti -d alpine
. Saat Anda menjalankan docker ps
, Anda akan melihatnya berjalan:
[email protected]:~$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
cb341d6a28fa alpine "/bin/sh" 6 seconds ago Up 5 seconds confident_banzai
Di sini, wadah telah diberi nama secara acak confident_banzai
. Jadi mari kita periksa:
[email protected]:~$ docker inspect confident_banzai
Setelah Anda menjalankan perintah di atas, Anda akan melihat keempat bidang yang disebutkan sebelumnya di dalam Data
subbagian di bawah GraphDriver
. Direktori ini adalah tempat data container secara fisik berada di sistem host Anda:
...
"GraphDriver": {
"Data": {
"LowerDir": "/var/lib/docker/overlay2/d734685e284c92bdcb6063ac292a48813f30f4b0b2dd6fa2882279c569e506a3-init/diff:/var/lib/docker/overlay2/64c9c0cf8c9cfb0e2168071df0652a317d49f58a68fe86e4a9a9a525ab9e365e/diff",
"MergedDir": "/var/lib/docker/overlay2/d734685e284c92bdcb6063ac292a48813f30f4b0b2dd6fa2882279c569e506a3/merged",
"UpperDir": "/var/lib/docker/overlay2/d734685e284c92bdcb6063ac292a48813f30f4b0b2dd6fa2882279c569e506a3/diff",
"WorkDir": "/var/lib/docker/overlay2/d734685e284c92bdcb6063ac292a48813f30f4b0b2dd6fa2882279c569e506a3/work"
},
"Name": "overlay2"
},
...
Referensi untuk bacaan lebih lanjut.
Direktori di atas adalah lokasi fisik data container Anda di dalam sistem host. Ingat direktori besar dengan nama hash:64c9c0cf8c9cfb0e2168071df0652a317d49f58a68fe86e4a9a9a525ab9e365e
dari Gambar Docker bagian? Direktori di bawahnya disebut diff
, seperti yang Anda lihat di LowerDir
bagian setelah :
, yang sekarang menjadi titik pemasangan untuk wadah - diambil dari gambar dasar UpperDir
!
Direktori ini akan terus tersedia bahkan setelah Anda menghentikan penampung. Jadi, jalur lengkap yang umum di antara gambar (MergedDir
, UpperDir
dan WorkDir
) dan wadah (LowerDir
titik pemasangan) adalah:
/var/lib/docker/overlay2/64c9c0cf8c9cfb0e2168071df0652a317d49f58a68fe86e4a9a9a525ab9e365e/
Tujuan gambar bersebelahan setelah menetapkan dirinya ke wadah hingga LowerDir
level, itulah sebabnya keempat bidang dialokasikan dan didasarkan pada direktori yang berbeda (dengan hash baru) karena sifat dinamis dari yang terakhir, yang menjadi:
/var/lib/docker/overlay2/d734685e284c92bdcb6063ac292a48813f30f4b0b2dd6fa2882279c569e506a3/
Catatan:Proses pemasangan direktori dari gambar dasar ke wadah sangat mirip dengan cara Anda memasang volume di Docker! Lokasi volume buruh pelabuhan
Tidak seperti gambar dan wadah Docker, lokasi fisik untuk volume cukup mudah. Volume terletak di:
/var/lib/docker/volumes/
Lokasi Volume Tertentu
Dalam hal ini, ada dua jenis terutama. Salah satunya adalah volume Docker reguler dan yang lainnya adalah pengikatan mount.
Volume Docker
Jika Anda mencari lokasi volume tertentu, Anda dapat menggunakan docker volume ls
perintah terlebih dahulu dan periksa nama volume atau ID.
Misalnya, saya menjalankan wadah alpine dengan perintah berikut dengan volume:
[email protected]:~$ docker run -ti -d --name alpine-container -v test-data:/var/lib/app/content alpine
Sekarang, volume bernama test-data
otomatis akan dibuat. Sekarang mari kita buat file bernama test.md
di dalam lokasi ini:
[email protected]:~$ docker exec alpine-container sh -c "touch /var/lib/app/content/test.md"
Pastikan file benar-benar telah dibuat:
[email protected]:~$ docker exec -ti alpine-container sh
/ # ls /var/lib/app/content/
test.md
/ # exit
Saat Anda menjalankan docker volume ls
, volume bernama test-data
akan terdaftar:
[email protected]:~$ docker volume ls
DRIVER VOLUME NAME
local d502589845f7ae7775474bc01d8295d9492a6c26db2ee2c941c27f3cac4449d1
local e71ee3960cfef0a133d323d146a1382f3e25856480a727c037b5c81b5022cb1b
local test-data
Terakhir, Anda dapat mengonfirmasi lokasi sebenarnya dari file di sistem host Anda:
[email protected]:~$ sudo ls -l /var/lib/docker/volumes/test-data/_data
total 0
-rw-r--r-- 1 root root 0 Oct 6 23:20 test.md
Oleh karena itu, jalur untuk volume yang dipasang selalu berada di dalam direktori bernama _data
di dalam direktori volume masing-masing.
Anda juga dapat memeriksa jalur tersebut dengan cara Docker dengan menggunakan docker volume inspect
perintah diikuti dengan nama volume atau ID dan melihat ke Mountpoint
parameter dalam output:
[email protected]:~$ docker volume inspect test-data
[
{
"CreatedAt": "2021-10-06T23:20:20+05:30",
"Driver": "local",
"Labels": null,
"Mountpoint": "/var/lib/docker/volumes/test-data/_data",
"Name": "test-data",
"Options": null,
"Scope": "local"
}
]
Ikat Dudukan
Lokasi pengikatan pengikat cukup jelas dan bahkan lebih mudah karena Anda memasang volume langsung dari lokasi sisi host:
[email protected]:~$ mkdir /home/avimanyu/test-data
[email protected]:~$ docker run -ti -d --name alpine-container -v /home/avimanyu/test-data:/var/lib/app/content alpine
Dalam hal ini, volume yang dipasang mengikat bernama test-data
akan tersedia di sisi penampung sebagai /var/lib/app/content
.
Ringkasan
Dalam tutorial singkat ini, saya telah mengambil pendekatan berbasis Linux generik untuk menunjukkan lokasi fisik image, container, dan volume Docker yang berada di server Linux Anda (dalam kasus ini Ubuntu 20.04) di tingkat host.
Jika Anda ingin berbagi umpan balik, komentar, atau saran tentang pendekatan ini, silakan tinggalkan pemikiran Anda di bagian komentar di bawah.