Volumes
เป็นการ mount volume ของ host ไปยัง container เพื่อทำให้ข้อมูลต่าง ๆ ไม่หายไปเมื่อ container ถูกลบออกไป โดยเราสามารถกำหนดได้ผ่าน option --volume หรือ -v สำหรับ volume และ --mount สำหรับการ mount ของคำสั่ง docker run
ซึ่งการ mount จะมีด้วยกัน 3 แบบดังรูป

Bind Mount
Bind Mount คือการใช้ Storage ของ Host เข้ากับ Docker container
- เป็นการ Mount storage ของ Host เข้าไปทำให้เมื่อ Container มีการ Re-Created หรือ ลบออก ข้อมูล Volume ที่ใช้ Mount ก็จะอยู่ที่เดิมเสมอ
- การ Backup ข้อมูลในวิธีนี้จะไม่ได้มีความจำเป็นเท่าไหร่ เนื่องเราสามารถสำรองข้อมูล Volume ได้จาก Host โดยตรง (นอกเสียจาก Storage ของฝั่ง Host จะเสียหรือเผลอลบทิ้งเองนะครับ 😅)
Volume Mount
คือ Volume ที่ต้องสร้างด้วยคำสั่ง docker volume create <VOLUME_NAME> ประโยชน์จะคล้าย ๆ และความสามาารถจะคล้ายกับรูปแบบ Bind Mount แต่จะมีความแตกต่างอยู่ที่
- จะไม่สามารถเข้าถึงไฟล์ใน Docker Volume จาก Host ได้โดยตรง (เช่น การเปิดไฟล์ หรือการไป List ดูว่ามีไฟล์อะไรบ้าง)
- สามารถ Link เข้ากับ Container กี่อันก็ได้
- เมื่อมีการ Re-created Container หรือลบ Container ข้อมูลที่อยู่ใน Volume นั้น ๆ ก็จะ ไม่ หายไปด้วย (เพราะว่าเป็นการสร้าง Volume แยก)
- การ Backup ข้อมูลต้องสั่งผ่าน CLI เพื่อ Export ข้อมูลมาไว้ที่ Host
- รองรับการสเกลเมื่อขนาดใหญ่ขึ้น เช่น การเชื่อมต่อกับ Storage อื่น ๆ จากภายนอก หรือบน Cloud
tmpfs Volume
คือการใช้ Volume ที่อยู่ใน Container ส่วนใหญ่จะเกิดจากการสร้างไฟล์เพื่อใช้ Storage ภายในเมื่อ Build Dockerfile ข้อดี
- ไม่ต้อง Mount และไม่ต้องสร้าง Volume ก่อนแต่สามารถใช้พื้นที่ใน Container ได้โดยตรงจึงมีความง่าย และรวดเร็วดี ข้อเสีย
- เนื่องจากเป็นการใช้ Storage ใน Container ดังนั้นเมื่อมีการ Re-created Container หรือลบ Container ข้อมูลที่อยู่ใน Container volume นั้น ๆ ก็จะหายไปด้วย
- การ Backup ข้อมูลต้องสั่งผ่าน CLI เพื่อ Export ข้อมูลมาไว้ที่ Host