ในขณะที่ทำงานในโครงการพัฒนาใน Docker นักพัฒนามักต้องการแก้ไขโค้ดและดูการเปลี่ยนแปลงทันทีโดยไม่ต้องสร้างคอนเทนเนอร์ใหม่ ในสถานการณ์นี้ ให้ใช้การผูกเมานต์เพื่อเมาต์ไดเร็กทอรีโค้ดบนเครื่องโฮสต์ภายในเครื่องลงในคอนเทนเนอร์ เมื่อดำเนินการดังกล่าว การแก้ไขที่ทำกับโฮสต์จะมีผลทันทีภายในคอนเทนเนอร์ นอกจากนี้ยังมีประโยชน์เมื่อคอนเทนเนอร์ถูกลบหรือปฏิเสธเนื่องจากข้อมูลไม่สูญหาย
บทความนี้จะอธิบาย:
Docker Bind Mount คืออะไร
Docker bind mount อนุญาตให้ผู้ใช้แม็พไฟล์/ไดเร็กทอรีเฉพาะบนเครื่องโฮสต์กับไฟล์/ไดเร็กทอรีภายในคอนเทนเนอร์ ด้วยวิธีนี้ ผู้ใช้สามารถแชร์ข้อมูลระหว่างโฮสต์และคอนเทนเนอร์ และยังสามารถคงข้อมูลไว้ได้แม้ว่าคอนเทนเนอร์จะถูกหยุดหรือลบไปแล้วก็ตาม การเปลี่ยนแปลงใดๆ ที่ทำกับไฟล์ในไดเร็กทอรีหรือไฟล์ที่ใช้ร่วมกันจะมองเห็นได้จากทั้งคอนเทนเนอร์และเครื่องโฮสต์
Bind Mount ทำงานอย่างไรใน Docker
ให้เราดูตัวอย่างและดูว่า bind-mount ทำงานอย่างไรใน Docker สมมติว่าเรามีไดเร็กทอรีว่าง ' ทดสอบ ' ตั้งอยู่ที่ ' C:\นักเทียบท่า ” บนระบบท้องถิ่น ตอนนี้เราต้องการเข้าถึง ' ทดสอบ ” เนื้อหาไดเร็กทอรีที่ตำแหน่ง “ /แอป ” จากภายในภาชนะเฉพาะ ในตัวอย่างนี้ เรียกใช้คอนเทนเนอร์จากอิมเมจ Docker อย่างเป็นทางการ เช่น “ จิงซ์ ” และใช้การผูกเมานต์เพื่อเมานต์ไดเร็กทอรีเฉพาะจากเครื่องโฮสต์ลงในคอนเทนเนอร์
เพื่อความเข้าใจที่ดีขึ้นให้ทำตามขั้นตอนที่ให้ไว้
ขั้นตอนที่ 1: ผูก Mount Directory จากเครื่องโฮสต์ไปยังคอนเทนเนอร์
ขั้นแรก ให้ใช้ “ docker run -d –name <ชื่อคอนเทนเนอร์> -v <เส้นทางต้นทาง>:<เส้นทางปลายทาง> <ชื่อภาพ> ” คำสั่งและเรียกใช้คอนเทนเนอร์ มันผูกไดเร็กทอรีเมานต์จากเครื่องโฮสต์ไปยังคอนเทนเนอร์:
เรียกใช้นักเทียบท่า -d --ชื่อ ต่อของฉัน -ใน ค: / นักเทียบท่า / ทดสอบ: / แอป nginx: ล่าสุด
ที่นี่:
-
- “ -d ตัวเลือก ” ใช้เพื่อเรียกใช้คอนเทนเนอร์ในพื้นหลัง
- “ -ชื่อ ” ใช้เพื่อกำหนดชื่อคอนเทนเนอร์
- “ ต่อของฉัน ” คือชื่อคอนเทนเนอร์ของเรา
- “ -ใน ” ตัวเลือกสร้างวอลุ่มในคอนเทนเนอร์ที่แมปไดเร็กทอรีต้นทางบนเครื่องโฮสต์กับไดเร็กทอรีเป้าหมายในคอนเทนเนอร์
- “ C:/นักเทียบท่า/ทดสอบ ” คือพาธของไดเร็กทอรีต้นทาง (เครื่องโลคัล)
- “ /แอป ” คือเส้นทางไดเร็กทอรีเป้าหมาย (คอนเทนเนอร์)
- “ nginx: ล่าสุด ” เป็นอิมเมจ Docker ล่าสุด:
คำสั่งนี้สร้างคอนเทนเนอร์และอนุญาตให้เข้าถึงไฟล์จากเครื่องโฮสต์ และทำให้ง่ายต่อการจัดการการคงอยู่ของข้อมูล
ขั้นตอนที่ 2: สร้างไฟล์ใน Source Directory บนเครื่องโฮสต์
จากนั้น นำทางไปยังเส้นทางไดเร็กทอรีต้นทาง เช่น “ C:/นักเทียบท่า/ทดสอบ ” บนเครื่องโฮสต์และสร้างไฟล์ข้อความธรรมดาในนั้น ตัวอย่างเช่น เราได้สร้าง “ การสาธิต ' ไฟล์:
ขั้นตอนที่ 3: เข้าถึงไฟล์เครื่องโฮสต์ภายในคอนเทนเนอร์
ตอนนี้ พิมพ์คำสั่งที่ระบุด้านล่างเพื่อเข้าถึงเนื้อหาของคอนเทนเนอร์และเรียกใช้คำสั่งภายใน:
นักเทียบท่า ผู้บริหาร -มัน ต่อของฉัน ทุบตี
เมื่อทำเช่นนั้น เปลือกคอนเทนเนอร์จะเปิดออก
หลังจากนั้น ให้แสดงรายการเนื้อหาของคอนเทนเนอร์โดยใช้คำสั่งที่ให้ไว้:
ล
ในภาพหน้าจอด้านบน เนื้อหาทั้งหมดของคอนเทนเนอร์สามารถมองเห็นได้ เลือกไดเร็กทอรีที่ต้องการและไปที่ไดเร็กทอรี
เปลี่ยนเส้นทางไปที่ “ แอป ” ไดเร็กทอรี:
ซีดี แอป
จากนั้นให้ระบุรายการ “ แอป ” เนื้อหาไดเร็กทอรีเพื่อตรวจสอบว่าไฟล์เครื่องโลคัลมีอยู่ในนั้น:
สังเกตได้ว่า “ เดโม. txt ” มีไฟล์อยู่ภายในคอนเทนเนอร์ และเราสามารถเข้าถึงได้
ขั้นตอนที่ 4: สร้างไฟล์ภายในคอนเทนเนอร์
ถัดไป สร้างไฟล์อื่นภายในคอนเทนเนอร์โดยใช้ปุ่ม “ สัมผัส ' สั่งการ:
สัมผัส ใหม่.txt
เราได้สร้าง “ ใหม่.txt ' ไฟล์.
จากนั้น ตรวจสอบไฟล์ที่สร้างขึ้นใหม่โดยใช้คำสั่งด้านล่าง:
ล
จะเห็นได้ว่าไฟล์ “ ใหม่.txt ” ถูกสร้างขึ้นสำเร็จภายในคอนเทนเนอร์
ขั้นตอนที่ 5: ตรวจสอบไฟล์ในระบบโลคัล
สุดท้าย ไปที่เส้นทางของเครื่องโลคัลและตรวจสอบว่า ' ใหม่.txt ” มีไฟล์หรือไม่:
อย่างที่คุณเห็น ' ใหม่.txt ” มีอยู่ในเครื่องท้องถิ่นและเราสามารถเข้าถึงได้ สิ่งนี้บ่งชี้ว่าการปรับเปลี่ยนจะมีผลกับเครื่องโลคัลด้วย
ขั้นตอนที่ 6: ลบ Docker Container
ตอนนี้ให้นำคอนเทนเนอร์ออกผ่านทาง ' นักเทียบท่า rm ” คำสั่งพร้อมกับชื่อคอนเทนเนอร์:
นักเทียบท่า rm ต่อของฉัน
“ ต่อของฉัน ” ลบคอนเทนเนอร์เรียบร้อยแล้ว
ขั้นตอนที่ 7: ตรวจสอบให้แน่ใจว่าข้อมูลยังคงอยู่ในเครื่องท้องถิ่น
หลังจากลบคอนเทนเนอร์แล้ว ให้ตรวจสอบว่าข้อมูลยังคงอยู่ในเครื่องโลคัลหรือไม่:
อย่างที่คุณเห็น การเปลี่ยนแปลงยังคงอยู่แม้หลังจากลบคอนเทนเนอร์ที่เชื่อมต่อแล้ว
บทสรุป
Docker bind mount ใช้เพื่อแมปไดเร็กทอรีหรือไฟล์จากระบบโฮสต์ไปยังคอนเทนเนอร์ สร้างลิงก์ระหว่างไดเร็กทอรีหรือไฟล์ที่ระบุบนโฮสต์และระบบไฟล์ของคอนเทนเนอร์ ทำให้ง่ายต่อการจัดการหรือทำงานกับไฟล์ที่เก็บไว้นอกคอนเทนเนอร์ การเปลี่ยนแปลงใดๆ ที่ทำกับไฟล์ในไดเร็กทอรีหรือไฟล์ที่ใช้ร่วมกันจะมีผลทั้งในโฮสต์และคอนเทนเนอร์ บทความนี้อธิบายเกี่ยวกับ Docker bind mount และการทำงานใน Docker