GNU/Linux >> Belajar Linux >  >> Panels >> Docker

Di mana Gambar, Kontainer, dan Volume Docker Disimpan di Sistem Host Linux?

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.

Catatan:Harap dicatat bahwa informasi ini hanya untuk tujuan pendidikan. Memanipulasi dengan sistem host direktori/file Docker tidak pernah benar-benar direkomendasikan. Perintah docker dan docker-compose harus selalu menjadi metode yang disukai. Direktori/file Docker yang terletak secara fisik harus diakses atau dimanipulasi hanya sebagai upaya terakhir selama situasi darurat.

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.


Docker
  1. Cara Menghapus Semua Gambar Docker, Wadah, Volume, Jaringan, dan Sumber Daya yang Tidak Digunakan

  2. Cara Membuat, Mendaftar &Menghapus Wadah Docker di Linux

  3. Apa itu Docker (dan wadah Linux?)

  1. Apa perbedaan antara wadah Linux dan gambar?

  2. Cara Menggunakan Gambar Docker, Wadah, dan File Docker Secara Mendalam

  3. Apa Itu Volume Docker, dan Bagaimana Anda Menggunakannya?

  1. Perbedaan Antara CMD dan ENTRYPOINT di Gambar Docker

  2. Cara mencadangkan dan memulihkan wadah Docker

  3. Cara Menjeda dan Melanjutkan Wadah Docker