หากคุณเป็นผู้ดูแลระบบที่มีประสบการณ์ คุณอาจเคยได้ยินเรื่องนี้มาก่อน “ด็อกเกอร์” ได้ยินก็รู้แล้วว่ามันคืออะไร สำหรับผู้ที่ไม่ทราบ 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 ที่ดีที่สุดขึ้นอยู่กับความต้องการของคุณเป็นส่วนใหญ่ ในบทความนี้ เราได้แนะนำพารามิเตอร์ที่สำคัญที่สุดบางส่วนที่เกี่ยวข้องกับกรณีการใช้งานส่วนใหญ่ แน่นอนว่ายังมีตัวเลือกดีๆ อีกมากมายที่ไม่ได้กล่าวถึงในบทความนี้ ใช้เวลาค้นคว้าตัวเลือกทั้งหมดและดูว่าตัวเลือกใดที่เหมาะกับคุณที่สุด!