Volumes

Volumes

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

ซึ่งการ mount จะมีด้วยกัน 3 แบบดังรูป

docker-volume

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