翻譯整理:土豆絲
轉(zhuǎn)載說明出處,謝謝。
Container運(yùn)行在虛擬機(jī)上和在裸機(jī)OS上運(yùn)行是一樣的夫椭。Container托管在虛擬實(shí)例上幾乎沒有開銷刽漂。在2008年第一次引入container技術(shù)的時候绘面,Linux 采用了之前Solaris Container和FreeBSD jails大部分的功能瓤漏。LXC使用自己的進(jìn)程和網(wǎng)絡(luò)空間創(chuàng)建了一個虛擬的運(yùn)行環(huán)境,而不是創(chuàng)建了整個虛擬機(jī)堤撵。它使用namespaces來實(shí)現(xiàn)進(jìn)程隔離并且充分利用內(nèi)核的cgroups功能限制,統(tǒng)計(jì)和隔離一個或多個進(jìn)程的CPU羽莺,內(nèi)存实昨,磁盤I/O和網(wǎng)絡(luò)的使用情況⊙喂蹋可以把它想象為一種比chroot高級的用戶空間框架
所以Container到底是什么呢荒给?簡而言之就是container實(shí)現(xiàn)了應(yīng)用程序和操作系統(tǒng)的解耦,在一個或多個隔離的容器中運(yùn)行其他所有內(nèi)容的同時刁卜,給用戶提供了一個干凈的最小的Linux運(yùn)行環(huán)境志电。Container的目的就是啟動一組有限的應(yīng)用程序或服務(wù)(通常是微服務(wù)),并使它們在獨(dú)立的沙盒環(huán)境中運(yùn)行蛔趴。
這種隔離可以阻止運(yùn)行在Container中的進(jìn)程去監(jiān)控或隔離運(yùn)行在另一個Container的進(jìn)程挑辆。所以,這個容器化的服務(wù)不會影響或干擾主機(jī)。能夠?qū)⒎稚⒃诙鄠€物理服務(wù)器上的許多服務(wù)整合為一個的想法是數(shù)據(jù)中心選擇采用該技術(shù)的眾多原因之一鱼蝉。
Container的特性包括
Security:網(wǎng)絡(luò)服務(wù)運(yùn)行在container中洒嗤,可以限制安全漏洞或違法安全規(guī)則造成的傷害。黑客利用應(yīng)用程序的安全漏洞成功入侵魁亦,也僅限于在該Container中采取一系列操作渔隶。
隔離:Container允許在同一個物理機(jī)器上部署一個或多個應(yīng)用程序,即使這些應(yīng)用程序必須在不同的域進(jìn)行操作吉挣,并且每一個應(yīng)用程序都要求獨(dú)占訪問相應(yīng)的資源派撕。比如,運(yùn)行在不同容器的多個應(yīng)用程序可以通過關(guān)聯(lián)到每一個Container的不同的IP地址綁定同一個的物理網(wǎng)卡睬魂。
虛擬化和透明性: Container提供給系統(tǒng)提供一個虛擬的運(yùn)行環(huán)境可以隱藏或限制物理設(shè)別或系統(tǒng)配置的可見性终吼。Container的原則是避免改變應(yīng)用程序的運(yùn)行環(huán)境的同時解決Security或隔離的問題。
使用LXC工具
配置環(huán)境
以下所有的命令我都在ubuntu 18.04 x86 64 上運(yùn)行過氯哮。運(yùn)行這些命令初步體驗(yàn)一下Container.
現(xiàn)在大部分的Linux發(fā)行包际跪,內(nèi)核都支持cgroups。但是很多時候我們依然需要安裝LXC工具喉钢。
在嘗試使用工具前姆打,需要先配置環(huán)境。首先要先檢查在/etc/subgid和/etc/subuid中肠虽,當(dāng)前用戶都有g(shù)id和uid幔戏。
如果沒有~/.config/lxc文件,先創(chuàng)建這個文件夾税课。然后把 /etc/lxc/default.conf拷貝到~/.config/lxc/ 目錄下闲延,并重命名為default.conf. 把下面兩行加入到default.conf文件夾下。
lxc.id_map = u 0 100000 65536
lxc.id_map = g 0 100000 65536
結(jié)果如下
把下面這一行加入到/etc/lxc/lxc-usernet文件中韩玩。第一列替換成你自己的用戶名垒玲。Lxc-usernet是 非特權(quán)用戶網(wǎng)絡(luò)管理文件
hongyan veth lxcbr0 10
設(shè)置成功后,reboot或者退出重新登錄找颓,使設(shè)置生效合愈。
使用下面命令檢查veth網(wǎng)絡(luò)驅(qū)動設(shè)置是否成功
$ lsmod|grep veth
如果沒有成功,使用下面的命令
$ sudo modprobe veth
到這一步結(jié)束之后击狮,就可以使用LXC工具下載佛析,運(yùn)行和管理Linux Container了。
下載Container
接下來彪蓬,下載一個Container并命名為“example-container“寸莫。運(yùn)行下面的命令,會看到很多Linux發(fā)行版本支持的Container.
會提示選擇發(fā)行版本寞焙,發(fā)行商和架構(gòu)储狭,因?yàn)槭窃趚86平臺互婿,所以選擇ubuntu, bionic 和i386
填寫完成后回車,rootfs就開始下載并配置辽狈。由于安全原因慈参,每個用戶都沒有使用openSSH或用戶賬戶,也沒有提供默認(rèn)的root 密碼刮萌。
啟動Container
會提示要求輸入用戶名和密碼
保持現(xiàn)在的終端驮配,后面會用到。這里再打開一個新的終端着茸,可以查看Container的運(yùn)行狀況
查看所有已經(jīng)安裝的Container的狀況
現(xiàn)在開始解決不能登錄的問題壮锻。使用lxc-attach命令來修改所有相關(guān)的密碼
密碼修改成功后,切到第一個打開的終端涮阔,輸入密碼猜绣,Container登錄成功。
查看Container的IP地址
也可以通過SSH網(wǎng)絡(luò)訪問這個Container敬特,會發(fā)現(xiàn)被拒絕
首先要在Container環(huán)境中安裝OpenSSH server
再次嘗試用ssh遠(yuǎn)程連接container掰邢,連接成功
不要再Container 內(nèi)部,新開一個終端伟阔,使用ps命令查看啟動了哪些LXC進(jìn)程
停止Container 運(yùn)行
查看是否真的停止運(yùn)行了
刪除Container
高級配置
使用管理員權(quán)限可以在/var/lib/lxc/example-container目錄下修改container的配置辣之。
Container目錄下包含兩個文件
1.? 配置文件
2.? Container的roofs
配置系統(tǒng)啟動的時候自動啟動Container,在配置文件中/var/lib/lxc/example-container/config中增加下面一行
將Container的啟動路徑設(shè)置為本地路徑
配置結(jié)束皱炉,查看Container狀態(tài)怀估,檢查是否配置成功
參考鏈接:
https://linuxcontainers.org/lxc/manpages/man5/lxc-usernet.5.html