ฉันได้ค้นคว้าข้อมูลก่อนที่จะถามที่นี่ แต่คำตอบทั้งหมดทำให้ฉันได้ข้อสรุปเดียวกัน:
- สร้างสแต็ก Docker Compose ของคุณภายในเครื่อง
- แท็กและพุชรูปภาพไปที่รีจิสตรี (ไม่ว่าจะเป็นแบบส่วนตัวหรือแบบสาธารณะเช่น Docker Hub)
- ดันสแต็คไปที่ฝูงโดยใช้
docker stack deploy --compose-file docker-compose.yml stackdemo
- จากที่นี่ สแต็กจะหยิบและ "ดึง" รูปภาพจากรีจิสทรีและเรียกใช้คอนเทนเนอร์
ไม่มีวิธีที่ตรงไปตรงมาในการทำให้สถานการณ์ต่อไปนี้ (ฉันคิดว่าสามัญสำนึก) ทำงานได้อย่างราบรื่นหรือไม่
- Docker swarm manager มีสิทธิ์เข้าถึง (คีย์ SSH) เพื่อดึงโปรเจ็กต์จาก Git
- มันจะดึงโปรเจ็กต์เป็นระยะและสร้าง "ในเครื่อง" โดยใช้
docker-compose up
- เมื่อการสร้างสำเร็จ (คอนเทนเนอร์พร้อมแล้ว) มันจะผลักสแต็กไปที่ฝูงโดยใช้
docker stack deploy
เพื่อเผยแพร่อิมเมจไปยังโหนดของผู้ปฏิบัติงานทั้งหมด - ด้วยวิธีนี้ เฉพาะ "ซอร์สโค้ด" ดั้งเดิมเท่านั้นที่รู้จักโดยโหนดผู้จัดการ และมีเพียงเท่านั้นที่สามารถเข้าถึงที่เก็บ Git ได้โดยตรง
การดูแลรักษารีจิสทรี (หรือการชำระเงินสำหรับคลาวด์) ดูเหมือนจะเป็นข้อเสียอย่างมากสำหรับการใช้ Docker ในโหมด Swarm
หมายเหตุด้านข้าง: ฉันได้ลองใช้แนวทางของ ปรับใช้รีจิสทรีเป็นบริการภายในสแต็ก และการแท็ก + พุชอิมเมจไปที่ 127.0.0.1/myimage
แต่นั่นนำไปสู่ปัญหาชุดอื่นของตัวเอง - เช่น ความจริงที่ว่าโหนดของผู้ปฏิบัติงานที่ไม่มีอินสแตนซ์ของคอนเทนเนอร์ Registry ทำงานอยู่นั้นไม่มีสิทธิ์เข้าถึงเพื่อดึงอิมเมจ (จำเป็นต้องจำลองรีจิสทรีไปยังโหนดทั้งหมด)