Persistent volumes

Docker ระดับกลาง

Mike Metzger

Data Engineering Consultant

Volume คืออะไร?

  • Volumes คือตัวเลือกในการจัดเก็บข้อมูลใน Docker โดยไม่ขึ้นกับ image ของคอนเทนเนอร์ หรือ filesystem ของโฮสต์
  • จัดการผ่าน command line (หรือ API)
  • แชร์กับหลายคอนเทนเนอร์ได้
  • ประสิทธิภาพสูงกว่า file share / bind mounts
  • ยังคงอยู่จนกว่าจะถูกลบ

ภาพการ mount volume

1 Image modified from https://docs.docker.com
Docker ระดับกลาง

การจัดการ volumes

  • docker volume
  • docker volume create <volumename>
  • docker volume ls หรือ docker volume list
  • docker volume inspect
    • แสดง metadata ต่างๆ ของ volume เช่น Name, Mountpoint, Options
  • docker volume rm
Docker ระดับกลาง

ตัวอย่างการสร้าง volume

bash> docker volume create sqldata
sqldata
bash> docker volume ls
DRIVER    VOLUME NAME
local     2f2b7f710551e004dcdd9edf4cad31c37826b428de12f1c04ca02305d216ab00
local     14da7ff0c6eb29f644e6f9f9d59bbcf56b3699c04881dd7cbcaa9ecd6bef239c
local     150aa3c5c7aee30ffd1ec7ecf39f03989bf561536a9413ebed96ffbaa537d103
local     sqldata
...
Docker ระดับกลาง

ตัวอย่างการใช้ volume inspect

bash> volume inspect sqldata

[ { "CreatedAt": "2024-01-27T04:27:51Z", "Driver": "local", "Labels": null, "Mountpoint": "/var/lib/docker/volumes/sqldata/_data", "Name": "sqldata", "Options": null, "Scope": "local" } ]
Docker ระดับกลาง

การแนบ volumes

  • ใช้คำสั่ง -v
    • docker run -v <volumename>:<destination path>:<options>
    • ชื่อ volume คือชื่อของ volume ที่มีอยู่แล้ว
    • destination path คือตำแหน่งที่จะ mount volume (เช่น /data)
    • options คือรายการค่าที่คั่นด้วยคอมมา (ไม่บังคับ) เช่น ro สำหรับ read-only
  • --mount ใช้ได้เช่นเดียวกับ bind-mounts
$ docker run -v sqldata:/data postgres
Docker ระดับกลาง

Drivers

  • วิธีจัดเก็บ Docker volumes
  • รองรับ:
    • Local filesystem (ค่าเริ่มต้น)
    • NFS (การแชร์ไฟล์บน Unix)
    • SMB / CIFS (การแชร์ไฟล์บน Windows)
Docker ระดับกลาง

มาฝึกกันเถอะ!

Docker ระดับกลาง

Preparing Video For Download...