สถาปัตยกรรมนักเทียบท่า: เหตุใดจึงสำคัญ?



บล็อกนี้กล่าวถึงสถาปัตยกรรมนักเทียบท่าและส่วนประกอบต่างๆ มันเน้นคุณสมบัติของนักเทียบท่าที่บอกเหตุผลของความนิยม

พวกเราหลายคนเชื่อว่า Docker เป็นส่วนหนึ่งของ . ดังนั้นเบื้องหลังเครื่องมือที่น่าทึ่งนี้จะต้องมีสถาปัตยกรรมที่น่าทึ่ง ในบล็อกนี้ฉันจะพูดถึงทุกสิ่งที่คุณต้องรู้เกี่ยวกับสถาปัตยกรรม Docker นี่คือประเด็นที่ฉันจะพูดถึงที่นี่:

  1. Virtualization แบบดั้งเดิมเทียบกับ Docker
  2. เวิร์กโฟลว์ของ Docker
  3. สถาปัตยกรรม Docker

Virtualization Vs Docker แบบดั้งเดิม

VM (Virtual Machine) คืออะไร?

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





ก่อนหน้านี้เราเคยสร้างเครื่องเสมือนและ VM แต่ละเครื่องมีระบบปฏิบัติการที่ใช้พื้นที่มากและทำให้มันหนัก

Docker คืออะไร?

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



คอนเทนเนอร์ไม่ขึ้นอยู่กับแพลตฟอร์มและด้วยเหตุนี้ Docker จึงสามารถทำงานได้ทั้งบนแพลตฟอร์มที่ใช้ Windows และ Linux ในความเป็นจริง Docker ยังสามารถเรียกใช้ภายในเครื่องเสมือนได้หากมีความจำเป็นต้องทำเช่นนั้น จุดประสงค์หลักของ Docker คือช่วยให้คุณสามารถเรียกใช้แอปพลิเคชัน microservice ในสถาปัตยกรรมแบบกระจาย

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

สร้างอินสแตนซ์ ec2 จาก snapshot

กล่าวอีกนัยหนึ่งในขณะที่ Virtual Machines เป็นนามธรรมเซิร์ฟเวอร์ฮาร์ดแวร์ทั้งหมด Containers เป็นนามธรรมเคอร์เนลของระบบปฏิบัติการ นี่เป็นวิธีการที่แตกต่างกันโดยสิ้นเชิงสำหรับการจำลองเสมือนและส่งผลให้อินสแตนซ์เร็วขึ้นและมีน้ำหนักเบามากขึ้น.



vm เทียบกับนักเทียบท่า - สถาปัตยกรรมนักเทียบท่า - edureka

เวิร์กโฟลว์ของ Docker

ก่อนอื่นให้เราดูที่ Docker Engine และส่วนประกอบต่างๆเพื่อให้เรามีแนวคิดพื้นฐานว่าระบบทำงานอย่างไร Docker Engine ช่วยให้คุณพัฒนาประกอบจัดส่งและเรียกใช้แอปพลิเคชันโดยใช้ส่วนประกอบต่อไปนี้:

  1. Docker Daemon : กระบวนการพื้นหลังแบบต่อเนื่องที่จัดการอิมเมจ Docker คอนเทนเนอร์เครือข่ายและไดรฟ์ข้อมูลพื้นที่จัดเก็บ Docker daemon จะรับฟังคำขอ Docker API และประมวลผลอย่างต่อเนื่อง

  2. Docker Engine REST API : แอปพลิเคชันใช้ API เพื่อโต้ตอบกับ Docker daemon สามารถเข้าถึงได้โดยไคลเอนต์ HTTP

  3. Docker CLI : ไคลเอ็นต์อินเทอร์เฟซบรรทัดรับคำสั่งสำหรับโต้ตอบกับ Docker daemon ช่วยลดความยุ่งยากในการจัดการอินสแตนซ์คอนเทนเนอร์ได้อย่างมากและเป็นหนึ่งในเหตุผลสำคัญที่นักพัฒนาชอบใช้ Docker

ในตอนแรกไคลเอ็นต์ Docker จะพูดคุยกับ Docker daemon ซึ่งดำเนินการยกอาคารอย่างหนักรันและแจกจ่ายคอนเทนเนอร์ Docker ของเรา โดยพื้นฐานแล้วทั้งไคลเอ็นต์ Docker และ daemon สามารถรันบนระบบเดียวกันได้ นอกจากนี้เรายังสามารถเชื่อมต่อไคลเอนต์ Docker กับไฟล์Docker daemon ระยะไกล นอกจากนี้โดยใช้ REST API ไคลเอ็นต์ Docker และ daemon สื่อสารผ่านซ็อกเก็ต UNIX หรืออินเทอร์เฟซเครือข่าย

สถาปัตยกรรม Docker

สถาปัตยกรรมของ Docker ใช้โมเดลไคลเอนต์เซิร์ฟเวอร์และประกอบด้วย Docker’s Client, Docker Host, Network and Storage Components และ Docker Registry / Hub มาดูรายละเอียดแต่ละข้อกัน

Docker’s Client

ผู้ใช้ Docker สามารถโต้ตอบกับ Docker ผ่านไคลเอนต์ เมื่อคำสั่ง docker รันไคลเอ็นต์จะส่งไปยัง dockerd daemon ซึ่งจะดำเนินการดังกล่าว Docker API ถูกใช้โดยคำสั่ง Docker เป็นไปได้ที่ไคลเอ็นต์ Docker จะสื่อสารกับ daemon มากกว่าหนึ่งตัว

รหัส java เพื่อเชื่อมต่อกับ mysql

โฮสต์ Docker

โฮสต์ Docker จัดเตรียมสภาพแวดล้อมที่สมบูรณ์ในการดำเนินการและเรียกใช้แอปพลิเคชัน ประกอบด้วย Docker daemon, Images, Containers, Networks และ Storage ตามที่กล่าวไว้ก่อนหน้านี้ daemon รับผิดชอบการดำเนินการที่เกี่ยวข้องกับคอนเทนเนอร์ทั้งหมดและรับคำสั่งผ่านทาง CLI หรือREST API นอกจากนี้ยังสามารถสื่อสารกับภูตตัวอื่นเพื่อจัดการบริการของมัน

Docker Objects

1. รูปภาพ

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

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

2. ตู้คอนเทนเนอร์

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

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

3. เครือข่าย

Docker Networking เป็นทางผ่านที่คอนเทนเนอร์ที่แยกจากกันทั้งหมดสื่อสารกัน ส่วนใหญ่มีไดรเวอร์เครือข่ายห้าตัวในนักเทียบท่า:

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

    2. โฮสต์ : ไดรเวอร์นี้จะลบการแยกเครือข่ายระหว่างคอนเทนเนอร์นักเทียบท่าและโฮสต์นักเทียบท่า คุณสามารถใช้ได้เมื่อไม่ต้องการการแยกเครือข่ายระหว่างโฮสต์และคอนเทนเนอร์

    3. ซ้อนทับ : เครือข่ายนี้เปิดใช้งานบริการฝูงเพื่อสื่อสารระหว่างกัน คุณใช้เมื่อคุณต้องการให้คอนเทนเนอร์ทำงานบนโฮสต์ Docker ที่แตกต่างกันหรือเมื่อคุณต้องการสร้างบริการฝูงโดยแอปพลิเคชันหลายตัว

    4. ไม่มี : ไดรเวอร์นี้ปิดใช้งานเครือข่ายทั้งหมด

    5. macvlan : ไดรเวอร์นี้กำหนดที่อยู่ mac ให้กับคอนเทนเนอร์เพื่อให้ดูเหมือนอุปกรณ์จริง มันกำหนดเส้นทางการรับส่งข้อมูลระหว่างคอนเทนเนอร์ผ่านที่อยู่ mac ของพวกเขา คุณใช้เครือข่ายนี้เมื่อคุณต้องการให้คอนเทนเนอร์ดูเหมือนอุปกรณ์จริงเช่นขณะย้ายการตั้งค่า VM

      คลาสที่ไม่ระบุชื่อใน java]

4. การจัดเก็บ

คุณสามารถจัดเก็บข้อมูลภายในเลเยอร์ที่เขียนได้ของคอนเทนเนอร์ แต่ต้องใช้ไดรเวอร์จัดเก็บข้อมูล การไม่คงอยู่มันจะพินาศเมื่อใดก็ตามที่คอนเทนเนอร์ไม่ทำงาน ยิ่งไปกว่านั้นการถ่ายโอนข้อมูลนี้ไม่ใช่เรื่องง่าย ในส่วนที่เกี่ยวกับการจัดเก็บข้อมูลถาวร Docker มีสี่ตัวเลือก:

    1. ปริมาณข้อมูล : พวกเขาให้ความสามารถในการสร้างหน่วยเก็บข้อมูลถาวรพร้อมความสามารถในการเปลี่ยนชื่อไดรฟ์ข้อมูลแสดงรายการไดรฟ์ข้อมูลและยังแสดงรายการคอนเทนเนอร์ที่เชื่อมโยงกับไดรฟ์ข้อมูล ไดรฟ์ข้อมูลถูกวางไว้บนระบบไฟล์โฮสต์นอกคอนเทนเนอร์คัดลอกบนกลไกการเขียนและมีประสิทธิภาพพอสมควร

    2. ปริมาณคอนเทนเนอร์ : เป็นอีกทางเลือกหนึ่งที่คอนเทนเนอร์เฉพาะจะโฮสต์ไดรฟ์ข้อมูลและเชื่อมต่อไดรฟ์ข้อมูลนั้นกับคอนเทนเนอร์อื่น ในกรณีนี้คอนเทนเนอร์ปริมาตรไม่ขึ้นอยู่กับคอนเทนเนอร์ของแอปพลิเคชันดังนั้นคุณจึงสามารถแชร์กับคอนเทนเนอร์ได้มากกว่าหนึ่งคอนเทนเนอร์

    3. ไดเร็กทอรีเมาท์ : อีกทางเลือกหนึ่งคือการต่อเชื่อมไดเรกทอรีท้องถิ่นของโฮสต์ลงในคอนเทนเนอร์ ในกรณีที่กล่าวถึงก่อนหน้านี้ไดรฟ์ข้อมูลจะต้องอยู่ในโฟลเดอร์ Docker volume ในขณะที่ Directory Mounts ไดเร็กทอรีใด ๆ บนเครื่องโฮสต์สามารถใช้เป็นแหล่งสำหรับไดรฟ์ข้อมูลได้

    4. ปลั๊กอินการจัดเก็บ : Storage Plugins ให้ความสามารถในการเชื่อมต่อกับแพลตฟอร์มจัดเก็บข้อมูลภายนอก ปลั๊กอินเหล่านี้จะแมปที่เก็บข้อมูลจากโฮสต์ไปยังแหล่งภายนอกเช่นอาร์เรย์จัดเก็บข้อมูลหรืออุปกรณ์ คุณสามารถดูรายการปลั๊กอินจัดเก็บข้อมูลได้ในหน้าปลั๊กอินของ Docker

Docker’s Registry

การลงทะเบียนนักเทียบท่าคือบริการที่ให้สถานที่ที่คุณสามารถจัดเก็บและดาวน์โหลดภาพ กล่าวอีกนัยหนึ่งรีจิสทรีของ Docker มีที่เก็บ Docker ที่โฮสต์ Docker Images อย่างน้อยหนึ่งภาพ การลงทะเบียนสาธารณะประกอบด้วยสององค์ประกอบ ได้แก่ Docker Hub และ Docker Cloud คุณยังสามารถใช้การลงทะเบียนส่วนตัว คำสั่งที่พบบ่อยที่สุดเมื่อทำงานกับรีจิสเตอร์ ได้แก่ : นักเทียบท่า push, docker pull, docker run

ตอนนี้คุณเข้าใจสถาปัตยกรรม Docker แล้วลองดูสิ่งนี้ โดย Edureka บริษัท การเรียนรู้ออนไลน์ที่เชื่อถือได้ซึ่งมีเครือข่ายผู้เรียนที่พึงพอใจมากกว่า 250,000 คนกระจายอยู่ทั่วโลก หลักสูตรการฝึกอบรม Edureka DevOps Certification ช่วยให้ผู้เรียนเข้าใจว่า DevOps คืออะไรและได้รับความเชี่ยวชาญในกระบวนการและเครื่องมือต่างๆของ DevOps เช่น Puppet, Jenkins, Nagios, Ansible, Chef, Saltstack และ GIT สำหรับการทำงานหลายขั้นตอนใน SDLC โดยอัตโนมัติ

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