Docker Networking - สำรวจว่าคอนเทนเนอร์สื่อสารระหว่างกันอย่างไร



เรียนรู้ทั้งหมดเกี่ยวกับความสามารถในการเชื่อมต่อเครือข่าย Docker ด้วยความเข้าใจเกี่ยวกับ Container Network Model และการใช้งานด้วย Hands-On

ในโลกปัจจุบันองค์กรต่างๆมีความกระตือรือร้นในการสร้างคอนเทนเนอร์ซึ่งต้องใช้ทักษะเครือข่ายที่แข็งแกร่งเพื่อกำหนดค่าสถาปัตยกรรมคอนเทนเนอร์อย่างเหมาะสมดังนั้นจึงนำเสนอแนวคิดของ Docker Networking

ในบล็อกเกี่ยวกับ Docker Networking นี้คุณจะได้อ่านหัวข้อต่อไปนี้:





Docker คืออะไร?

ในการทำความเข้าใจ Docker คุณจำเป็นต้องทราบเกี่ยวกับประวัติความเป็นมาของการปรับใช้แอปพลิเคชันก่อนหน้านี้และวิธีการปรับใช้แอปพลิเคชันโดยใช้คอนเทนเนอร์

การปรับใช้แอปพลิเคชันในรูปแบบเก่าและแบบใหม่ - Docker Networking - Edureka



วิธีการคัดลอกลึกใน java

ดังที่คุณเห็นในแผนภาพด้านบนวิธีการเดิมมีแอปพลิเคชันบนโฮสต์ดังนั้น n จำนวนแอปพลิเคชันจะแชร์ไลบรารีที่มีอยู่ในระบบปฏิบัติการนั้นแต่เมื่อใช้ containerization ระบบปฏิบัติการจะมีเคอร์เนลซึ่งเป็นเพียงสิ่งเดียวที่จะใช้ร่วมกันระหว่างแอปพลิเคชันทั้งหมดดังนั้นแอปพลิเคชันจึงไม่สามารถเข้าถึงห้องสมุดของกันและกันได้

ดังนั้น, นักเทียบท่า พูดง่ายๆคือเป็นแพลตฟอร์มแบบเปิดสำหรับการพัฒนาจัดส่งและรันแอพพลิเคชั่นทำให้ผู้ใช้สามารถแยกแอพพลิเคชั่นออกจากโครงสร้างพื้นฐานด้วยความช่วยเหลือของ ตู้คอนเทนเนอร์ เพื่อส่งมอบซอฟต์แวร์ได้อย่างรวดเร็ว

ดังนั้นคอนเทนเนอร์เหล่านี้สื่อสารกันอย่างไรในสถานการณ์ต่างๆ



นั่นมาจาก Docker Networking

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?

มีคำถามสำหรับฉัน? โปรดระบุไว้ในส่วนความคิดเห็นแล้วเราจะติดต่อกลับไป