เป็นวิธีที่ดีในการเริ่มต้นนักเทียบท่าคอนเทนเนอร์โดยอัตโนมัติเมื่อระบบบูทขึ้นคืออะไร?
มีวิธีที่ต้องการทำเช่นนี้ใน Ubuntu 14.04?
ก่อนหน้านี้ฉันเคยใช้supervisord
เพื่อเริ่มต้นเว็บแอป แต่นั่นไม่รู้สึกเหมือนสิ่งที่ถูกต้องสำหรับนักเทียบท่า
เป็นวิธีที่ดีในการเริ่มต้นนักเทียบท่าคอนเทนเนอร์โดยอัตโนมัติเมื่อระบบบูทขึ้นคืออะไร?
มีวิธีที่ต้องการทำเช่นนี้ใน Ubuntu 14.04?
ก่อนหน้านี้ฉันเคยใช้supervisord
เพื่อเริ่มต้นเว็บแอป แต่นั่นไม่รู้สึกเหมือนสิ่งที่ถูกต้องสำหรับนักเทียบท่า
คำตอบ:
เห็นได้ชัดว่าวิธีการในปัจจุบันให้อัตโนมัติเริ่มต้นภาชนะหาง ( จากหาง 1.2 ) คือการใช้นโยบายการเริ่มต้นใหม่ สิ่งนี้จะควบคุมวิธีที่นักเทียบท่าควรจัดการกับการเริ่มต้นของคอนเทนเนอร์เมื่อเริ่มต้นและเริ่มใหม่ของคอนเทนเนอร์เมื่อออกจาก ฉันใช้ตัวเลือก 'always' จนถึงตอนนี้และสามารถยืนยันได้ว่าทำให้ Docker เริ่มต้นคอนเทนเนอร์อัตโนมัติเมื่อบูตระบบ:
sudo docker run --restart=always -d myimage
นโยบายการเริ่มต้นใหม่โดยใช้การตั้งค่าสถานะ --restart บน Docker คุณสามารถระบุนโยบายการเริ่มต้นใหม่สำหรับวิธีที่คอนเทนเนอร์ควรหรือไม่ควรรีสตาร์ทเมื่อออก
ไม่ - ห้ามรีสตาร์ทคอนเทนเนอร์เมื่อออก
on-failure - รีสตาร์ทคอนเทนเนอร์ถ้าออกจากสถานะไม่เป็นศูนย์เท่านั้น
always - รีสตาร์ทคอนเทนเนอร์เสมอโดยไม่คำนึงถึงสถานะการออก
คุณยังสามารถระบุจำนวนครั้งสูงสุดที่ Docker จะพยายามรีสตาร์ทคอนเทนเนอร์เมื่อใช้นโยบายความล้มเหลว ค่าเริ่มต้นคือนักเทียบท่าจะพยายามตลอดไปเพื่อรีสตาร์ทคอนเทนเนอร์
$ sudo docker run --restart=always redis
สิ่งนี้จะเรียกใช้คอนเทนเนอร์ redis โดยมีนโยบายการเริ่มต้นใหม่เสมอเพื่อให้ถ้าออกจากคอนเทนเนอร์ Docker จะเริ่มต้นใหม่
$ sudo docker run --restart=on-failure:10 redis
สิ่งนี้จะเรียกใช้คอนเทนเนอร์ redis ด้วยนโยบายการรีสตาร์ทเมื่อเกิดความล้มเหลวและจำนวนการรีสตาร์ทสูงสุดคือ 10 หากคอนเทนเนอร์ redis ออกจากสถานะออกที่ไม่ใช่ศูนย์มากกว่า 10 ครั้งในแถวนักเทียบท่าจะพยายามยกเลิกการรีสตาร์ทคอนเทนเนอร์ การให้ขีด จำกัด การเริ่มต้นใหม่สูงสุดจะใช้ได้เฉพาะกับนโยบายที่ล้มเหลว
unless-stopped
มีการเพิ่มนโยบายอื่นที่เรียกว่า มันทำหน้าที่เหมือนalways
แต่ถ้าคอนเทนเนอร์หยุดและระบบรีบูทใหม่หรือ docker daemon รีสตาร์ทคอนเทนเนอร์จะไม่รีสตาร์ท ดูที่นี่เพื่อเขียนบทความทั้งหมด 4 ตัวเลือกblog.codeship.com/…
docker
ภูตต้องเริ่มต้นอัตโนมัติเพื่อสนับสนุนสิ่งนี้
นักเทียบท่ามีหน้านี้ที่อธิบายถึงวิธีการทำด้วยการพุ่งพรวดและ systemd ฉันยอมรับว่ามันดูเหมือนจะไม่ใช่สิ่งที่ถูกต้องสำหรับนักเทียบท่า ทางออกของพวกเขาคือการทำงานdocker start
ซึ่งถือว่าคุณได้สร้างคอนเทนเนอร์ของคุณแล้ว ฉันคิดว่าคุณจะทำdocker run --rm
ในสคริปต์ upstart (ปฏิบัติต่อมันเหมือนกระบวนการใหม่และคอนเทนเนอร์จากรูปภาพ) หรือปล่อยให้ docker daemon รีสตาร์ทคอนเทนเนอร์เองเมื่อบู๊ต (ตามค่าเริ่มต้นหากคุณไม่ทำอะไรเลย ) พุ่งพรวดมีข้อได้เปรียบของการอนุญาตให้เริ่ม / หยุดกระบวนการได้ง่าย แต่คุณจะได้รับเมื่อเริ่ม / หยุดของนักเทียบท่า!
ฉันคิดว่ามันแปลกที่จะบังคับให้ผู้ใช้สร้างคอนเทนเนอร์ (ด้วยการผูกพอร์ต / โวลุ่มที่ถูกต้องทั้งหมด) ก่อนที่สคริปต์ upstart จะทำงาน
แต่นั่นไม่รู้สึกเหมือนสิ่งที่ถูกต้องสำหรับนักเทียบท่า
ทำไมจะไม่ล่ะ?
ฉันใช้ supervisord สำหรับเรื่องนี้ด้วยความสำเร็จ
ใช้สิ่งที่คุณรู้ใช้งานได้ใช้สิ่งที่คุณสามารถบำรุงรักษาและเข้าใจได้ง่าย
--rm
เหรอ?
--rm
มีความเกี่ยวข้องที่นี่
docker
เป็นผู้แทนlxc
หรือopenvz
ที่มีและlxc.start.auto = 1
vzctl set --onboot yes
นอกจากนี้ยังมี ESXi และโซลูชั่นเวอร์ชวลไลเซชันอื่น ๆ ที่มีคุณสมบัติดังกล่าวรวมอยู่ด้วย เช่นเดียวกับลอเรนซ์ฉันไม่คิดว่าคุณลักษณะการเริ่มอัตโนมัติควรดำเนินการในลักษณะเฉพาะของการกระจายเนื่องจากผู้ใช้นักเทียบท่าควรสามารถแก้ไขปัญหาเดียวกันได้โดยมีความรู้เดียวกันในทุกแพลตฟอร์ม