ทําไม จึง มี การ เชื่อม โยง ระบบ กับ โด เค อร์ เพื่อ ทํา ให้ เกิด การ ขยาย ตัว อย่าง รวด เร็ว?

โครงสร้างพื้นฐานสมัยใหม่ต้องการให้บริการบรรจุสินค้าอยู่รอดได้โดยไม่คาดคิด, การรีบูทของฮาร์ดแวร์ล้มเหลว หรือการปรับปรุงแพกเกจ ในขณะที่โดเคอร์ให้นโยบายเริ่มการทํางานใหม่ ([FLT: 0]) นโยบายเหล่านี้จะทํางานก็ต่อเมื่อดีมอนโดกเกอร์กําลังทํางานอยู่เท่านั้น ระบบ KDED - ระบบอินทธราที่ใช้โดย Ubuntu, Debian, Fedoro, Scios, และระบบลินุกซ์รุ่นใหม่ส่วนมาก – รับผลเพิ่มเติมนี้โดยระบบของ Docer เอง และสามารถเริ่มใช้คอนเทนเนอร์ได้ ก่อนที่คลังข้อมูลของ Docer จะรวมเข้ากับระบบ: Doctuments

  • guaranted สั่งซื้อเริ่มต้นผ่านทางคําสั่งการติดต่อ (เช่น หลังจากเครือข่าย.target, หลังจาก doger. service)
  • การทําปูมบันทึกแบบไม่รวม [FLT: 1) ทําการดีบั๊กแบบตรงไปตรงมา
  • ควบคุมการใช้ทรัพยากรได้อย่างละเอียด (CPU,หน่วยความจํา, I/O) โดยใช้คําสั่งหน่วยของระบบ
  • เริ่มทํางานอัตโนมัติเมื่อล้มเหลว ด้วยความล่าช้าที่ปรับแต่งได้ และทําลายข้อจํากัด
  • สนับสนุนการเริ่มใช้งานซ็อกเก็ตและเวลาเริ่มใช้งาน

โดยห่อกล่องโดกเกอร์แต่ละตัวในแฟ้มบริการของระบบ ทีมปฏิบัติการจะได้ส่วนเชื่อมต่อที่สอดคล้องกันสําหรับการเริ่ม, หยุด, และติดตามตู้คอนเทนเนอร์ ลดความพึ่งพาสคริปต์ Ad-hoc และการแทรกแซงด้วยตนเอง

กําลังสร้างบริการระบบสําหรับตัวบรรจุ Docer ตัวเดียว

วิธี การ มาตรฐาน เกี่ยว ข้อง กับ การ เขียน แฟ้ม หน่วย บริการ ที่ เรียก ว่า คํา สั่ง ของ โด เค อร์ เพื่อ ทํา ให้ เครื่อง ใช้ นั้น หยุด การ ใช้.

ขั้นที่ 1: เขียนแฟ้มหน่วยบริการ

สร้างแฟ้มชื่อ ใช้ต้นแบบต่อไปนี้เป็นจุดเริ่มต้น:

[Unit]
Description=My Application Container
After=network-online.target docker.service
Wants=network-online.target
Requires=docker.service

[Service]
Restart=always
RestartSec=10
StartLimitBurst=3
ExecStartPre=-/usr/bin/docker kill myapp
ExecStartPre=-/usr/bin/docker rm myapp
ExecStart=/usr/bin/docker run --rm --name myapp \
 -e DB_HOST=10.0.1.50 \
 -e DB_PORT=5432 \
 -v /data/myapp:/app/data \
 -p 8080:8080 \
 myregistry/myapp:latest
ExecStop=/usr/bin/docker stop -t 10 myapp
ExecStopPost=-/usr/bin/docker rm myapp

[Install]
WantedBy=multi-user.target

[FLT: 0] การอธิบายคําสั่งที่สําคัญ :

  • [FLT: 0]][FLT: 4] – แน่ใจว่าโดกเกอร์ดีมอนจะวิ่งก่อนเริ่มบรรจุ
  • [FLT: 0] ] - ถ้าโดเกอร์หยุด บริการนี้ก็จะหยุดด้วย
  • [FLT: 0] [FLT: 6] – ทําความสะอาดตู้คอนเทนเนอร์ที่เหลือจากการทํางานครั้งก่อน (FLT: 7) คํานําหน้าหมายถึง ความล้มเหลวที่นี่เป็นความล้มเหลวที่ไม่อ้วน).
  • [FLT: 0][FLT: 8]] – ใช้ เพื่อลบตู้คอนเทนเนอร์เมื่อมันหยุด
  • [FLT: 0] – – หยุดตู้คอนเทนเนอร์อย่างงดงามด้วยเวลานอก (10 วินาที).
  • [FLT: 0]] – เริ่มต้นใหม่เรือโดยไม่คํานึงถึงรหัสทางออก
  • [FLT: 0] [[FLT: 12] ] – รอ 10 วินาทีก่อนที่จะเริ่มใหม่.
  • [FLT: 0] – ลิมิตเริ่มเปิดใหม่ 3 ครั้งต่อช่วง (ค่าปริยาย 10 วินาที) เพื่อหลีกเลี่ยงการรีสตาร์ทวงจร

ขั้นที่ 2: เปิดและเริ่มบริการ

sudo systemctl daemon-reload
sudo systemctl enable myapp.service
sudo systemctl start myapp.service

[FLT: 15] บอกระบบอ่านแฟ้มบริการใหม่ [FLT: 16] สร้าง symlink เพื่อให้บริการเริ่มต้นการบูต

การ ดู แล งาน รับ ใช้ ด้วย คํา สั่ง มาตรฐาน ระบบ

เมื่อบริการทํางาน คุณควบคุมมันเช่นเดียวกับบริการระบบอื่น ๆ:

  • [FLT: 0] เริ่ม: [[FLT: 17]
  • [FLT: 0] หยุด:
  • [FLT: 0] เริ่ม:
  • [FLT: 0]. status:
  • [FLT: 0] Logs: (ตามบันทึกสด)

รูปแบบการปรับแต่งขั้นสูง

การใช้กระบวนการสร้างงานมักต้องใช้มากกว่าวิธีง่ายๆ [FLT: 22]. ด้านล่างนี้เป็นการเพิ่มข้อมูลทั่วไปที่เพิ่มเข้าไปในแฟ้มบริการของระบบของคุณ.

การ ผ่าน ตัวแปร สิ่ง แวด ล้อม

ไม่ขอแนะนําให้ใช้แฟ้ม "% 1" เพื่อค้นหาความลับหรือการปรับแต่งในแฟ้มบริการ แต่ควรใช้แฟ้มสภาพแวดล้อมอื่น ๆ:

[Service]
EnvironmentFile=-/etc/myapp/env.conf
ExecStart=/usr/bin/docker run --rm --name myapp \
 --env-file /etc/myapp/env.conf \
 myregistry/myapp:latest

[FLT: 24] คํานําหน้าก่อนที่พาธหมายถึงบริการจะเริ่ม แม้ว่าแฟ้มยังไม่มีอยู่ (ใช้ระหว่างการตั้งค่าเริ่มต้น).

การทําเครือข่ายและเย็บพอร์ต

สําหรับคอนเทนเนอร์ที่ต้องการสื่อสารกับแต่ละอื่น ๆ ในเครื่องเดียวกัน พิจารณาการใช้ หรือเครือข่ายสะพานที่ผู้ใช้กําหนด

ExecStart=/usr/bin/docker run --rm --name web \
 --network=my-net \
 -p 443:443 \
 -v /etc/ssl/certs:/etc/ssl/certs:ro \
 myregistry/web:latest

หากใช้เครือข่ายที่กําหนดเอง เพื่อให้แน่ใจว่ามีเครือข่ายอยู่ก่อนที่จะเริ่มบริการ คุณสามารถเพิ่มคําสั่ง [FLT: 27] เพื่อสร้างมัน:

ExecStartPre=/usr/bin/docker network create my-net

การเชื่อมต่อระหว่างการเชื่อมต่อ

เมื่อกล่องหนึ่งต้องการตัวอื่น ๆ ให้พร้อมก่อนเริ่ม (เช่น โปรแกรมบริการเว็บที่กําลังรอใช้ฐานข้อมูล) ระบบสามารถบังคับในการประมวลผล สร้างแฟ้มบริการที่สองสําหรับฐานข้อมูล จากนั้น:

[Unit]
Description=Web App Container
After=network-online.target docker.service mydb.service
BindsTo=mydb.service

[FLT: 30] เชื่อมวงจรชีวิตเว็บกับตู้ฐานข้อมูล - ถ้าฐานข้อมูลหยุด โปรแกรมเว็บก็หยุดด้วย

การ ตรวจ สุขภาพ และ การ อ่าน

การตรวจสอบสุขภาพของดอกเกอร์สามารถทําการผนวกเข้ากับระบบเพื่อป้องกันการบริการก่อนวัยอันควรได้ ใช้[FLT: 31] ด้วยสคริปต์ที่สํารวจจุดสิ้นสุดสุขภาพ:

ExecStartPost=/usr/local/bin/wait-for-health.sh http://localhost:8080/health 30

สคริปต์ควรจะออกจากโปรแกรม 0 เมื่ออุปกรณ์แข็งแรงเท่านั้น หากมันล้มเหลว ให้ทําการทําเครื่องหมายหน่วยว่าล้มเหลว

จํากัดทรัพยากรผ่านทางระบบ

คุณสามารถบังคับ CPU และหน่วยความจําของคอนโทรลได้ ในระดับ cgroup โดยไม่ต้องใช้ธงทรัพยากรของโดกเกอร์ ซึ่งมีประโยชน์มากเมื่อเรียกใช้คอนเทนเนอร์หลายตัวบนโฮสต์เดียว:

[Service]
MemoryMax=512M
CPUQuota=50%

การตั้งค่าเหล่านี้สร้างข้อจํากัดที่แข็งตัว ซึ่งระบบบังคับอิสระของโดเกอร์

วิเคราะห์ตัวบรรจุหลายตัว: Systemd vs. doper Compostion

สําหรับจํานวนของคอนเทนเนอร์ (เช่น 2-5) ไฟล์บริการแต่ละระบบนั้นเรียบง่ายและรักษาได้ อย่างไรก็ตาม เมื่อโครงการใด ๆ เกี่ยวข้องกับบริการหลายระบบ Docer Compost ก็ยิ่งสะดวกมากขึ้น คุณยังคงสามารถใช้ระบบในการจัดการกอง Docer Compost ได้ทั้งหมด โดยการสร้างหน่วยบริการเดียวที่เรียก [FTT: 34] ตัวอย่าง:

[Unit]
Description=My Application Stack
After=network-online.target docker.service
Requires=docker.service

[Service]
Type=oneshot
RemainAfterExit=yes
WorkingDirectory=/opt/myapp
ExecStart=/usr/local/bin/docker-compose up -d
ExecStop=/usr/local/bin/docker-compose down

[Install]
WantedBy=multi-user.target

วิธี นี้ ทํา ให้ คุณ เข้าใจ ง่าย ขึ้น เกี่ยว กับ การ จัด การ เรื่อง การ รับ ใช้ ที่ เกี่ยว ข้อง กับ ระบบ ของ ระบบ.

คุณ ควร เลือก วิธี ไหน?

  • [FLT: 0] บริการระบบย่อย[FLT: 1) - เหมาะที่สุดสําหรับโปรแกรมมรดก บริการด้วยการเริ่มการสั่งซื้ออย่างเข้มงวด หรือเมื่อคุณต้องการ จํากัดทรัพยากรต่อคน
  • [FLT: 0] Docer Compost with Systemd - เหมาะที่สุดสําหรับระบบบริการไมโครสแต็กที่จัดการการขึ้นต่อกันภายในโดยคอมมอนท์ และคุณต้องการหน่วยเดียวในการจัดการทั้งกลุ่ม

ปัญหา ทั่ว ไป

แม้ แต่ เมื่อ เตรียม ตัว อย่าง ดี คุณ อาจ ประสบ ปัญหา.

บริการล้มเหลวด้วย "ไม่สามารถเชื่อมต่อกับดีมอน Docer ได้"

ซึ่งหมายความว่าบริการจะเริ่มทํางานก่อนที่ซ็อกเก็ตของโดกเกอร์พร้อม รับข้อมูลหน่วยของคุณที่บรรจุ [FLT: 40] และ [FT:41] นอกจากนี้ยังตรวจสอบด้วยว่าดีมอนโดกเกอร์ถูกเปิดใช้งาน:.

ตัวบรรจุเริ่มในวนรอบ

ถ้าตู้คอนเทนเนอร์ออกทันที ระบบจะเริ่มการทํางานใหม่ตาม และ Check Calls calls [FLT: 45]. เพิ่ม (e.g. 30 วินาที) และตั้ง [FLT: 47] เพื่อป้องกันวงเวียนที่วุ่นวาย.

การ รับ ใช้ ไม่ ได้ หยุด อย่าง สะอาด

การกําหนดไม่ถูกต้อง [FLT: 48] อาจปล่อยตู้คอนเทนเนอร์ทํางานอยู่ ตรวจสอบว่า ใช้ชื่อตู้ที่ถูกต้อง ใช้[FLT: 50] เพื่อลบกล่องนั้นออกหากการหยุดทําการล้มเหลว

ตัวแปรแวดล้อมไม่โหลด

หากคุณใช้ [FLT: 51] ให้ตรวจสอบว่าแฟ้มมีอยู่ และอ่านได้โดย root คลิกที่ root หลีกเลี่ยงการอ้างถึงปัญหาต่าง ๆ – คลิปจากค่าตัวแปรของระบบ สําหรับการฉีดแบบลับ พิจารณาการใช้ข้อมูลกํากับของระบบ หรือตัวจัดการลับที่อุทิศให้

การ พิจารณา ความ มั่นคง

การทํางานคอนเทนเนอร์ผ่านระบบ ทําให้เกิดจุดรักษาความปลอดภัยไม่กี่:

  • ประมวลผลบริการของระบบโดยใช้สิทธิ์ผู้ใช้ที่ไม่ใช่รากเสมอหากเป็นไปได้ (ใช้ [FLT: 52) และ] แต่แน่ใจว่าผู้ใช้สามารถเข้าถึงซ็อกเก็ตดอกเกอร์ได้ หรือทํางานในโหมด roots (Root).
  • หลีกเลี่ยงการใช้ ในหน่วยระบบ ยกเว้นว่าจําเป็น
  • ใช้การเมานท์แบบอ่านอย่างเดียว ([FLT: 55]) เมื่อใดก็ตามที่ตู้คอนเทนเนอร์ไม่จําเป็นต้องเขียนไปยังเครื่อง
  • ระบบ ของ เลเว ราจ และ เพื่อ ให้ หน่วย แข็ง แกร่ง เพื่อ ต้าน การ หลบ หนี.
[Service]
ProtectSystem=strict
ReadWritePaths=/var/log/myapp
PrivateTmp=true
User=myappuser

ทรัพยากรภายนอก

สําหรับ การ อ่าน เพิ่ม เติม โปรด ดู ข้อ อ้างอิง ที่ เป็น ทาง การ เหล่า นี้:

  • [FLT: 0] ดอกเกอร์เริ่มร่างเอกสาร hyplicies
  • [FLT: 0]. Systemd Office Fuard
  • [FLT: 0] Docer Compostive Overview

รูปแบบการวน

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

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