คุณลักษณะที่สำคัญที่สุดของแอปพลิเคชันบนเว็บคืออะไร มีมากมาย แต่สำหรับฉัน ความพร้อมใช้งานสูง เป็นสิ่งที่สำคัญที่สุด นั่นคือสิ่งที่ Docker Swarm ช่วยให้เราประสบความสำเร็จ! ช่วยให้แอปพลิเคชันมีความพร้อมใช้งานสูง
ในไฟล์ บล็อกก่อนหน้า ฉันอธิบายวิธีการทำงานของ Docker Compose บล็อกนี้เกี่ยวกับ Docker Swarm เป็นความต่อเนื่องของอดีตและนี่คือประโยชน์ของการใช้ Docker Swarm สำหรับการจัดแอปพลิเคชันแบบหลายคอนเทนเนอร์
ในกรณีของบล็อกนี้เป็นเพียงแอปพลิเคชัน Angular ซึ่งจะเป็น Docker Swarm’ed
บันทึก : วิธีการบรรจุแอป MEAN Stack จะเหมือนกัน
Docker Swarm คืออะไร?
Docker Swarm เป็นเทคนิคในการสร้างและรักษาคลัสเตอร์ของ เครื่องมือเทียบท่า . เอ็นจิ้น Docker สามารถโฮสต์บนโหนดที่แตกต่างกันและโหนดเหล่านี้ซึ่งอยู่ในสถานที่ห่างไกลจะมีรูปแบบ a คลัสเตอร์ เมื่อเชื่อมต่อในโหมด Swarm
เหตุใดจึงต้องใช้ Docker Swarm
ด้วยเหตุผลดังกล่าวแล้ว! บรรลุ ความพร้อมใช้งานสูง โดยไม่มีเวลาหยุดทำงานเป็นสิ่งสำคัญสำหรับผู้ให้บริการทุกราย ความพร้อมใช้งานสูงจะสร้างความประทับใจให้กับลูกค้าของคุณหรือไม่? พวกเขาจะไม่ประทับใจหากต้องเผชิญกับการหยุดทำงาน นั่นคือเกมง่ายๆ
ประโยชน์อื่น ๆ ของ Docker Swarm
เช่นเดียวกับบริการอื่น ๆ อีกมากมาย Docker Swarm จะทำงานอัตโนมัติ โหลดบาลานซ์ สำหรับพวกเรา. ดังนั้นจึงไม่จำเป็นสำหรับวิศวกร DevOps ในการกำหนดเส้นทางการร้องขอการประมวลผลไปยังโหนดอื่น ๆ เมื่อล้มเหลว ผู้จัดการของคลัสเตอร์จะทำการจัดสรรภาระงานให้เราโดยอัตโนมัติ
การเข้าถึงแบบกระจายอำนาจ เป็นอีกหนึ่งประโยชน์ นั่นหมายความว่าอย่างไร? หมายความว่าโหนดทั้งหมดสามารถเข้าถึงได้อย่างง่ายดายจากผู้จัดการ ผู้จัดการจะแจ้งโหนดเป็นประจำและติดตามสถานะ / สถานะเพื่อรับมือกับการหยุดทำงาน อย่างไรก็ตามโหนดไม่สามารถเข้าถึงหรือติดตามบริการที่ทำงานในโหนด / ผู้จัดการอื่น ๆ
คุณสามารถตรวจสอบหมายเลข ของคอนเทนเนอร์ที่ทำงานในโหนด ไต่ขึ้น เลขที่ ของตู้คอนเทนเนอร์หรือ ลดขนาดลง เลขที่ ตามความต้องการของเราโดยดำเนินการเพียงคำสั่งเดียว
แม้ว่าจะมีการใช้งานแอปพลิเคชันแล้วเราก็สามารถออกได้ การอัปเดตแบบต่อเนื่อง และตรวจสอบให้แน่ใจว่าได้ CI (การบูรณาการแบบต่อเนื่อง) การอัปเดตแบบโรลลิ่งจะออกให้กับโหนดหนึ่งต่อจากอีกโหนดหนึ่งดังนั้นจึงทำให้แน่ใจว่าไม่มีเวลาหยุดทำงานและมีการกระจายโหลดระหว่างโหนดอื่นในคลัสเตอร์
แล้วอะไรต่อไป? ที่ต้องทำอย่างชัดเจน เริ่มต้นใช้งาน Docker Swarm หากคุณเคยทำงานกับ Docker มาแล้วหรือหากองค์กรของคุณต้องการสร้างบริการเว็บที่เชื่อถือได้
บันทึก : Docker engine ถูกติดตั้งบนโฮสต์ / เซิร์ฟเวอร์อิสระหรือใน VM หลายตัวในโฮสต์
เริ่มต้นด้วยโหมด Swarm
Docker Swarm เริ่มต้นโดยผู้จัดการหรือให้ฉันพูดแบบนี้อินสแตนซ์ที่เริ่มคลัสเตอร์ Swarm จะกลายเป็นผู้จัดการ คำสั่งในการเริ่มคลัสเตอร์คือ:
$ docker swarm init --advertise-addr ที่อยู่ IP
ในที่นี้ธง '–advertise-addr' ใช้สำหรับการโฆษณาตัวเองไปยังโหนดอื่น ๆ ที่ต้องการเข้าร่วมคลัสเตอร์ ต้องระบุที่อยู่ IP ของผู้จัดการพร้อมกับแฟล็ก ด้านล่างนี้คือตัวอย่างภาพหน้าจอ
เมื่อเริ่มต้นคลัสเตอร์ Swarm โทเค็นจะถูกสร้างขึ้นที่ส่วนท้ายของผู้จัดการ โหนดอื่นต้องใช้โทเค็นนี้เพื่อเข้าร่วมคลัสเตอร์ swarm
มันเป็นยังไงกันแน่? คัดลอกโทเค็นทั้งหมดที่สร้างขึ้นที่ Docker Engine ของผู้จัดการวางไว้ที่ Docker Engine ของโหนดแล้วดำเนินการ ส่วนที่ไฮไลต์ของภาพหน้าจอด้านบนคือโทเค็น เมื่อโทเค็นถูกเรียกใช้ที่โหนดของผู้ปฏิบัติงานจะมีลักษณะเหมือนภาพหน้าจอด้านล่าง
โหนดใด ๆ ที่เข้าร่วมคลัสเตอร์สามารถเลื่อนระดับเป็นผู้จัดการได้ในภายหลัง ในกรณีที่คุณต้องการให้ Docker Engine เข้าร่วมเป็นผู้จัดการให้ดำเนินการตามคำสั่งด้านล่างที่ส่วนท้ายของผู้จัดการ:
$ docker swarm join-token manager
และในเวลาต่อมาหากคุณต้องการให้โทเค็นสำหรับโหนดเข้าร่วมคลัสเตอร์ให้รันคำสั่งด้านล่าง:
$ docker swarm โหนด join-token
ดำเนินการต่อโทเค็นในทุกโหนดที่คุณต้องการเพื่อเข้าร่วมคลัสเตอร์ เมื่อเสร็จแล้วคุณสามารถรันคำสั่งรายการโหนดนักเทียบท่าเพื่อตรวจสอบจำนวนโหนดที่เข้าร่วมคลัสเตอร์พร้อมกับสถานะ คำสั่งคือ:
$ docker node ls
ภาพหน้าจออยู่ด้านล่าง:
การสร้าง Docker Image สำหรับ Angular App
หากทุกอย่างเรียบร้อยเราสามารถเริ่มบริการ Swarm ได้หากมีการสร้าง Docker Image อิมเมจ Docker สามารถสร้างได้จาก Dockerfile Dockerfile ที่ใช้สร้างแอปพลิเคชันอยู่ด้านล่าง:
จากโหนด: 6 RUN mkdir -p / usr / src / app WORKDIR / usr / src / app COPY package.json / usr / src / app RUN npm cache clean RUN npm install COPY / usr / src / แอป EXPOSE 4200 CMD ['npm', 'start']
Dockerfile ใช้เพื่อดำเนินการชุดคำสั่งร่วมกันสำหรับการสร้างอิมเมจ Docker แบบกำหนดเองจากอิมเมจพื้นฐาน อย่างที่คุณเห็นภาพพื้นฐานที่ฉันใช้คือ 'Node: 6' NodeJS คืออิมเมจ I จาก Docker Hub ซึ่งติดแท็กด้วยเวอร์ชัน 6
แฟกทอเรียลของจาวาจำนวนหนึ่ง
จากนั้นฉันกำลังสร้างไดเร็กทอรี Docker ใหม่ภายในคอนเทนเนอร์และทำให้เป็นไดเร็กทอรีการทำงานภายในคอนเทนเนอร์ของฉัน
ฉันกำลังคัดลอกไฟล์ 'package.json' จากเครื่องในระบบของฉันไปยังไดเรกทอรีการทำงานของคอนเทนเนอร์ จากนั้นฉันระบุคำสั่ง 'RUN npm cache clean' และ 'RUN npm install' npm ติดตั้ง คำสั่งดาวน์โหลดเวอร์ชันของการอ้างอิงที่กล่าวถึงในไฟล์ package.json
จากนั้นฉันคัดลอกรหัสโครงการทั้งหมดจากเครื่องท้องถิ่นไปยังคอนเทนเนอร์โดยเปิดเผยหมายเลขพอร์ต 4200 สำหรับการเข้าถึงแอปพลิเคชัน Angular บนเบราว์เซอร์และในที่สุดฉันก็ระบุคำสั่งเริ่มต้น npm ที่บรรจุแอปพลิเคชัน
ตอนนี้ในการสร้างอิมเมจ Docker ตาม Dockerfile นี้ให้รันคำสั่งด้านล่าง:
$ docker สร้าง -t angular-image
บันทึก: ต้องสร้าง Docker Images ในโหนดทั้งหมดในคลัสเตอร์ หากไม่มีคอนเทนเนอร์นี้จะไม่สามารถหมุนคอนเทนเนอร์ในเอ็นจิ้น Docker อื่นได้
การเริ่มบริการ Docker Swarm
เนื่องจาก Docker Image ของเราถูกสร้างขึ้นเราจึงสามารถหมุนคอนเทนเนอร์ออกจากอิมเมจนี้ได้ แต่เราจะทำสิ่งที่ดีกว่า: สร้างบริการ Docker Swarm จากมัน คำสั่งในการสร้างบริการฝูงคือ:
บริการ $ docker สร้าง - ชื่อ 'Angular-App-Container' -p 4200: 4200 angular-image
ที่นี่แฟล็ก 'name' ใช้เพื่อตั้งชื่อให้กับบริการของฉันและใช้แฟล็ก 'p' เพื่อแสดงพอร์ตคอนเทนเนอร์ไปยังพอร์ตโฮสต์ ในไฟล์ package.json ฉันได้ระบุพอร์ตคอนเทนเนอร์ที่ควรโฮสต์แอป Angular และ 4200 ในคำสั่งนี้ช่วยแมปพอร์ต 4200 ของคอนเทนเนอร์กับพอร์ต 4200 ของโฮสต์ 'angular-image' คือชื่อของรูปภาพที่ฉันสร้างไว้ก่อนหน้านี้
จำไว้ : เมื่อเราสร้างบริการสามารถโฮสต์บน Docker Engine ใดก็ได้ในคลัสเตอร์ ผู้จัดการฝูงจะตัดสินใจว่าจะจัดที่ใด แต่ไม่ว่าจะโฮสต์อยู่ในโหนดใดแอปพลิเคชันสามารถเข้าถึงได้บน localhost: 4200 จากโหนดใด ๆ ที่เชื่อมต่อในคลัสเตอร์
เป็นไปได้อย่างไร? เนื่องจาก Swarm ภายในจะเปิดเผยหมายเลขพอร์ตที่ทุกโหนดอื่น ๆ ในคลัสเตอร์สามารถเข้าถึงได้ภายใน นั่นหมายความว่าหมายเลขพอร์ต 4200 บนโหนด / ตัวจัดการใด ๆ ในคลัสเตอร์จะแสดงแอปพลิเคชัน Angular
ตอนนี้เป็นอย่างไร คอนเทนเนอร์ใช้งานอยู่หรือไม่
คุณสามารถตรวจสอบได้ว่าเซอร์วิสนั้นเป็นคอนเทนเนอร์หรือไม่โดยรันคำสั่ง docker service list แต่อาจใช้เวลาสักครู่ในการทำให้คอนเทนเนอร์ใช้งานได้ ด้านล่างนี้คือคำสั่ง:
$ docker service ls
คำสั่งนี้จะแสดงรายการบริการทั้งหมดที่จัดการโดยคลัสเตอร์ Swarm ในกรณีของเราควรแสดงคอนเทนเนอร์ที่ใช้งานอยู่หนึ่งคอนเทนเนอร์ ดูภาพหน้าจอด้านล่างสำหรับการอ้างอิง
ที่นี่“ REPLICAS = 1/1” ระบุว่ามี 'บริการ' รายการเดียวของคอนเทนเนอร์นั้นในคลัสเตอร์ และ“ MODE = ถูกจำลองแบบ” แสดงว่าบริการถูกจำลองแบบบนโหนดทั้งหมดในคลัสเตอร์
ตอนนี้เพื่อระบุว่าโหนด / ผู้จัดการแอปใดโฮสต์อยู่เราสามารถเรียกใช้คำสั่ง ps บริการ docker ตามด้วยชื่อคอนเทนเนอร์ คำสั่งคือ:
บริการ $ docker ps Angular-App-Container
ภาพหน้าจอเหมือนกันอยู่ด้านล่าง
สิ่งนี้กล่าวถึงรายละเอียดเกี่ยวกับโหนดที่โฮสต์แอปพลิเคชันพร้อมกับคำสั่งที่ใช้ในการเริ่มบริการ
คำสั่ง 'docker ps' จะแสดงรายละเอียดเกี่ยวกับคอนเทนเนอร์ที่ใช้งานอยู่ คำสั่งคือ:
$ นักเทียบท่า ps
ดูภาพหน้าจอด้านล่างสำหรับการอ้างอิง
แต่คำสั่งนี้จะใช้ได้เฉพาะกับตัวจัดการคลัสเตอร์และโหนดที่โฮสต์บริการจริงๆ
ในการตรวจสอบจำนวนโหนดที่กำลังทำงานให้รันคำสั่งรายการโหนด คำสั่งคือ:
$ docker node ls
ในการตรวจสอบคอนเทนเนอร์ที่ทำงานในโฮสต์เฉพาะให้รันคำสั่ง node ps คำสั่งคือ:
$ docker node ps
หากคุณจำได้ฉันได้กล่าวไว้ก่อนหน้านี้ว่าบริการกำลังทำงานในโหมดจำลอง ซึ่งหมายความว่าบริการถูกจำลองแบบในทุกโหนดในคลัสเตอร์ คุณคิดว่ามีทางเลือกอื่นไหม?
อย่างแน่นอน! มีสิ่งที่เรียกว่า Global MODE ในโหมดนี้มีบริการของคอนเทนเนอร์นี้ที่ทำงานที่ทุก ๆ ตัว / ผู้จัดการในคลัสเตอร์ อย่าลืมหยุดบริการ / คอนเทนเนอร์ปัจจุบันก่อนที่จะปั่นชุดภาชนะอื่น
คำสั่งคือ:
$ docker service rm Angular-App-Container
คำสั่งในการหมุนคอนเทนเนอร์ในโหมดโกลบอลคือ:
บริการ $ docker สร้าง - ชื่อ 'Angular-App-Container' -p 4200: 4200 - โหมด global angular-image
สิ่งนี้จะสร้าง 3 บริการบน 3 โหนดในคลัสเตอร์ของเรา คุณสามารถตรวจสอบได้โดยรันคำสั่ง docker service list ภาพหน้าจอด้านล่างนี้
เมื่อเรียกใช้คำสั่ง ps บริการ docker คุณจะเห็นสิ่งนี้:
อย่างที่คุณเห็นมันบอกว่าโหมดถูกจำลองแบบและแบบจำลองของคอนเทนเนอร์นี้คือ 3 ตอนนี้ส่วนที่ดีที่สุดของบล็อกนี้มาถึงแล้ว
หากต้องการให้บริการจำลอง 2 รายการทำงานระหว่างคอนเทนเนอร์ทั้งสามเราสามารถใช้แฟล็กจำลองได้ ดูคำสั่งด้านล่าง:
$ docker service create --name 'Angular-App-Container' -p 4200: 4200 --replicas = 2 angular-image
คุณจะสังเกตเห็นว่าบริการทั้ง 2 นี้มีการโหลดบาลานซ์ระหว่างโหนดทั้งสามในคลัสเตอร์ รันคำสั่งกระบวนการบริการนักเทียบท่าเพื่อตรวจสอบว่าโหนดใดที่คอนเทนเนอร์ทำงานอยู่ ดูภาพหน้าจอด้านล่างสำหรับการอ้างอิง คอนเทนเนอร์ทำงานอยู่ในโหนดผู้จัดการหนึ่งโหนดและโหนดของผู้ปฏิบัติงานหนึ่งโหนด
จากโหนด Worker คุณสามารถตรวจสอบว่าคอนเทนเนอร์กำลังทำงานอยู่โดยเรียกใช้คำสั่ง 'docker ps'
Docker Swarm สำหรับความพร้อมใช้งานสูง
ในตอนนี้เพื่อตรวจสอบว่ามีความพร้อมใช้งานสูงในคลัสเตอร์ของเราเราจำเป็นต้องพบกับสถานการณ์ที่หนึ่งในโหนดหยุดทำงานและโหนดอื่น ๆ ในคลัสเตอร์ประกอบขึ้นด้วย เราสามารถสร้างสถานการณ์ดังกล่าวได้โดยการหยุดคอนเทนเนอร์จากโหนดใดโหนดหนึ่งด้วยตนเองโดยใช้คำสั่งนี้:
$ docker หยุด Angular-App-Container
รันคำสั่งด้านบนบนโหนด: Worker-1 ที่คอนเทนเนอร์กำลังทำงานจากผู้จัดการให้รันคำสั่ง:
บริการ $ docker ps Angular-App-Container
ตอนนี้คุณจะสังเกตเห็นว่าคอนเทนเนอร์กำลังทำงานในโหนด: Worker-2 และ Manager อย่างไรก็ตามมันถูกปิดจากโหนด: Worker-1 สิ่งเดียวกันนี้สามารถมองเห็นได้จากภาพหน้าจอด้านล่าง
นี่คือวิธีการ ความพร้อมใช้งานสูงของ Docker จะประสบความสำเร็จ. ผมn แม้ว่าคอนเทนเนอร์จะไม่ได้ใช้งานใน Worker-1 แต่แอปพลิเคชันสามารถแสดงผลได้ที่พอร์ตหมายเลข 4200 บนโหนดผู้ปฏิบัติงานนั้น เนื่องจากมีการเชื่อมต่อภายในกับโหนดอื่น ๆ ในคลัสเตอร์และสามารถแสดงแอปพลิเคชันในเบราว์เซอร์ได้
ความพร้อมใช้งานสูงหลังจากขยายบริการ
ไม่ว่าจะอยู่ในโหมดจำลองหรือโหมดทั่วโลกเราสามารถขยายจำนวนบริการที่ทำงานในคลัสเตอร์ของเราได้ และแม้จะขยายขนาดไปแล้วเราก็ยังสามารถรักษาความพร้อมใช้งานได้สูง สุดยอดไม่ใช่เหรอ
แต่กลับไปที่ประเด็นของเราให้เราดูว่าการขยายจำนวนบริการในคลัสเตอร์ของเรานั้นง่ายเพียงใด สมมติว่าเรามีแบบจำลอง 2 หรือ 3 รายการในคลัสเตอร์ของเราให้เราขยายบริการเป็น 5 โดยเรียกใช้คำสั่งเดียว คำสั่งคือ:
$ docker service scale Angular-App-Container = 5
ภาพหน้าจอด้านล่างนี้
เมื่อเรียกใช้คำสั่งรายการบริการนักเทียบท่าคุณจะสังเกตได้ว่าตอนนี้จำนวนของแบบจำลองคือ 5 และด้วยการเรียกใช้คำสั่ง ps บริการนักเทียบท่าพร้อมกับชื่อบริการคุณจะเห็นได้ว่าบริการ 5 รายการมีการโหลดบาลานซ์และกระจายบน 3 โหนดอย่างไร . คำสั่งคือ:
บริการ $ docker ls $ docker service ps Angular-App-Container
และสุดท้ายในการตั้งค่า Docker Swarm หากคุณไม่ต้องการให้ผู้จัดการของคุณมีส่วนร่วมในการดำเนินการและเก็บไว้เพื่อจัดการกระบวนการเท่านั้นเราสามารถระบายผู้จัดการไม่ให้โฮสต์แอปพลิเคชันใด ๆ เพราะนี่คือวิธีการทำงานของโลกใช่หรือไม่ ผู้จัดการมีไว้สำหรับจัดการคนงานอื่นเท่านั้น อย่างไรก็ตามคำสั่งที่ต้องทำคือ:
$ docker node update - พร้อมใช้งาน Drain Manager-1
คุณสามารถตรวจสอบได้ว่าขณะนี้ผู้จัดการกำลังมีส่วนร่วมในคลัสเตอร์หรือไม่โดยการรันคำสั่ง docker node list และคำสั่ง ps บริการ docker:
$ docker node ls $ docker service ps Angular-App-Container
ตอนนี้คุณสามารถสังเกตได้ว่าบริการคอนเทนเนอร์ถูกแบ่งระหว่างโหนดของผู้ปฏิบัติงานและโหนดผู้จัดการได้ถูกระบายออกจากการจัดเก็บบริการใด ๆ ภาพหน้าจออยู่ด้านล่าง
ดังนั้นจึงยุติบล็อกนี้ใน Docker Swarm ฉันหวังว่าบล็อกนี้จะอธิบายว่าการใช้โหมด Swarm มีความสำคัญเพียงใดเพื่อให้ได้ความพร้อมใช้งานสูง คอยติดตามบล็อกเพิ่มเติมในซีรี่ส์การสอน Docker นี้
คุณสามารถดูวิดีโอด้านล่างเพื่อทำความเข้าใจว่า Docker Swarm ทำงานอย่างไร แนวคิดทั้งหมดที่อธิบายข้างต้นได้กล่าวถึงในวิดีโอ
Docker Swarm สำหรับความพร้อมใช้งานสูง | บทช่วยสอนนักเทียบท่า | สอน DevOps
ตอนนี้คุณได้เรียนรู้เกี่ยวกับ Docker แล้วลองดูไฟล์ โดย Edureka บริษัท การเรียนรู้ออนไลน์ที่เชื่อถือได้ซึ่งมีเครือข่ายผู้เรียนที่พึงพอใจมากกว่า 250,000 คนกระจายอยู่ทั่วโลก หลักสูตรการฝึกอบรม Edureka Docker Certification นี้ช่วยให้ผู้เรียนมีความเชี่ยวชาญในการใช้ Docker และเชี่ยวชาญ
มีคำถามสำหรับเรา? โปรดระบุไว้ในส่วนความคิดเห็นแล้วเราจะติดต่อกลับไป