ข้ามไปเนื้อหาหลัก
Docker· ~15 นาที

Volumes และ Networking

เก็บข้อมูลไม่ให้หาย และให้คอนเทนเนอร์คุยกัน/เข้าถึงจากภายนอก

เปรียบเทียบให้เห็นภาพ

ไฟล์ในตัว container เหมือนกระดาษทดที่ฉีกทิ้งเมื่อ container ถูกลบ · Volume เหมือนลิ้นชักถาวรที่ต่อเข้ากับ container ข้อมูลอยู่รอด · network เหมือนสายโทรศัพท์ให้ container คุยกัน

Volumes — เก็บข้อมูลถาวร

ข้อมูลอยู่รอดแม้ลบ container ด้วย volume

named volume (Docker จัดการ)
Container
pgdataเหมาะ DB/prod
bind mount (โฟลเดอร์ host)
Container
./siteเหมาะ dev

ไม่มี volume = ข้อมูลในตัว container หายเมื่อลบ

named volume (Docker จัดการให้) และ bind mount (map โฟลเดอร์จากเครื่อง) — ข้อมูลอยู่รอดแม้ลบ container
# named volume — Docker เก็บให้ (เหมาะข้อมูล production เช่น DB)
docker volume create pgdata
docker run -d -v pgdata:/var/lib/postgresql/data postgres

# bind mount — map โฟลเดอร์จากเครื่องเรา (เหมาะ dev แก้โค้ดแล้วเห็นทันที)
docker run -d -v $(pwd)/site:/usr/share/nginx/html nginx
named volume vs bind mount
  • named volume — Docker จัดการที่เก็บเอง ย้าย/สำรองง่าย เหมาะข้อมูลจริง (ฐานข้อมูล)
  • bind mount — ผูกโฟลเดอร์จากเครื่อง host ตรง ๆ เหมาะตอน dev (แก้ไฟล์แล้ว container เห็นทันที)
  • ไม่มี volume = ข้อมูลที่เขียนในตัว container หายเมื่อลบ container

Networking — พอร์ตและการคุยกัน

docker network create appnet          # สร้าง network
docker run -d --name db --network appnet postgres
docker run -d --name api --network appnet myapi
# ภายใน appnet: container "api" เรียก "db" ด้วยชื่อ host "db" ได้เลย
network ให้ container เรียกกันด้วยชื่อ

สรุป Key Takeaways

  • ไม่มี volume = ข้อมูลหายเมื่อลบ container · named volume (จริง) vs bind mount (dev)
  • -p host:container เปิดพอร์ตสู่ภายนอก · ไม่ใส่ = เข้าจากนอกไม่ได้
  • container ใน network เดียวกันเรียกกันด้วยชื่อได้
  • volume/network คือรากของ PV/PVC และ Service/DNS ใน K8s
อ่านจบแล้วอย่าลืมทำเครื่องหมาย