สารบบ

พารามิเตอร์นักเทียบท่า – พารามิเตอร์ที่ดีที่สุด!

หากคุณเป็นผู้ดูแลระบบที่มีประสบการณ์ คุณอาจเคยได้ยินเรื่องนี้มาก่อน “ด็อกเกอร์” ได้ยินก็รู้แล้วว่ามันคืออะไร สำหรับผู้ที่ไม่ทราบ Docker เป็นเทคโนโลยีโอเพ่นซอร์สที่ช่วยให้แอปพลิเคชันทำงานในคอนเทนเนอร์ที่แยกได้

พารามิเตอร์นักเทียบท่าคืออะไร?

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

พารามิเตอร์ Docker ประเภทต่างๆ

คำสั่ง docker run มีตัวเลือกและพารามิเตอร์ต่างๆ มากมายที่คุณสามารถปรับแต่งให้เหมาะกับความต้องการของคุณได้ ในเรื่องนี้ บทความ เราจะมุ่งเน้นไปที่พารามิเตอร์ Docker ประเภทต่างๆ

พารามิเตอร์ Docker มีสี่ประเภทหลัก: ตัวแปรสภาพแวดล้อม คำสั่งเดียว การรวมกันของคำสั่งและไฟล์ แต่ละประเภทมีของตัวเอง ข้อดีและข้อเสียที่ต้องนำมาพิจารณา

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

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

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

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

พารามิเตอร์นักเทียบท่าที่ดีที่สุด

พารามิเตอร์นักเทียบท่าที่ดีที่สุด

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

–ชื่อ: พารามิเตอร์นี้ตั้งชื่อให้กับคอนเทนเนอร์ หากคุณไม่ระบุชื่อ ระบบจะสร้างชื่อแบบสุ่ม ชื่อควรไม่ซ้ำกันเพื่อให้คุณสามารถระบุคอนเทนเนอร์ได้ง่าย

–detach / -d: พารามิเตอร์นี้รันคอนเทนเนอร์ในพื้นหลัง ตามค่าเริ่มต้น คอนเทนเนอร์จะทำงานในเบื้องหน้าและบรรทัดคำสั่งยังคงถูกบล็อกจนกว่าคอนเทนเนอร์จะออกหรือถูกยกเลิกด้วย Ctrl+C หากคุณต้องการรันคอนเทนเนอร์ในเบื้องหลัง คุณควรระบุพารามิเตอร์ –detach

–เผยแพร่ / -p: พารามิเตอร์นี้สร้างการเชื่อมต่อระหว่างพอร์ตคอนเทนเนอร์และพอร์ตโฮสต์ หากไม่เชื่อมต่อ คุณจะไม่สามารถเข้าถึงพอร์ตของคอนเทนเนอร์จากภายนอกได้ หากคุณต้องการเผยแพร่หลายพอร์ต คุณสามารถระบุพารามิเตอร์ –เผยแพร่ได้หลายครั้ง

–interactive / -i: พารามิเตอร์นี้ช่วยให้แน่ใจว่าคอนเทนเนอร์ทำงานในเบื้องหน้าและบรรทัดคำสั่งจะไม่ถูกบล็อกจนกว่าคอนเทนเนอร์จะออกหรือถูกยกเลิกด้วย Ctrl + C

–tty / -t: พารามิเตอร์นี้จำลองเทอร์มินัลในคอนเทนเนอร์ การระบุพารามิเตอร์นี้ทำให้คุณสามารถพิมพ์ลงในคอนเทนเนอร์และดำเนินการคำสั่งได้ หากไม่ได้ระบุพารามิเตอร์นี้ จะไม่สามารถพิมพ์ลงในคอนเทนเนอร์หรือดำเนินการคำสั่งได้

–rm: พารามิเตอร์นี้จะลบคอนเทนเนอร์หลังจากออก หากคุณไม่ระบุพารามิเตอร์นี้ คอนเทนเนอร์จะยังคงไม่เสียหายและสามารถกู้คืนได้ในภายหลัง

–volume / -v: พารามิเตอร์นี้สร้างการเชื่อมต่อระหว่างโฟลเดอร์โฮสต์และโฟลเดอร์คอนเทนเนอร์ เมื่อคุณเชื่อมต่อ คุณสามารถคัดลอกไฟล์จากโฟลเดอร์โฮสต์ไปยังคอนเทนเนอร์และในทางกลับกันได้

–workdir / -w: พารามิเตอร์นี้ตั้งค่าไดเร็กทอรีการทำงานในคอนเทนเนอร์ ตามค่าเริ่มต้น ไดเร็กทอรีการทำงานจะถูกตั้งค่าเป็น /root

–ผู้ใช้ / -u: พารามิเตอร์นี้ตั้งค่าผู้ใช้ในคอนเทนเนอร์ ตามค่าเริ่มต้น รูทผู้ใช้จะถูกใช้
นี่เป็นเพียงไม่กี่พารามิเตอร์ Docker ที่มีอยู่ สำหรับข้อมูลเพิ่มเติม โปรดดูเอกสารประกอบของ Docker

–รีสตาร์ท: พารามิเตอร์นี้ระบุว่า Docker ควรรีสตาร์ทคอนเทนเนอร์อย่างไรหากหยุดทำงานหรือขัดข้อง มีตัวเลือกที่แตกต่างกันสำหรับพารามิเตอร์นี้: ไม่, ล้มเหลว, เสมอและยกเว้นว่าหยุด ค่าเริ่มต้นคือ "ไม่" ซึ่งหมายความว่าคอนเทนเนอร์จะไม่ถูกรีสตาร์ท หากคุณระบุ “on-failure” คอนเทนเนอร์จะรีสตาร์ทหากทำงานด้วย ความผิดพลาด ถูกยกเลิก (เช่น เนื่องจากข้อขัดข้อง) “เสมอ” หมายความว่าคอนเทนเนอร์จะรีสตาร์ทอยู่เสมอ แม้ว่าจะปิดระบบเรียบร้อยแล้วก็ตาม “Unless-stopped” คล้ายกับ “always” แต่ที่นี่คอนเทนเนอร์ไม่ได้ถูกปล่อยให้ทำงานโดยไม่มีใครดูแล เมื่อคุณรันคำสั่ง “docker stop” เพื่อหยุดคอนเทนเนอร์ คอนเทนเนอร์จะไม่รีสตาร์ทอีกต่อไป

–ชื่อโฮสต์: ตามชื่อที่แนะนำ พารามิเตอร์นี้จะตั้งชื่อโฮสต์ของคอนเทนเนอร์ ค่าเริ่มต้นคือชื่อของคอนเทนเนอร์ หรือชื่อแบบสุ่มหากไม่มีการระบุชื่อ

–interactive หรือ -i: พารามิเตอร์นี้อนุญาตให้คุณเข้าสู่ระบบและโต้ตอบกับคอนเทนเนอร์ที่ทำงานอยู่ ตัวอย่างเช่น คุณสามารถเริ่มเทอร์มินัลในคอนเทนเนอร์และรันคำสั่งได้ หากคุณไม่ระบุพารามิเตอร์นี้ คุณจะไม่สามารถเข้าสู่ระบบและโต้ตอบกับคอนเทนเนอร์ได้

–volume หรือ -v: พารามิเตอร์นี้สร้างการเชื่อมต่อระหว่างโฟลเดอร์โฮสต์และโฟลเดอร์คอนเทนเนอร์ เมื่อคุณเชื่อมต่อ คุณสามารถคัดลอกไฟล์จากโฟลเดอร์โฮสต์ไปยังคอนเทนเนอร์และในทางกลับกันได้

ข้อดีและข้อเสียของพารามิเตอร์นักเทียบท่า

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

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

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

การอ้างอิงการรันนักเทียบท่า

คำสั่ง Docker ส่วนใหญ่เริ่มต้นด้วยคำสั่ง “docker” ตามด้วยคำสั่งย่อย docker run เป็นคำสั่งย่อยทั่วไปและใช้เพื่อรันคอนเทนเนอร์ใหม่

คำสั่ง docker run มีตัวเลือกและพารามิเตอร์ต่างๆ มากมายที่คุณสามารถระบุเพื่อสร้างและกำหนดค่าคอนเทนเนอร์ที่คุณต้องการเรียกใช้ ในบทความนี้ เราจะดูพารามิเตอร์ที่ดีที่สุดสำหรับคำสั่ง docker run

ตัวเลือกพิเศษเฉพาะของผู้ปฏิบัติงาน

ตัวเลือกตัวดำเนินการส่วนใหญ่ไม่ได้จำกัดเฉพาะตัวดำเนินการเท่านั้น แต่ยังมีให้บริการสำหรับผู้ใช้รายอื่นด้วย อย่างไรก็ตาม มีตัวเลือกบางอย่างที่มีไว้สำหรับผู้ปฏิบัติงานโดยเฉพาะ ซึ่งรวมถึง:

–log-level : ตั้งค่าระดับการบันทึก มีเพียงผู้ปฏิบัติงานเท่านั้นที่สามารถเข้าถึงตัวเลือกนี้เพื่อปรับแต่งการบันทึกสำหรับการติดตั้งของตน

–storage-opt : อนุญาตให้ผู้ปฏิบัติงานกำหนดค่าตัวเลือกพื้นที่เก็บข้อมูลเพิ่มเติมสำหรับการติดตั้ง สิ่งนี้มีประโยชน์เมื่อผู้ปฏิบัติงานใช้แบ็กเอนด์พื้นที่เก็บข้อมูลเฉพาะที่ Docker ไม่รองรับ

–format : อนุญาตให้ผู้ปฏิบัติงานปรับแต่งรูปแบบของเอาต์พุตข้อมูลนักเทียบท่า สิ่งนี้มีประโยชน์หากผู้ปฏิบัติงานต้องการประมวลผลข้อมูลในรูปแบบเฉพาะเพิ่มเติม

แยกเดี่ยวกับเบื้องหน้า

เมื่อคุณรันคอนเทนเนอร์ด้วยคำสั่ง docker run คอนเทนเนอร์นั้นจะทำงานในเบื้องหน้าเสมอ ซึ่งหมายความว่าภาชนะมี ปลอบใจ ของระบบโฮสต์ และคุณไม่สามารถออกจากคำสั่งโดยไม่ต้องหยุดคอนเทนเนอร์ได้

หากคุณต้องการเรียกใช้คอนเทนเนอร์ในพื้นหลัง (แยกออก) คุณสามารถทำได้โดยใช้พารามิเตอร์ “-d” จากนั้นคอนเทนเนอร์จะถูกดำเนินการในกระบวนการของตัวเอง และการควบคุมคอนโซลจะถูกส่งกลับไปยังโฮสต์

การระบุคอนเทนเนอร์

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

การตั้งค่า UTS (–uts)

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

การตั้งค่า IPC (–ipc)

การตั้งค่า IPC (–ipc) อนุญาตให้ใช้พื้นที่ส่วนกลางสำหรับการสื่อสารระหว่างคอนเทนเนอร์ ซึ่งจะช่วยให้คอนเทนเนอร์ตั้งแต่สองตัวขึ้นไปสามารถเข้าถึงไฟล์และซ็อกเก็ตเดียวกันได้ หากคุณไม่ระบุการตั้งค่า IPC นักเทียบท่าจะตั้งค่าช่วงเริ่มต้นสำหรับการสื่อสาร

ตั้งค่าเครือข่าย

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

–net=host – ตัวเลือกนี้อนุญาตให้คอนเทนเนอร์เข้าถึงเครือข่ายของโฮสต์ได้โดยตรง ซึ่งหมายความว่าคอนเทนเนอร์สามารถเข้าถึงบริการเครือข่ายทั้งหมด (DNS, HTTP ฯลฯ) ที่โฮสต์มอบให้

–net=bridge – ตัวเลือกนี้สร้างคอนเทนเนอร์บริดจ์เครือข่ายภายในที่อนุญาตให้คอนเทนเนอร์ที่ระบุสื่อสารกับคอนเทนเนอร์อื่นและโฮสต์ได้ นี่เป็นตัวเลือกเริ่มต้นสำหรับ –net

–net=container: – ตัวเลือกนี้อนุญาตให้คอนเทนเนอร์เชื่อมต่อกับคอนเทนเนอร์อื่นที่ใช้ตัวเลือกเครือข่ายเดียวกัน ตัวอย่างเช่น เราสามารถเชื่อมต่อสองคอนเทนเนอร์ด้วยตัวเลือก –net=bridge เดียวกันเพื่อเชื่อมต่อเข้าด้วยกัน

–net=none – ตัวเลือกนี้ปิดใช้งานเครือข่ายสำหรับคอนเทนเนอร์ คอนเทนเนอร์ที่ใช้ตัวเลือกนี้ไม่สามารถเข้าถึงเครือข่าย ดังนั้นจึงไม่สามารถใช้บริการเครือข่ายได้

หากต้องการอนุญาตให้คอนเทนเนอร์สองตัวสื่อสารกัน คุณสามารถใช้คำสั่งสร้างเครือข่ายนักเทียบท่า:

$ docker network สร้างเครือข่ายของฉัน

คำสั่งนี้จะสร้างเครือข่ายใหม่ชื่อ my-network หากต้องการเชื่อมต่อคอนเทนเนอร์เข้ากับเครือข่ายนี้ เราสามารถใช้คำสั่ง docker run พร้อมด้วยตัวเลือก –net:
$ docker run –net=my-network...

หากต้องการลบคอนเทนเนอร์ออกคุณสามารถใช้คำสั่ง docker rm:

$ docker rm คอนเทนเนอร์ของฉัน

คำสั่งนี้จะลบคอนเทนเนอร์ my-container หากต้องการลบเครือข่ายคุณสามารถใช้คำสั่ง rm เครือข่ายนักเทียบท่า:
$ นักเทียบท่าเครือข่าย rm เครือข่ายของฉัน

คำสั่งนี้จะลบเครือข่ายชื่อ my-network

นโยบายการรีสตาร์ท (–รีสตาร์ท)

นโยบายการรีสตาร์ทของ Docker ระบุว่าคอนเทนเนอร์จะรีสตาร์ทอย่างไรหลังจาก ความผิดพลาด ควรเริ่มต้นใหม่ ตัวเลือกการรีสตาร์ทคือ:

–restart=no: คอนเทนเนอร์จะไม่ถูกรีสตาร์ท
–restart=always: คอนเทนเนอร์จะรีสตาร์ทอยู่เสมอ แม้ว่าจะปิดสนิทก็ตาม
–restart=on-failure: คอนเทนเนอร์จะถูกรีสตาร์ทหากทำงานด้วย ความผิดพลาด สิ้นสุดลงแล้ว
–restart=unless-stopped: คอนเทนเนอร์จะรีสตาร์ทเสมอ เว้นแต่จะหยุดด้วยตนเองด้วยคำสั่งหยุดนักเทียบท่า

สถานะการออก

สถานะการออกคือค่าที่ส่งคืนโดยคำสั่งหรือฟังก์ชันเพื่อระบุว่าคำสั่งหรือฟังก์ชันเสร็จสมบูรณ์หรือไม่

หากคำสั่งเสร็จสิ้นโดยมีสถานะออกเป็น 0 มักจะหมายความว่าคำสั่งนั้นสำเร็จ สถานะการออกที่แตกต่างกันมักจะหมายความว่าคำสั่งล้มเหลว

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

ทำความสะอาด (–rm)

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

การกำหนดค่าความปลอดภัย

การกำหนดค่าความปลอดภัยเป็นสิ่งสำคัญมากเมื่อทำงานกับ Docker ส่วนนี้แสดงรายการพารามิเตอร์ที่สำคัญที่สุดสำหรับ Sicherheit นำเสนอโดยนักเทียบท่า

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

หนึ่งในพารามิเตอร์ที่สำคัญที่สุดสำหรับการรักษาความปลอดภัย Docker คือ “–cap-add” พารามิเตอร์นี้อนุญาตให้คุณส่งผ่านความจุเคอร์เนลบางอย่างไปยังคอนเทนเนอร์ สิ่งนี้ช่วยให้คุณควบคุมการเข้าถึงคุณสมบัติบางอย่างของระบบโฮสต์ ซึ่งจะเป็นการเพิ่มความปลอดภัย ตัวอย่างเช่น คุณสามารถใช้ “–cap-add=NET_RAW” เพื่อให้แน่ใจว่าคอนเทนเนอร์ไม่สามารถตรวจจับแพ็กเก็ตเครือข่ายได้

พารามิเตอร์ที่สำคัญอีกประการหนึ่งคือ “–security-opt” พารามิเตอร์นี้อนุญาตให้คุณจำกัดการเข้าถึงคุณลักษณะบางอย่างของระบบโฮสต์ ตัวอย่างเช่น คุณสามารถใช้ “–security-opt=apparmor:unconfined” เพื่อให้แน่ใจว่า AppArmor จะไม่ถูกนำไปใช้กับคอนเทนเนอร์ สิ่งนี้ทำให้ผู้โจมตีได้เปรียบอย่างมาก เนื่องจากไม่ถูกจำกัดโดย AppArmor อีกต่อไป

พารามิเตอร์ที่สำคัญมากอีกประการหนึ่งคือพารามิเตอร์ “–label” ของ SELinux พารามิเตอร์นี้ช่วยให้คุณควบคุมการเข้าถึงคุณลักษณะบางอย่างของระบบโฮสต์ได้ ตัวอย่างเช่น ด้วย “–label=type:
container_runtime_t” ตรวจสอบให้แน่ใจว่า Docker ไม่ได้ใช้ SELinux กับคอนเทนเนอร์ สิ่งนี้ทำให้ผู้โจมตีได้เปรียบอย่างมาก เนื่องจากไม่ถูกจำกัดโดย SELinux อีกต่อไป

พารามิเตอร์ที่สำคัญตัวสุดท้ายคือ “–privileged” พารามิเตอร์นี้ช่วยให้คุณเข้าถึงฟังก์ชันทั้งหมดของระบบโฮสต์ได้ สิ่งนี้เป็นอันตรายมากและควรใช้เมื่อจำเป็นจริงๆ เท่านั้น

แค่นั้นแหละสำหรับวันนี้! เราหวังว่าบทความนี้จะช่วยคุณได้ ข้อมูลพื้นฐานเกี่ยวกับ เพื่อทำความเข้าใจนักเทียบท่า

ระบุกระบวนการเริ่มต้น

Docker Daemon ยอมรับกระบวนการ init ที่ระบุเป็นอาร์กิวเมนต์ กระบวนการนี้เป็นกระบวนการแรกที่รันในคอนเทนเนอร์ หากไม่มีการระบุกระบวนการ init ระบบจะใช้ init กระบวนการเริ่มต้นเริ่มต้น

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

ระบุ cgroups ที่กำหนดเอง

หากคุณต้องการตั้งค่าขีดจำกัดหน่วยความจำ cgroup แบบกำหนดเองสำหรับแอปพลิเคชันของคุณ คุณสามารถทำได้โดยใช้แฟล็ก –cgroup-memory ตัวอย่างเช่น หากคุณต้องการตั้งค่าขีดจำกัดเป็น 512MB ให้ทำดังนี้

–cgroup-หน่วยความจำ =”512m”

ฉันจะกำหนดค่าแบบกำหนดเองได้อย่างไร DNS เซิร์ฟเวอร์สำหรับคอนเทนเนอร์ของฉัน?

หากคุณมี DNS ที่กำหนดเอง เซิร์ฟเวอร์คุณสามารถตั้งค่านี้ได้ในไฟล์ข้อกำหนดแอปพลิเคชันของคุณหรือคำสั่งเพิ่มแอป dcos มาราธอน ตัวอย่างนี้แสดงวิธีการตั้งค่า DNS เซิร์ฟเวอร์ โดยใช้ไฟล์ข้อกำหนดแอปพลิเคชัน:

{ “id”: “/บริการของฉัน”, “ DNS”: { “เนมเซิร์ฟเวอร์”: [ “10.0.0.1” ] } }

ตัวอย่างนี้แสดงวิธีการตั้งค่า DNS เซิร์ฟเวอร์ โดยใช้คำสั่งเพิ่มแอป dcos มาราธอน:
แอป $ dcos มาราธอนเพิ่ม { “id”: “/my-service”, “ DNS”: { “เนมเซิร์ฟเวอร์”: [ “10.0.0.1” ] } }

สำหรับข้อมูลเพิ่มเติมเกี่ยวกับ DNSโปรดดูการตั้งค่า DNS ในเอกสารประกอบของ Marathon

ฉันจะกำหนดค่าแบบกำหนดเองได้อย่างไร search โดเมน สำหรับตู้คอนเทนเนอร์ของฉันเหรอ?

ถ้าคุณมีธรรมเนียม search โดเมนคุณสามารถตั้งค่านี้ได้ในไฟล์ข้อกำหนดแอปพลิเคชันของคุณหรือคำสั่งเพิ่มแอป dcos มาราธอน ตัวอย่างนี้แสดงวิธีการตั้งค่า search โดยใช้ไฟล์ข้อกำหนดแอปพลิเคชัน:

{ “id”: “/บริการของฉัน”, “ DNS”: -search”: [ “.example.com” ] } }

ตัวอย่างนี้แสดงวิธีการตั้งค่า seaโดเมน rch โดยใช้คำสั่งเพิ่มแอป dcos มาราธอน: $ แอป dcos มาราธอนเพิ่ม { “id”: “/my-service”, “dns”: { “search”: [ “.example.com” ] } }

สำหรับข้อมูลเพิ่มเติมเกี่ยวกับ DNS โปรดดูการตั้งค่า DNS ในเอกสารประกอบของ Marathon

ฉันจะกำหนดค่าเครือข่ายแบบกำหนดเองสำหรับคอนเทนเนอร์ของฉันได้อย่างไร

หากคุณมีเครือข่ายที่กำหนดเอง คุณสามารถตั้งค่านี้ได้ในไฟล์ข้อกำหนดแอปพลิเคชันหรือคำสั่งเพิ่มแอป dcos มาราธอน ตัวอย่างนี้แสดงวิธีการตั้งค่าเครือข่ายโดยใช้ไฟล์ข้อกำหนดแอปพลิเคชัน:

{ “id”: “/my-service”, “เครือข่าย”: [ { “โหมด”: “คอนเทนเนอร์/บริดจ์” } ] }

ตัวอย่างนี้แสดงวิธีการตั้งค่าเครือข่ายโดยใช้คำสั่งเพิ่มแอป dcos มาราธอน:
แอป $ dcos มาราธอนเพิ่ม { “id”: “/my-service”, “เครือข่าย”: [ { “mode”: “container/bridge” } ] }
สำหรับข้อมูลเพิ่มเติมเกี่ยวกับเครือข่าย โปรดดูที่เครือข่ายในเอกสารประกอบ Marathon

ข้อจำกัดรันไทม์เกี่ยวกับทรัพยากร

“ข้อจำกัดรันไทม์เกี่ยวกับทรัพยากร” คือพารามิเตอร์ Docker ที่ควบคุมการจัดการทรัพยากรสำหรับคอนเทนเนอร์ที่ทำงานอยู่ พารามิเตอร์นี้อนุญาตให้คุณจำกัดการใช้งาน CPU, พื้นที่หน่วยความจำ และระบบไฟล์สำหรับคอนเทนเนอร์

ข้อจำกัดของหน่วยความจำผู้ใช้

พารามิเตอร์ Docker ส่วนใหญ่มีไว้สำหรับการจัดการหน่วยความจำหลักโดยเฉพาะ ใช้สำหรับการรันคอนเทนเนอร์และอิมเมจเป็นหลัก นอกจากนี้ยังมีพารามิเตอร์อื่นๆ สำหรับการกำหนดค่าเครือข่ายและอื่นๆ ทรัพยากร บาป Verantwortlich

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

หากคุณต้องการเพิ่มพื้นที่เก็บข้อมูลของคอนเทนเนอร์ คุณสามารถรันคำสั่งต่อไปนี้:

นักเทียบท่าทำงาน -it –memory=”4g” ubuntu /bin/bash

คำสั่งนี้จะสร้างคอนเทนเนอร์ใหม่ที่มี RAM ขนาด 4GB หากต้องการหน่วยความจำเพิ่มก็เพิ่มค่าได้ตามความเหมาะสม

หรือคุณสามารถเรียกใช้คำสั่งต่อไปนี้เพื่อสร้างรูปภาพที่มีหน่วยความจำเพิ่มเติม:

นักเทียบท่าสร้าง –memory=”4g” -t my_image

คำสั่งนี้จะสร้างอิมเมจใหม่ที่มี RAM ขนาด 4GB หากต้องการหน่วยความจำเพิ่มก็เพิ่มค่าได้ตามความเหมาะสม

ข้อจำกัดของหน่วยความจำเคอร์เนล

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

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

โปรดทราบว่าการเปลี่ยนแปลงพารามิเตอร์นี้อาจต้องรีสตาร์ทคอนเทนเนอร์

ข้อจำกัดของความว่องไว

การตั้งค่า swappiness คือค่าระหว่าง 0 ถึง 100 ที่กำหนดความถี่ที่ระบบจะเขียนเนื้อหาหน่วยความจำเพื่อสลับพื้นที่ ค่าความว่องไวสูงหมายความว่าการสลับเกิดขึ้นบ่อยกว่าและในทางกลับกัน ค่าเริ่มต้นคือ 60 สำหรับ ฐานข้อมูล โดยทั่วไปแนะนำให้ใช้ swappiness ต่ำเพื่อให้แน่ใจว่าหน่วยความจำจะยังคงอยู่ในหน่วยความจำนานที่สุด

ข้อ จำกัด การแบ่งปัน CPU

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

ข้อจำกัดของซีพียู

ข้อจำกัดของ CPUset กำหนดขีดจำกัดจำนวน CPU ที่คอนเทนเนอร์สามารถใช้ได้ สิ่งนี้มีประโยชน์เพื่อให้แน่ใจว่าคอนเทนเนอร์จะไม่รบกวนคอนเทนเนอร์อื่นบนระบบโฮสต์

ข้อจำกัดโควต้า CPU

การจำกัดโควต้า CPU (cgroup_cpu_shares) เป็นคุณลักษณะเคอร์เนล Linux ที่อนุญาตให้จำกัดการใช้งาน CPU ระหว่างกระบวนการต่างๆ พารามิเตอร์นี้สามารถระบุได้ใน Docker โดยใช้คำสั่ง “–cpu-shares”

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

บล็อกข้อจำกัดแบนด์วิธ IO (Blkio)

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

–blkio-น้ำหนัก

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

กลุ่มเพิ่มเติม

หากคุณต้องการเรียกใช้บริการหลายรายการในคอนเทนเนอร์เดียว คุณสามารถสร้างกลุ่มเพิ่มเติมได้ สิ่งนี้มีประโยชน์ ตัวอย่างเช่น หากคุณต้องการใช้งานเว็บเซิร์ฟเวอร์และเซิร์ฟเวอร์ฐานข้อมูลในคอนเทนเนอร์เดียว หากต้องการสร้างกลุ่มเพิ่มเติม ให้เพิ่มคำสั่งต่อไปนี้ในคำสั่ง docker run: –group-add

สิทธิ์รันไทม์และความสามารถของ Linux

“สิทธิ์รันไทม์” เป็นฟังก์ชันหลักของ Linux ที่อนุญาตให้มีการเปลี่ยนแปลงสิทธิ์บางอย่างระหว่างรันไทม์ สิ่งนี้มีประโยชน์อย่างยิ่งเมื่อแอปพลิเคชันต้องการการอนุญาตที่แตกต่างกันเพื่อเริ่มหรือรัน

คุณสามารถใช้ฟังก์ชันนี้ด้วยคำสั่ง "sudo" ตัวอย่างเช่น: sudo chmod 777 /path/to/file. คำสั่งนี้ให้ผู้ใช้ทุกคนสามารถเข้าถึงไฟล์ที่ระบุได้อย่างเต็มที่
อย่างไรก็ตาม มีข้อจำกัดบางประการเกี่ยวกับฟังก์ชัน sudo ตัวอย่างเช่น ผู้ใช้ไม่สามารถเปลี่ยนสิทธิ์ที่ตนยังไม่มีได้ นี่เป็นมาตรการรักษาความปลอดภัยเพื่อป้องกันไม่ให้ผู้ใช้รับสิทธิ์ที่พวกเขาไม่ควรได้รับ

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

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

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

ความสามารถของ Linux นั้นใช้งานง่ายกว่าฟังก์ชัน sudo มาก ด้วยความสามารถของ Linux คุณไม่จำเป็นต้องตั้งค่าการอนุญาตสำหรับทุกคำสั่ง เราสามารถติดตั้งโปรแกรมหรือแอพพลิเคชั่นแล้วตั้งค่าการอนุญาตสำหรับโปรแกรมหรือแอพพลิเคชั่นนั้น

ไดรเวอร์การบันทึก (–log-ไดรเวอร์)

เมื่อคุณสร้างอิมเมจ Docker คุณสามารถระบุไดรเวอร์การบันทึกที่จะใช้ได้ ไดรเวอร์การบันทึกเริ่มต้นคือ "json-file" อย่างไรก็ตาม มีตัวเลือกอื่นๆ มากมาย ตัวอย่างบางส่วน ได้แก่ syslog, Journald และ fluentd

คุณสามารถระบุไดรเวอร์การบันทึกด้วยพารามิเตอร์ “–log-driver” ตัวอย่างเช่น หากคุณต้องการใช้ไดรเวอร์การบันทึก syslog คุณสามารถทำได้ดังนี้:

นักเทียบท่ารัน –log-driver = syslog …

พารามิเตอร์นี้มีประโยชน์มากหากคุณต้องการจัดเก็บบันทึกของคอนเทนเนอร์ในระบบการบันทึกแบบรวมศูนย์

การแทนที่ค่าเริ่มต้นของรูปภาพ Dockerfile

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

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

นักเทียบท่า build -t your_image_name
คำสั่งนี้จะสร้างอิมเมจ Docker ใหม่ชื่อ “your_image_name” และเขียนทับค่าที่กำหนดไว้เริ่มต้นใดๆ

Fazit

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

บันทึก..เป็นสิ่งสำคัญ!

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

Jan Domke

พร้อมท์วิศวกร | ผู้จัดการโซเชียลมีเดีย | ผู้จัดการโฮสติ้ง | ผู้ดูแลเว็บ

ฉันจัดทำนิตยสารออนไลน์แบบส่วนตัวตั้งแต่ปลายปี 2021 SEO4Business และด้วยเหตุนี้จึงเปลี่ยนงานของฉันให้เป็นงานอดิเรก
ฉันทำงานเป็น A มาตั้งแต่ปี 2019 Senior Hosting Managerที่หนึ่งในเอเจนซี่ด้านอินเทอร์เน็ตและการตลาดที่ใหญ่ที่สุดในเยอรมนี และกำลังขยายขอบเขตความรู้ของฉันอย่างต่อเนื่อง

Jan Domke