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