前言:
Linux Container(容器化)現在已經很常見了,但討論主要集中在Docker,Docker有非常多優勢,像是Docker Hub、Docker Volume、Docker Image與Container,進一步擴展還有K8s。
但Docker使用容量有點大,不論是Docker Image、Container,Docker相對有點點複雜,對於服務隔離而且硬體受限(低階VPS)的場景,找到Chroot,也就是Container的始祖。
相對於Container,Chroot比較少人討論,因為它僅有執行環境隔離,沒有CPU、記憶體隔離,也沒有網路隔離,但以服務隔離的角度,網路由防火牆防護,似乎不錯,於是實做了下,寫一篇分享。
但Docker使用容量有點大,不論是Docker Image、Container,Docker相對有點點複雜,對於服務隔離而且硬體受限(低階VPS)的場景,找到Chroot,也就是Container的始祖。
相對於Container,Chroot比較少人討論,因為它僅有執行環境隔離,沒有CPU、記憶體隔離,也沒有網路隔離,但以服務隔離的角度,網路由防火牆防護,似乎不錯,於是實做了下,寫一篇分享。
環境:
相同作法應該適用在Ubuntu/Debian系列的實體機和VM內,不適用Container內(LXC、Docker)。
實驗環境是Debian 10 (Buster)。
安裝:
1. 需要安裝2個套件,包括debootstrap和schroot。
# apt-get install debootstrap schroot
2. 建立Chroot系統目錄
# mkdir /home/chroot
(這裡有個選項,如果有額外的磁碟或分割區,目錄可以用ZFS,好處是ZFS有snapshot功能,能讓Chroot系統支援snapshot)
3. 產生Chroot系統的Template
# debootstrap buster /home/chroot/rootfs http://ftp.tw.debian.org/debian/
(debootstrap能產生Debian/Ubuntu系統的Rootfs,裡面會包含Standard版本的完整系統,不包含fstab之類的設定)
4. 把Template打包
# cd /home/chroot
# tar cjf chroot.tar.bz2 rootfs
設置Chroot系統:
1. 解壓縮並更名Template
# cd /home/chroot
# tar jxf chroot.tar.bz2
# mv rootfs webrootfs (預計要使用的Chroot系統名稱,這裡用webrootfs)
2. 編輯schroot的Chroot系統設定檔
# vi /etc/schroot/chroot.d/webrootfs.conf
[webrootfs]
description=Web Rootfs
directory=/home/chroot/webrootfs
root-users=root
users=myuser
type=directory
description=Web Rootfs
directory=/home/chroot/webrootfs
root-users=root
users=myuser
type=directory
進入Chroot系統:
執行指令切換到Chroot系統
# schroot -c webrootfs
切換到Chroot系統後,所有的操作都在Chroot系統內,這時候可以安裝套件,準備執行環境。
操作Chroot系統與執行程式:
1. 啟動Chroot系統Session
# schroot -c webrootfs -b
執行後會出現一串像是:
webrootfs-b7738702-b79a-4376-9952-377570356804
這是這個Session的SessionID
(-c 指定Chroot系統名稱)
(-b 啟動Chroot系統,產生Session)
2. 查詢所有SessionID
# ls /run/schroot/mount/
所有SessionID都會紀錄在 /run/schroot/mount/
3. 進入Session
# schroot -r -c webrootfs-b7738702-b79a-4376-9952-377570356804
當SHELL出現(webrootfs)root 就是進入Session了
(-c 指定SessionID)
(-r 進入存在的Session)
4. 離開Session
# exit
5. 刪除Session
# schroot -e -c webrootfs-b7738702-b79a-4376-9952-377570356804
(-c 指定SessionID)
(-e 刪除存在的Session)
參考:
沒有留言:
張貼留言