ในโลกปัจจุบันองค์กรต่างๆมีความกระตือรือร้นในการสร้างคอนเทนเนอร์ซึ่งต้องใช้ทักษะเครือข่ายที่แข็งแกร่งเพื่อกำหนดค่าสถาปัตยกรรมคอนเทนเนอร์อย่างเหมาะสมดังนั้นจึงนำเสนอแนวคิดของ Docker Networking
ในบล็อกเกี่ยวกับ Docker Networking นี้คุณจะได้อ่านหัวข้อต่อไปนี้:
- Docker คืออะไร?
- เครือข่ายใน Docker
- เป้าหมายของ Docker Networking
- แบบจำลองเครือข่ายคอนเทนเนอร์
- ไดรเวอร์เครือข่าย
- Hands-On
Docker คืออะไร?
ในการทำความเข้าใจ Docker คุณจำเป็นต้องทราบเกี่ยวกับประวัติความเป็นมาของการปรับใช้แอปพลิเคชันก่อนหน้านี้และวิธีการปรับใช้แอปพลิเคชันโดยใช้คอนเทนเนอร์
วิธีการคัดลอกลึกใน java
ดังที่คุณเห็นในแผนภาพด้านบนวิธีการเดิมมีแอปพลิเคชันบนโฮสต์ดังนั้น n จำนวนแอปพลิเคชันจะแชร์ไลบรารีที่มีอยู่ในระบบปฏิบัติการนั้นแต่เมื่อใช้ containerization ระบบปฏิบัติการจะมีเคอร์เนลซึ่งเป็นเพียงสิ่งเดียวที่จะใช้ร่วมกันระหว่างแอปพลิเคชันทั้งหมดดังนั้นแอปพลิเคชันจึงไม่สามารถเข้าถึงห้องสมุดของกันและกันได้
ดังนั้น, นักเทียบท่า พูดง่ายๆคือเป็นแพลตฟอร์มแบบเปิดสำหรับการพัฒนาจัดส่งและรันแอพพลิเคชั่นทำให้ผู้ใช้สามารถแยกแอพพลิเคชั่นออกจากโครงสร้างพื้นฐานด้วยความช่วยเหลือของ ตู้คอนเทนเนอร์ เพื่อส่งมอบซอฟต์แวร์ได้อย่างรวดเร็ว
ดังนั้นคอนเทนเนอร์เหล่านี้สื่อสารกันอย่างไรในสถานการณ์ต่างๆ
Docker Networking
ก่อนที่ฉันจะดำน้ำลึกใน Docker Networking ให้ฉันแสดงขั้นตอนการทำงานของ Docker
ดังที่คุณเห็นในแผนภาพด้านบน นักพัฒนาเขียนโค้ดที่กำหนดข้อกำหนดของแอปพลิเคชันหรือการอ้างอิงในไฟล์ Docker ที่เขียนได้ง่ายและไฟล์ Docker นี้จะสร้าง Docker Images ดังนั้นการอ้างอิงใด ๆ ที่จำเป็นสำหรับแอปพลิเคชันเฉพาะจึงมีอยู่ในภาพนี้
ตอนนี้ Docker Containers ไม่ใช่แค่อินสแตนซ์รันไทม์ของ Docker Image รูปภาพเหล่านี้จะถูกอัพโหลดไปยัง Docker Hub (ที่เก็บ Git สำหรับ Docker Images) ซึ่งมีที่เก็บสาธารณะ / ส่วนตัว
ดังนั้นจากที่เก็บสาธารณะคุณสามารถดึงภาพของคุณได้เช่นกันและคุณสามารถอัปโหลดภาพของคุณเองไปยัง Docker Hub จากนั้นจาก Docker Hub ทีมต่างๆเช่น Quality Assurance หรือ Production team จะดึงภาพนั้นและจัดเตรียมคอนเทนเนอร์ของตนเอง แต่ละคอนเทนเนอร์เหล่านี้สื่อสารกันผ่านเครือข่ายเพื่อดำเนินการตามที่กำหนดและนี่ไม่ใช่อะไรนอกจาก Docker Networking
ดังนั้นคุณสามารถกำหนด Docker Networking เป็นช่องทางการสื่อสารซึ่งคอนเทนเนอร์ที่แยกได้ทั้งหมดจะสื่อสารกันในสถานการณ์ต่างๆเพื่อดำเนินการตามที่ต้องการ
คุณคิดว่าเป้าหมายของ Docker Networking คืออะไร?
เป้าหมายของ Docker Networking
ความยืดหยุ่น - Docker ให้ความยืดหยุ่นโดยเปิดใช้งานแอพพลิเคชั่นจำนวนเท่าใดก็ได้บนแพลตฟอร์มต่างๆเพื่อสื่อสารกัน
ข้ามแพลตฟอร์ม - Docker สามารถใช้งานได้อย่างง่ายดายในข้ามแพลตฟอร์มซึ่งทำงานบนเซิร์ฟเวอร์ต่างๆด้วยความช่วยเหลือของ Docker Swarm Clusters
ความสามารถในการปรับขนาด - Docker เป็นเครือข่ายแบบกระจายเต็มรูปแบบซึ่งช่วยให้แอปพลิเคชั่นเติบโตและขยายขนาดทีละรายการในขณะที่มั่นใจในประสิทธิภาพ
กระจายอำนาจ - Docker ใช้เครือข่ายแบบกระจายศูนย์ซึ่งทำให้ความสามารถในการแพร่กระจายแอปพลิเคชันและพร้อมใช้งานสูง ในกรณีที่คอนเทนเนอร์หรือโฮสต์หายไปจากกลุ่มทรัพยากรของคุณอย่างกะทันหันคุณสามารถเรียกใช้ทรัพยากรเพิ่มเติมหรือส่งต่อไปยังบริการที่ยังพร้อมใช้งาน
ใช้งานง่าย - Docker ช่วยให้การปรับใช้บริการเป็นไปโดยอัตโนมัติทำให้ง่ายต่อการใช้งานในชีวิตประจำวัน
สนับสนุน - Docker นำเสนอการรองรับแบบสำเร็จรูป ดังนั้นความสามารถในการใช้ Docker Enterprise Edition และฟังก์ชันทั้งหมดที่ง่ายและตรงไปตรงมาทำให้แพลตฟอร์ม Docker ใช้งานได้ง่ายมาก
ในการเปิดใช้งานเป้าหมายข้างต้นคุณต้องมีสิ่งที่เรียกว่า Container Network Model
ต้องการสำรวจขั้นตอน DevOps ต่างๆหรือไม่?แบบจำลองเครือข่ายคอนเทนเนอร์ (CNM)
ก่อนที่ฉันจะบอกคุณว่า Container Network Model คืออะไรให้ฉันสรุปเกี่ยวกับ Libnetwork ที่จำเป็นก่อนที่คุณจะเข้าใจ CNM
Libnetwork เป็นไลบรารี Docker แบบโอเพนซอร์สซึ่งใช้แนวคิดหลักทั้งหมดที่ประกอบเป็น CNM
ดังนั้น, แบบจำลองเครือข่ายคอนเทนเนอร์ (CNM) กำหนดขั้นตอนที่จำเป็นในการจัดเตรียมระบบเครือข่ายสำหรับคอนเทนเนอร์โดยใช้ไดรเวอร์เครือข่ายหลายตัว CNM ต้องการที่เก็บคีย์ - ค่าแบบกระจายเช่นคอนโซลเพื่อจัดเก็บการกำหนดค่าเครือข่าย
CNM มีอินเทอร์เฟซสำหรับปลั๊กอิน IPAM และปลั๊กอินเครือข่าย
API ของปลั๊กอิน IPAM ใช้เพื่อสร้าง / ลบพูลที่อยู่และจัดสรร / ยกเลิกการจัดสรรที่อยู่ IP ของคอนเทนเนอร์ในขณะที่ API ของปลั๊กอินเครือข่ายใช้เพื่อสร้าง / ลบเครือข่ายและเพิ่ม / ลบคอนเทนเนอร์ออกจากเครือข่าย
CNM ได้สร้างขึ้นจากวัตถุ 5 อย่าง ได้แก่ Network Controller, Driver, Network, Endpoint และ Sandbox
ออบเจ็กต์แบบจำลองเครือข่ายคอนเทนเนอร์
ตัวควบคุมเครือข่าย: จัดเตรียมจุดเริ่มต้นใน Libnetwork ที่เปิดเผย API แบบง่ายสำหรับ Docker Engine เพื่อจัดสรรและจัดการเครือข่าย เนื่องจาก Libnetwork รองรับไดรเวอร์ในตัวและระยะไกลหลายตัว Network Controller จึงช่วยให้ผู้ใช้สามารถแนบไดรเวอร์เฉพาะกับเครือข่ายที่กำหนดได้
คนขับ: เป็นเจ้าของเครือข่ายและรับผิดชอบในการจัดการเครือข่ายโดยมีไดรเวอร์หลายตัวเข้าร่วมเพื่อตอบสนองกรณีการใช้งานและสถานการณ์การปรับใช้ที่หลากหลาย
เครือข่าย: ให้การเชื่อมต่อระหว่างกลุ่มปลายทางที่อยู่ในเครือข่ายเดียวกันและแยกออกจากส่วนที่เหลือ ดังนั้นเมื่อใดก็ตามที่มีการสร้างหรืออัปเดตเครือข่ายไดรเวอร์ที่เกี่ยวข้องจะได้รับแจ้งถึงเหตุการณ์
จุดสิ้นสุด: ให้การเชื่อมต่อสำหรับบริการที่เปิดเผยโดยคอนเทนเนอร์ในเครือข่ายกับบริการอื่น ๆ ที่จัดหาโดยคอนเทนเนอร์อื่นในเครือข่าย จุดสิ้นสุดหมายถึงบริการและไม่จำเป็นต้องเป็นคอนเทนเนอร์เฉพาะ Endpoint ก็มีขอบเขตส่วนกลางภายในคลัสเตอร์เช่นกัน
แซนด์บ็อกซ์: สร้างขึ้นเมื่อผู้ใช้ร้องขอให้สร้างปลายทางบนเครือข่าย แซนด์บ็อกซ์สามารถมีปลายทางหลายจุดที่เชื่อมต่อกับเครือข่ายที่แตกต่างกันซึ่งแสดงถึงการกำหนดค่าเครือข่ายของคอนเทนเนอร์เช่นที่อยู่ IP ที่อยู่ MAC เส้นทาง DNS
ดังนั้นนี่คือ 5 ออบเจ็กต์หลักของ CNM
ตอนนี้ให้ฉันบอกคุณเกี่ยวกับไดรเวอร์เครือข่ายต่างๆที่เกี่ยวข้องกับเครือข่าย Docker
ต้องการเรียนรู้ DevOps ไปอีกระดับหรือไม่?ไดรเวอร์เครือข่าย
ไดรเวอร์เครือข่ายส่วนใหญ่มี 5 ตัว ได้แก่ Bridge, Host, None, Overlay, Macvlan
สะพาน: เครือข่ายบริดจ์เป็นเครือข่ายภายในเริ่มต้นส่วนตัวที่สร้างขึ้นโดยนักเทียบท่าบนโฮสต์ ดังนั้นคอนเทนเนอร์ทั้งหมดจะได้รับที่อยู่ IP ภายในและคอนเทนเนอร์เหล่านี้สามารถเข้าถึงกันได้โดยใช้ IP ภายในนี้ โดยปกติเครือข่าย Bridge จะใช้เมื่อแอปพลิเคชันของคุณทำงานในคอนเทนเนอร์แบบสแตนด์อโลนที่ต้องการสื่อสาร
โฮสต์ : ไดรเวอร์นี้จะลบการแยกเครือข่ายระหว่างโฮสต์นักเทียบท่าและคอนเทนเนอร์นักเทียบท่าเพื่อใช้เครือข่ายของโฮสต์โดยตรง ด้วยเหตุนี้คุณจะไม่สามารถเรียกใช้เว็บคอนเทนเนอร์หลาย ๆ เว็บบนโฮสต์เดียวกันบนพอร์ตเดียวกันได้เนื่องจากตอนนี้พอร์ตเป็นเรื่องปกติสำหรับคอนเทนเนอร์ทั้งหมดในเครือข่ายโฮสต์
ไม่มี : ในเครือข่ายประเภทนี้คอนเทนเนอร์ไม่ได้เชื่อมต่อกับเครือข่ายใด ๆ และไม่มีการเข้าถึงเครือข่ายภายนอกหรือคอนเทนเนอร์อื่น ๆ ดังนั้นเครือข่ายนี้จะใช้เมื่อคุณต้องการปิดการใช้งานสแต็กเครือข่ายอย่างสมบูรณ์บนคอนเทนเนอร์และสร้างอุปกรณ์ย้อนกลับเท่านั้น
ซ้อนทับ : สร้างเครือข่ายส่วนตัวภายในที่ครอบคลุมทุกโหนดที่เข้าร่วมในคลัสเตอร์ swarm ดังนั้นเครือข่ายโอเวอร์เลย์จึงอำนวยความสะดวกในการสื่อสารระหว่างบริการฝูงและคอนเทนเนอร์แบบสแตนด์อโลนหรือระหว่างคอนเทนเนอร์แบบสแตนด์อโลนสองคอนเทนเนอร์บน Docker Daemons ที่แตกต่างกัน
Macvlan: ช่วยให้คุณกำหนดที่อยู่ MAC ให้กับคอนเทนเนอร์ทำให้ปรากฏเป็นอุปกรณ์จริงบนเครือข่ายของคุณ จากนั้น Docker daemon จะกำหนดเส้นทางการรับส่งข้อมูลไปยังคอนเทนเนอร์ตามที่อยู่ MAC ไดรเวอร์ Macvlan เป็นตัวเลือกที่ดีที่สุดเมื่อคุณคาดว่าจะเชื่อมต่อโดยตรงกับเครือข่ายจริงแทนที่จะกำหนดเส้นทางผ่านสแต็กเครือข่ายของโฮสต์ Docker
เอาล่ะทฤษฎีทั้งหมดที่จำเป็นในการทำความเข้าใจ Docker Networking ตอนนี้ให้ฉันไปต่อและแสดงให้คุณเห็นว่าเครือข่ายถูกสร้างขึ้นและคอนเทนเนอร์สื่อสารกันอย่างไร
Hands-On
ดังนั้นด้วยสมมติฐานที่ว่าคุณทุกคนได้ติดตั้ง Docker ในระบบของคุณฉันจึงมีสถานการณ์ที่จะแสดง
สมมติว่าคุณต้องการจัดเก็บชื่อหลักสูตรและ ID หลักสูตรซึ่งคุณจะต้องมีเว็บแอปพลิเคชัน โดยทั่วไปคุณต้องมีคอนเทนเนอร์หนึ่งรายการสำหรับเว็บแอปพลิเคชันและคุณต้องมีอีกหนึ่งคอนเทนเนอร์เป็น MySQL สำหรับแบ็กเอนด์คอนเทนเนอร์ MySQL นั้นควรเชื่อมโยงกับคอนเทนเนอร์เว็บแอปพลิเคชัน
ฉันจะดำเนินการตามตัวอย่างที่ระบุไว้ข้างต้นได้อย่างไร
ขั้นตอนที่เกี่ยวข้อง:
- เริ่มต้น Docker Swarm เพื่อสร้างคลัสเตอร์ Swarm
- สร้างเครือข่ายโอเวอร์เลย์
- สร้างบริการสำหรับทั้งเว็บแอปพลิเคชันและ MySQL
- เชื่อมต่อแอพพลิเคชั่นผ่านเครือข่าย
มาเริ่มกันเลย!
ขั้นตอนที่ 1: เริ่มต้น Docker Swarm บนเครื่อง
นักเทียบท่าเริ่มต้น - โฆษณา - แอด 192.168.56.101
แฟล็ก –advertise-addr กำหนดค่าโหนดผู้จัดการเพื่อเผยแพร่แอดเดรสเป็น 192.168.56.101 โหนดอื่น ๆ ในฝูงต้องสามารถเข้าถึงผู้จัดการที่อยู่ IP
ขั้นตอนที่ 2: ตอนนี้ถ้าคุณต้องการเข้าร่วมโหนดผู้จัดการนี้กับโหนดผู้ปฏิบัติงานให้คัดลอกลิงก์ที่คุณได้รับเมื่อคุณเริ่มต้นฝูงบนโหนดผู้ปฏิบัติงาน
ขั้นตอนที่ 3: สร้างเครือข่ายซ้อนทับ
เครือข่ายนักเทียบท่าสร้าง -d โอเวอร์เลย์ myoverlaynetwork
โดยที่ myoverlay คือชื่อเครือข่ายและ -d เปิดใช้งาน Docker Daemon เพื่อทำงานในพื้นหลัง
ขั้นตอนที่ 4.1: สร้างบริการ webapp1 และใช้เครือข่ายที่คุณสร้างขึ้นเพื่อปรับใช้บริการนี้ผ่านคลัสเตอร์ swarm
บริการนักเทียบท่าสร้าง - ชื่อ webapp1 -d --network myoverlaynetwork -p 8001: 80 hshar / webapp
ที่ไหน -pมีไว้สำหรับการส่งต่อพอร์ตhsharคือชื่อบัญชีบน Docker Hub และ webapp เป็นชื่อของเว็บแอปพลิเคชันที่มีอยู่แล้วบน Docker Hub
ขั้นตอนที่ 4.2: ตอนนี้ตรวจสอบว่ามีการสร้างบริการหรือไม่
บริการนักเทียบท่า ls
ขั้นตอนที่ 5.1: ตอนนี้สร้างบริการ MySQL และใช้เครือข่ายที่คุณสร้างขึ้นเพื่อปรับใช้บริการผ่านคลัสเตอร์ฝูง
บริการนักเทียบท่าสร้าง - ชื่อ mysql -d --network myoverlaynetwork -p 3306: 3306 hshar / mysql: 5.5
ขั้นตอนที่ 5.2: ตอนนี้ตรวจสอบว่ามีการสร้างบริการหรือไม่
บริการนักเทียบท่า ls
ขั้นตอนที่ 6.1: หลังจากนั้นตรวจสอบว่าคอนเทนเนอร์ใดกำลังทำงานบนโหนดหลักของคุณและไปที่คอนเทนเนอร์ hshar / webapp
def __init__ python
นักเทียบท่า ps
ขั้นตอนที่ 6.2: ดังนั้นคุณจะเห็นว่ามีเพียงบริการเว็บแอปเท่านั้นที่อยู่ในโหนดผู้จัดการ ดังนั้นเข้าไปในคอนเทนเนอร์ webapp
นักเทียบท่า exec -it container_id bash nano var / www / html / index.php
คำสั่ง ps ของนักเทียบท่าจะแสดงรายการคอนเทนเนอร์ของคุณทั้งสองด้วยรหัสคอนเทนเนอร์ตามลำดับ คำสั่งที่สองจะเปิดใช้งานคอนเทนเนอร์นั้นในโหมดโต้ตอบ
ขั้นตอนที่ 7: ตอนนี้เปลี่ยน $ servername จาก localhost เป็น mysql และ $ password จาก“”” เป็น“ edureka” และเปลี่ยนการกรอกรายละเอียดฐานข้อมูลทั้งหมดที่ต้องการและบันทึกไฟล์ index.php ของคุณโดยใช้แป้นพิมพ์ลัด Ctrl + x และหลังจากนั้น y เพื่อบันทึกแล้วกด Enter
ขั้นตอนที่ 8: ตอนนี้ไปที่คอนเทนเนอร์ mysql ซึ่งทำงานบนโหนดอื่น
นักเทียบท่า exec -it container_id bash
ขั้นตอนที่ 9: เมื่อคุณเข้าไปใน mysql container ให้ป้อนคำสั่งด้านล่างเพื่อใช้ฐานข้อมูลใน MySQL
ขั้นตอนที่ 9.1: รับการเข้าถึงเพื่อใช้ mysql container
mysql -u root -pedureka
โดยที่ -u แสดงถึงผู้ใช้และ -p คือรหัสผ่านของเครื่องของคุณ
ขั้นตอนที่ 9.2: สร้างฐานข้อมูลใน mysql ซึ่งจะใช้ในการรับข้อมูลจาก webapp1
สร้างฐานข้อมูล HandsOn
ขั้นตอนที่ 9.3: ใช้ฐานข้อมูลที่สร้างขึ้น
ใช้ HandsOn
ขั้นตอนที่ 9.4: สร้างตารางในฐานข้อมูลนี้ซึ่งจะใช้ในการรับข้อมูลจาก webapp1
สร้างตารางรายละเอียดหลักสูตร (ชื่อหลักสูตร VARCHAR (10), รหัส VARCHAR (11))
ขั้นตอนที่ 9.5: ตอนนี้ออกจาก MySQL และคอนเทนเนอร์โดยใช้คำสั่ง ทางออก .
ขั้นตอนที่ 10: ไปที่เบราว์เซอร์ของคุณและป้อนที่อยู่เป็น localhost: 8001 / index.php . เพื่อเปิดเว็บแอปพลิเคชันของคุณ ตอนนี้ป้อนรายละเอียดของหลักสูตรและคลิกที่ ส่งแบบสอบถาม .
ขั้นตอนที่ 11: เมื่อคุณคลิกที่ Submit Query ให้ไปที่โหนดที่บริการ MySQL ของคุณกำลังทำงานอยู่จากนั้นเข้าไปในคอนเทนเนอร์
นักเทียบท่า exec -it container_id bash mysql -u root -pedureka ใช้ตาราง HandsOn SHOW เลือก * จาก course_details
สิ่งนี้จะแสดงผลลัพธ์ของหลักสูตรทั้งหมดที่คุณได้กรอกรายละเอียดไว้
ที่นี่ฉันจบบล็อก Docker Networking ฉันหวังว่าคุณจะสนุกกับโพสต์นี้ คุณสามารถตรวจสอบ บล็อกอื่น ๆ ในซีรีส์ด้วยซึ่งเกี่ยวข้องกับพื้นฐานของ Docker
หากคุณพบว่าบล็อก Docker Container นี้เกี่ยวข้องโปรดดูที่ไฟล์ โดย Edureka บริษัท การเรียนรู้ออนไลน์ที่เชื่อถือได้พร้อมเครือข่ายผู้เรียนที่พึงพอใจมากกว่า 450,000 คนกระจายอยู่ทั่วโลก หลักสูตรการฝึกอบรมการรับรอง Edureka DevOps ช่วยให้ผู้เรียนมีความเชี่ยวชาญในกระบวนการและเครื่องมือ DevOps ต่างๆเช่น Puppet, Jenkins, Docker, Nagios, Ansible และ GIT สำหรับการทำหลายขั้นตอนใน SDLC โดยอัตโนมัติ
กำลังมองหาการรับรองใน DevOps?มีคำถามสำหรับฉัน? โปรดระบุไว้ในส่วนความคิดเห็นแล้วเราจะติดต่อกลับไป