‫ในการบรรยายนี้ เราจะพูดถึงการผูกมัดและข้อมูลถาวรในการเมานท์เหล่านั้น ข้อกำหนดคือสิ่งที่คุณเพิ่งรู้เกี่ยวกับการจัดการคอนเทนเนอร์และวิธีการใช้งานคอนเทนเนอร์
‫โดดกันเลย มาพูดถึงการผูกมัดกัน พวกมันเจ๋งจริงๆ
‫เมื่อฉันเรียนรู้เกี่ยวกับพวกเขาครั้งแรก มันทำให้ฉันรู้สึกว่าฉันจะใช้ Docker อย่างง่ายดายเพื่อการพัฒนาในท้องถิ่นได้อย่างไร
‫จริงๆ แล้ว bind mount เป็นเพียงการแมปไฟล์โฮสต์ หรือไดเร็กทอรี ลงในไฟล์คอนเทนเนอร์หรือไดเร็กทอรี
‫คุณทำได้แค่นั้น
‫คุณสามารถระบุไดเร็กทอรีหรือเพียงไฟล์เดียว ในเบื้องหลัง มีเพียงสองตำแหน่งที่ชี้ไปยังตำแหน่งทางกายภาพเดียวกันบนดิสก์
‫อีกครั้ง สิ่งนี้จะข้าม UFS จริง ๆ เช่นเดียวกับโวลุ่มอื่น ๆ เพื่อไม่ให้ล้างตำแหน่งโฮสต์ของคุณเมื่อคุณลบคอนเทนเนอร์
‫หากมีไฟล์ใดๆ ในคอนเทนเนอร์ที่คุณแมปไฟล์โฮสต์ด้วย ไฟล์โฮสต์จะชนะ ไม่ได้ลบไฟล์ในคอนเทนเนอร์ที่เขียนทับจริง
‫ๆ เพราะไม่ได้เขียนทับอะไรในคอนเทนเนอร์จริงๆ
‫มันอยู่ที่นั่นในขณะที่ตัวยึดผูกอยู่
‫นาทีที่คุณไม่ต้องการการเมานต์การผูกอีกต่อไป และคุณเรียกใช้คอนเทนเนอร์อีกครั้งโดยไม่มีคอนเทนเนอร์
‫คุณจะเห็นข้อมูลพื้นฐานที่เคยมีมาก่อน เนื่องจากโดยปกติแล้วการเมานต์การผูกมัดมักเป็นโฮสต์เฉพาะ
‫จึงจำเป็นต้องมีข้อมูลเฉพาะเพื่ออยู่บนฮาร์ดไดรฟ์ของโฮสต์จึงจะสามารถทำงานได้
‫คุณไม่สามารถระบุได้ใน Dockerfile
‫คุณต้องใช้เมื่อรันไทม์เมื่อคุณใช้คำสั่ง docker container run คุณสามารถดูรูปแบบได้ที่นี่
‫มันคือ -v ที่เราเคยใช้มาก่อน ที่ด้านซ้ายของโคลอนเท่านั้น
‫จริงๆ แล้วเรากำลังใส่พาธแบบเต็มมากกว่าแค่ชื่อ
‫และวิธีที่ Docker สามารถบอกความแตกต่างระหว่างวอลลุมที่มีชื่อได้ อย่างที่เราทำเมื่อสักครู่นี้
‫กับ bind mount ก็คือการเมานต์ที่ผูกนั้นเริ่มต้นด้วยเครื่องหมายสแลช
‫บน Windows คุณจะสังเกตเห็นว่าเป็นเครื่องหมายทับสองตัว ตามด้วยอักษรระบุไดรฟ์ ตามด้วยเส้นทางของคุณ
‫ตราบใดที่คุณมีเครื่องหมายทวิภาคด้านซ้ายและด้านขวา คุณสามารถแมปสิ่งที่คุณต้องการจากโฮสต์ลงในคอนเทนเนอร์ได้จริงๆ
‫และคุณยังสามารถระบุสิ่งต่างๆ เช่น อ่านอย่างเดียวได้
‫ประเด็นสำคัญคือการพัฒนาและเรียกใช้บริการภายในคอนเทนเนอร์ของคุณซึ่งกำลังเข้าถึงไฟล์ที่คุณใช้บนโฮสต์หรือการเปลี่ยนแปลง
‫ลองทำสิ่งนั้นกับ Nginx
‫หากคุณไปที่รูทของที่เก็บของเราสำหรับหลักสูตรนี้ จากนั้นเราจะไปที่ไดเร็กทอรี Dockerfile
‫sample 2 ตอนนี้เราอยู่ที่นี่ก่อนหน้านี้
‫ถ้าคุณจำได้ มีสองไฟล์ นี่สำหรับ Nginx ใช่ไหม
‫ถ้าเราดูที่ Dockerfile อย่างรวดเร็ว มันค่อนข้างง่าย เป็นเพียงการระบุไดเร็กทอรีการทำงานแล้วคัดลอกไฟล์ดัชนีลงในไดเร็กทอรีนั้น
‫ไม่มีเล่มที่นี่
‫การเชื่อมต่อแบบผูกไม่จำเป็นต้องใช้ไดรฟ์ข้อมูล แม้ว่าจะมีไดรฟ์ข้อมูลอยู่ที่นั่นก็ตาม
‫เจ้าบ้านชนะเสมอ จำได้ไหม? เมื่อเรารัน docker container
‫เราทำ -d... ตั้งชื่อมันว่า nginx
‫ให้พอร์ต 8080 เหมือนเดิม
‫จากนั้นเราจะเพิ่มระดับเสียงในครั้งนี้ และฉันต้องบอกมันว่าไดเร็กทอรีการทำงานปัจจุบันของฉันจะถูกติดตั้งลงในไดเร็กทอรีการทำงานนั้นในคอนเทนเนอร์
‫เนื่องจากไฟล์ดัชนีของฉันอยู่ที่นี่ในโฟลเดอร์นี้
‫ฉันจึงต้องการให้มันอยู่ในคอนเทนเนอร์ เพื่อที่ฉันจะได้สามารถแก้ไขได้ที่นี่ และมันปรากฏอยู่ในคอนเทนเนอร์
‫ดังนั้นมันจะสมเหตุสมผลในไม่กี่วินาที
‫นี่คือเคล็ดลับสั้นๆ สั้นๆ แทนที่จะต้องคิดหาเส้นทางทั้งหมดและพิมพ์ทั้งหมดลงไป
‫คุณสามารถใช้ pwd ตรงนี้ได้
‫ซึ่งเป็นเชลล์ช็อตคัทที่ระบุว่า 'พิมพ์ไดเร็กทอรีการทำงานและแทนที่คำสั่งนี้ด้วยพาธนั้น
‫'
‫จากนั้นเราจะใช้ไดเร็กทอรีการทำงานเดียวกันจาก Dockerfile ที่นั่น จากนั้นเราจะระบุอิมเมจ
‫Nginx
‫สิ่งที่ฉันจะทำ เร็วๆ นี้ คือ ฉันจะเปิดหน้าต่างเทอร์มินัลอีกหน้าต่างหนึ่ง เพื่อให้เราทำสองสิ่งพร้อมกันได้
‫คุณไม่จำเป็นต้องทำเช่นนี้จริงๆ
‫โดยพื้นฐานแล้ว เราจะแก้ไขไฟล์บนโฮสต์ของเรา จากนั้นฉันจะอยู่ในคอนเทนเนอร์และดูว่าเกิดอะไรขึ้น
‫เพื่อให้แน่ใจว่าใช้งานได้
‫ไปที่ localhost
‫ตกลง นี่ไม่ใช่ไฟล์ Nginx HTML เริ่มต้น
‫และเราใช้อิมเมจ Nginx ปกติ
‫เราไม่ได้ใช้แบบกำหนดเองจากไดเรกทอรีนี้
‫เราเพิ่งใช้ภาพสต็อก เพื่อพิสูจน์จุดนั้น เราสามารถทำได้เช่นเดียวกัน
‫คำสั่งที่แน่นอนอีกครั้ง แต่เอา -v ออก และฉันจะเรียกใช้บนพอร์ต 8080 แทน และผมจะเรียกอันนี้ว่า nginx2
‫ถ้าฉันไปที่เบราว์เซอร์และไปที่ localhost 8080 นั่นคือดัชนี nginx เริ่มต้น ไฟล์ .html
‫อันนี้เป็นแบบกำหนดเองที่เราใช้ในไดเร็กทอรีนี้
‫ดังนั้นเราจึงสามารถเห็นได้ว่ามีการแมปอย่างถูกต้อง
‫ถ้าฉันเปิดแท็บอื่นที่นี่และรับบรรทัดคำสั่งในคอนเทนเนอร์
‫จากนั้นไปที่ไดเร็กทอรีนั้น
‫คุณจะสังเกตเห็นว่าเราสามารถเห็น Dockerfile ได้เพราะเราแมปไดเร็กทอรีทั้งหมด
‫ถ้าทางซ้ายมือ ถ้าเราสร้างไฟล์ขึ้นมาใหม่จริงๆ และฉันสามารถใช้คำสั่ง Linux touch นั้นเพื่อสร้างไฟล์ใหม่ได้
‫แล้วชิดขวา... อ๊ะ... แค่ลืมไปว่า... ls
‫-al และคุณจะเห็นสิ่งนั้นในไฟล์ของคุณ
‫หวังว่าคุณจะเข้าใจสิ่งที่เกิดขึ้นที่นี่ ว่าสถานที่ทั้งสองนี้เป็นสถานที่เดียวกัน
‫และถ้าฉันสะท้อนอะไรบางอย่างในไฟล์ testme นั้นแล้ว...
‫ไปเลย
‫nginx ของเราสามารถเห็นการเปลี่ยนแปลงได้ เนื่องจากเป็นเพียงเส้นทางไฟล์ปกติในคอนเทนเนอร์
‫และไฟล์เหล่านั้นอยู่บนโฮสต์
‫ถ้าฉันลบมันในคอนเทนเนอร์ พวกเขาจะถูกลบบนโฮสต์เพราะเป็นไฟล์เดียวกัน
‫นี่คือช่วงเวลาที่ฉันมักจะให้นักพัฒนาได้คิดเกี่ยวกับสภาพแวดล้อมการพัฒนาทั้งหมดที่พวกเขามี
‫ซึ่งเป็นการตั้งค่าที่ซับซ้อนนี้ บางทีพวกเขาอาจใช้ Vagrant หรือวิธีการอื่นๆ ในการตั้งค่าสภาพแวดล้อมที่สมบูรณ์แบบ
‫และพวกเขาก็เริ่มเห็นว่าสิ่งนี้จะทำให้ง่ายขึ้นมากได้อย่างไร
‫เนื่องจากฉันไม่ต้องตั้งค่าให้ยุ่งยากบน Mac ฉันจึงใช้คอนเทนเนอร์
‫ฉันใช้คำสั่ง -v กับการเมานต์ และตอนนี้โค้ดของฉัน บนโฮสต์ของฉัน สามารถแก้ไขได้บนโฮสต์ของฉัน
‫และฉันไม่จำเป็นต้องเข้าไปในเปลือกของภาชนะจริงๆ
‫โดยปกติ คุณสามารถเรียกใช้คอนเทนเนอร์และดูบันทึกเพื่อดูว่ามีข้อผิดพลาดใดๆ หรือไม่ในขณะที่คุณกำลังเขียนโค้ด
‫แน่นอน นี่เป็นตัวอย่างง่ายๆ ของ Nginx ต่อมา เราจะมีตัวอย่างเฉพาะของสภาพแวดล้อมการพัฒนาที่แตกต่างกันสำหรับการพัฒนาในท้องถิ่นและคอนเทนเนอร์