แนะนำ, 2024

ตัวเลือกของบรรณาธิการ

วิธีการเรียกใช้งาน Distros หลาย ๆ แบบพร้อมกันโดยใช้ตู้คอนเทนเนอร์ Linux

Linux Containers (LXC) เป็นเทคโนโลยีเวอร์ชวลไลเซชันที่มีน้ำหนักเบาและมีการใช้งานที่หลากหลาย มันเป็นส่วนหนึ่งของเคอร์เนล Linux และสามารถให้คุณเลียนแบบหนึ่งหรือหลาย Linux distros บนโฮสต์ Linux เดียว คิดว่ามันเป็นจุดศูนย์กลางระหว่าง chroot และเทคโนโลยีการจำลองเสมือนเต็มรูปแบบเช่น VirtualBox, KVM หรือ Xen เทคโนโลยีที่คล้ายกันที่มีอยู่ในโลก BSD นั้นคือ FreeBSD Jails

ตัวอย่างเช่นเครื่องที่ฉันกำลังเขียนคือแล็ปท็อปที่ใช้ Linux Mint 18 ซึ่งขับเคลื่อนโดยโปรเซสเซอร์ Intel Atom และมี RAM น้อยกว่า 2 GB แต่ฉันกำลังใช้งาน Linux container สามตัวแต่ละตัวมีตัวอย่างของเว็บเซิร์ฟเวอร์ Apache ที่ทำงานอยู่โดยที่ไม่ได้รับผลกระทบมากนัก นี่จะไม่สามารถคิดได้ด้วยเครื่องเสมือนแบบดั้งเดิมเช่น VirtualBox ดังนั้นหากคุณต้องการรันหลาย distros บนระบบ Linux ของคุณตู้คอนเทนเนอร์ Linux ควรทำงานให้คุณเอง

การติดตั้งและกำหนดค่าคอนเทนเนอร์ Linux

เรากำลังตั้งค่า LXC บน Linux Mint 18 64 บิต คำแนะนำในการติดตั้งที่ให้ไว้ที่นี่จะยังไม่ได้แก้ไขบน Ubuntu 16.04 ขึ้นไป หากคุณกำลังใช้ distro อื่นโปรดดูเอกสารทางการของ distro ของคุณหากมีบางอย่างไม่ทำงานตามที่คาดไว้ ความคุ้นเคยกับบรรทัดคำสั่งและการแก้ไขปัญหาทั่วไปก็จะถือว่า

ข้อกำหนดเบื้องต้น

นี่คือบางสิ่งที่คุณควรตั้งค่าให้เริ่มใช้งาน distros หลาย ๆ อัน:

1. ติดตั้ง LXC และซอฟต์แวร์ที่ต้องมีก่อนอื่นโดยใช้:

[sourcecode] sudo apt ติดตั้ง lxc lxc-templates uidmap [/ sourcecode]

2. ตอนนี้คุณต้อง กำหนดค่าโปรไฟล์ของคุณ ป้อนคำสั่งต่อไปนี้เพื่อตั้งค่า:

[sourcecode] mkdir -p ~ / .config / lxc
echo "lxc.id_map = u 0 100000 65536" & amp; amp; gt; ~ / .config / LXC / default.conf
echo "lxc.id_map = g 0 100000 65536" & amp; amp; gt; & amp; amp; gt; ~ / .config / LXC / default.conf
echo "lxc.network.type = veth" & amp; amp; gt; & amp; amp; gt; ~ / .config / LXC / default.conf
echo "lxc.network.link = lxcbr0" & amp; amp; gt; & amp; amp; gt; ~ / .config / LXC / default.conf
echo "$ USER veth lxcbr0 2" | sudo tee -a / etc / lxc / lxc-usernet [/ sourcecode]

3. จากนั้นคุณต้อง ตั้งค่าการอนุญาตของผู้ใช้ ดังนี้:

[sourcecode] sudo usermod –add-subuids 100000-165536 $ USER
sudo usermod –add-subgids 100000-165536 $ USER

sudo cgm สร้างผู้ใช้ทั้งหมด
sudo cgm chown ผู้ใช้ทั้งหมด $ (id -u) $ (id -g)
cgm movepid ผู้ใช้ทั้งหมด $$ [/ sourcecode]

การตั้งค่าคอนเทนเนอร์ของคุณ

หลังจากที่คุณติดตั้ง LXC Container พร้อมกับซอฟต์แวร์ที่ต้องมีก่อนอื่นนี่คือขั้นตอนในการตั้งค่า Container:

1. ในตัวอย่างนี้ เราจะตั้งค่าคอนเทนเนอร์ Ubuntu ชื่อ ubu1 หากต้องการทำให้ดำเนินการคำสั่งต่อไปนี้:

[sourcecode] lxc-create –template download –name ubu1 [/ sourcecode]

2. ที่นี่พารามิเตอร์ –template บอก lxc เพื่อ ดาวน์โหลด อิมเมจที่กำหนดรูปแบบล่วงหน้าจากอินเทอร์เน็ต ในขณะที่พารามิเตอร์ –name ระบุชื่อของคอนเทนเนอร์ - ubu1 ในกรณีนี้ คุณสามารถใช้ชื่ออะไรก็ได้ที่คุณชอบ

3. ตอนนี้คุณจะเห็นรายการ ภาพ distro ที่รองรับ :

4. ป้อนข้อมูลเฉพาะของการแจกจ่าย ที่คุณต้องการติดตั้ง ฉันจะติดตั้ง Ubuntu 16.04 (codename xenial) เวอร์ชั่น 64 บิตที่นี่:

5. หากคุณต้องการ ติดตั้งภาพโดยไม่โต้ตอบ คำสั่งต่อไปนี้จะได้ผลลัพธ์เช่นเดียวกับด้านบน:

[sourcecode] lxc-create -t ​​download -n ubu1 - –dist ubuntu - ปล่อย xenial –arch amd64 [/ sourcecode]

6. ตอนนี้ LXC จะทำการดาวน์โหลดและติดตั้งรูปภาพ xenial ของ Ubuntu ในระบบโฮสต์ของคุณ การดาวน์โหลดและการติดตั้งอาจใช้เวลาสักครู่ขึ้นอยู่กับการเชื่อมต่ออินเทอร์เน็ตและความเร็วของพีซีของคุณ หลังจากการติดตั้ง คุณจะเห็นหน้าจอดังนี้:

ตอนนี้คุณพร้อมที่จะใช้งาน Ubuntu ที่เพิ่งติดตั้งใหม่

ใช้ Distros หลายกับภาชนะบรรจุ Linux

เริ่มต้นขึ้นภาชนะ

สตาร์ทคอนเทนเนอร์ของคุณโดยใช้คำสั่ง lxc-start :

[sourcecode] lxc-start -n ubu1 -d [/ sourcecode]

ที่นี่พารามิเตอร์ -n ระบุชื่อของคอนเทนเนอร์ ที่คุณต้องการเริ่มต้น ( ubu1 ในกรณีนี้) และพารามิเตอร์ -d ทำให้มันทำงานในพื้นหลัง

คุณสามารถตรวจสอบว่าคอนเทนเนอร์เริ่มต้นโดยใช้ lxc-ls สั่ง lxc-ls :

[sourcecode] lxc-ls -f [/ sourcecode]

พารามิเตอร์ -f เปิดใช้งานการรายงาน แฟนซี ที่นี่คุณจะเห็นว่าฉันมี สองคอนเทนเนอร์ - หนึ่ง Debian (หยุด) และหนึ่ง Ubuntu (กำลังทำงาน)

การเข้าถึงและการใช้คอนเทนเนอร์ของคุณ

คุณสามารถ เข้าถึงคอนโซลของคอนเทนเนอร์ โดยใช้คำสั่ง lxc-attach :

[sourcecode] lxc-attach -n ubu1 [/ sourcecode]

ตอนนี้คุณจะมี รูตเชลล์ บนคอนเทนเนอร์ของคุณ ขอแนะนำให้คุณตั้งรหัสผ่านสำหรับผู้ใช้รูทและ สร้างบัญชีผู้ใช้ปกติ :

[sourcecode] passwd
adduser beebom [/ sourcecode]

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

[sourcecode] apt ติดตั้ง wget openssh- เซิร์ฟเวอร์ htop tmux nano iptables [/ sourcecode]

หยุดภาชนะของคุณ

หลังจากคุณเล่นกับคอนเทนเนอร์เสร็จแล้วให้ใช้คำสั่ง exit เพื่อกลับสู่ระบบโฮสต์ ตอนนี้ใช้คำสั่ง lxc-stop เพื่อหยุดคอนเทนเนอร์ของคุณ :

[sourcecode] lxc-stop -n ubu1 [/ sourcecode]

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

การโคลนและสแนปชอต

โคลนนิ่ง

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

ตัวอย่างเช่นหากต้องการสร้างโคลนของคอนเทนเนอร์ ubu1 (เรียกว่า ubu2 ) อันดับแรกให้หยุดคอนเทนเนอร์ โดยใช้ lxc-stop จากนั้นใช้คำสั่ง lxc-copy :

[sourcecode] lxc-stop -n ubu

lxc-copy -n ubu1 -N ubu2 [/ sourcecode]

ที่นี่ ตัวเลือก -n ระบุแหล่งที่มาของภาชนะ และ ตัวเลือก -N ระบุชื่อของโคลน ในการ ตรวจสอบ ว่าคอนเทนเนอร์ถูกโคลนใช้ lxc-ls สั่ง lxc-ls :

ภาพรวม

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

หากต้องการสร้างสแนปชอตอันดับแรกให้ หยุดคอนเทนเนอร์ :

[sourcecode] lxc-stop -n ubu1 [/ sourcecode]

จากนั้น สร้างสแน็ปช็อต โดยใช้คำสั่ง lxc-snapshot :

[sourcecode] lxc-snapshot -n ubu1 [/ sourcecode]

สิ่งนี้สร้างสแน็ปช็อตที่เรียกว่า snap0 สแน็ปช็อตที่ตามมาใด ๆ ที่คุณสร้างโดยใช้คำสั่งนี้จะเรียกว่า snap1, snap2 เป็นต้น

หลังจากนี้คุณสามารถ เริ่มต้น คอนเทนเนอร์และทำการเปลี่ยนแปลงตามที่คุณต้องการ หากเมื่อใดก็ตามที่คุณต้องการกลับไปเป็นสแน็ปช็อตที่คุณสร้างให้ หยุด คอนเทนเนอร์และใช้คำสั่ง lxc-snapshot พร้อมกับพารามิเตอร์ -r เพื่อ กู้คืนสแน็ปช็อต :

[sourcecode] lxc-snapshot -r snap0 -n ubu1 [/ sourcecode]

นี่จะคืนค่าสแน็ปช็อต snap0 ไปยังคอนเทนเนอร์ ubu1

รีสตาร์ทคอนเทนเนอร์อัตโนมัติขณะบู๊ต

คุณสามารถสร้างคอนเทนเนอร์ได้ตัวอย่างเช่นคอนเทนเนอร์ของเซิร์ฟเวอร์เว็บจะเริ่มทำงานโดยอัตโนมัติเมื่อคุณบูตระบบ หากต้องการทำสิ่งนี้ให้ไปที่ไฟล์กำหนดค่า ของคอนเทนเนอร์ ซึ่งอยู่ใน $HOME/.local/share/lxc//config และ เพิ่มบรรทัดต่อไปนี้ :

[sourcecode] lxc.start.auto = 1
lxc.start.delay = 5 [/ sourcecode]

บรรทัดแรกระบุว่าควรเริ่มคอนเทนเนอร์เมื่อบูต วินาทีบอกให้ระบบ รอ 5 วินาที ก่อนเริ่มคอนเทนเนอร์ถัดไปถ้ามี

การแก้ไขปัญหา

หากคุณมีปัญหาในการเริ่มต้นคอนเทนเนอร์สิ่งแรกที่ต้องลองคือรันคำสั่ง lxc-start ในโหมด Foreground ตัวอย่างเช่น:

[sourcecode] lxc-start -n ubu1 -F [/ sourcecode]

สิ่งนี้จะ แสดงให้คุณเห็นข้อผิดพลาดเกี่ยวกับคอนโซลปัจจุบัน ซึ่งมีประโยชน์มากในการระบุลักษณะของปัญหา

ปัญหาเกี่ยวกับการใช้งานหลายตู้คอนเทนเนอร์พร้อมกัน

หากคุณพยายามเรียกใช้หลายคอนเทนเนอร์พร้อมกัน คุณอาจเห็นข้อผิดพลาด เช่น "ถึงโควต้า" หรือ "ล้มเหลวในการสร้างเครือข่ายที่กำหนดค่า" นี่คือเนื่องจากคุณกำลังเรียกใช้อินเทอร์เฟซเครือข่ายมากกว่าที่กำหนดให้คุณ คุณสามารถ เพิ่มจำนวนบริดจ์เครือข่ายที่ผู้ใช้สามารถรันได้ โดยแก้ไขไฟล์ /etc/lxc/lxc-usernet เป็น รู ท อาจมีลักษณะเช่นนี้:

[sourcecode] # USERNAME TYPE BRIDGE COUNT
beebom veth lxcbr0 5 [/ sourcecode]

คุณสามารถ เปลี่ยนหมายเลขในตอนท้าย (5 ในตัวอย่างนี้) เป็นตัวเลขที่ใหญ่กว่าเช่น 10 ซึ่งจะช่วยให้คุณสามารถรันได้สูงสุด 10 คอนเทนเนอร์ในคราวเดียว

การใช้งานอื่น ๆ ของคอนเทนเนอร์ Linux

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

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

เรียกใช้หลาย Distros พร้อมกันด้วย Linux Containers

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

Top