如何在Ubuntu上創建及管理LXC容器

jopen 10年前發布 | 42K 次閱讀 Ubuntu

雖然早在十多年前就引入了容器這個概念,用來安全地管理共享式主機托管環境(比如FreeBSD監獄),但LXC或Docker之類的Linux只 是最近因日益需要為云計算部署應用程序而進入主流。雖然這陣子Docker備受媒體的關注,并且得到了各大云服務提供商(比如亞馬遜AWS和微軟 Azure)以及發行版提供商(比如紅帽和Ubuntu)的大力支持,但LXC實際上卻是針對Linux平臺開發的早期容器技術之一。

如果你是普普通通的Linux用戶,Docker/LXC可以帶來什么樣的好處呢?嗯,容器實際上是一種在諸發行版之間幾乎即時切換的一種好方法。 假設你當前的桌面系統是Debian,你需要Debian的穩定性。與此同時,你又想玩最新的Ubuntu游戲。然后,用不著很麻煩地通過雙啟動進入到 Ubuntu分區,或者啟動占用大量資源的Ubuntu虛擬機,只要立即啟用一個Ubuntu容器即可,一切都搞定了。

即便沒有Docker的種種好處,我喜歡LXC容器的地方在于,LXC可以由libvirt接口來管理,Docker卻不是這樣。如果你之前一直使用基于libvirt的管理工具(比如virt-manager或virsh),就可以使用同樣那些工具來管理LXC容器。

我在本教程中著重介紹標準LXC容器工具的命令行用法,并且演示如何在Ubuntu上從命令行創建及管理LXC容器。

將LXC安裝到Ubuntu上

想在Ubuntu上使用LXC,就要安裝LXC用戶空間工具,如下所示。

$ sudo apt-get install lxc

安裝完畢之后,運行lxc-checkconifg工具,檢查當前Linux內核支持LXC的情況。要是一切都已被啟用,內核對LXC的支持已準備就緒。

$ lxc-checkconfig

如何在Ubuntu上創建及管理LXC容器

安裝LXC工具后,你會發現,LXC的默認網橋接口(lxcbr0)已自動創建(已在/etc/lxc/default.conf中加以配置)。

如何在Ubuntu上創建及管理LXC容器

創建LXC容器后,窗口的接口就會自動連接到該網橋,那樣容器就能與外界進行聯系了。

創建LXC容器

為了能夠創建某個特定目標環境(比如Debian Wheezy 64位)的LXC容器,你就需要一個相應的LXC模板。幸運的是,Ubuntu上的LXC用戶空間工具隨帶一系列預先準備好的LXC模板。你可以在 /usr/share/lxc/templates目錄下找到可用的LXC模板。

$ ls /usr/share/lxc/templates

如何在Ubuntu上創建及管理LXC容器

LXC模板其實就是一段腳本而已,用來為某個特定的Linux環境創建容器。你在創建LXC容器時,需要用到這其中一個模板。

比如說,為了創建Ubuntu容器,使用下面這個命令行:

$ sudo lxc-create -n -t ubuntu

如何在Ubuntu上創建及管理LXC容器

默認情況下,它會創建與本地主機同一版本號和同一架構的最小Ubuntu安裝系統,這種情況下是Saucy Salamander(13.10)64位。

如果你希望,可以創建任何一種版本的Ubuntu容器,只要傳遞release參數。比如說,想創建Ubuntu 14.10容器:

$ sudo lxc-create -n -t ubuntu -- --release utopic

它會下載并驗證目標容器環境需要的所有程序包。整個過程可能需要幾分鐘或更長時間,具體取決于容器類型。所以請耐心點。

如何在Ubuntu上創建及管理LXC容器

經過一系列的程序包下載和驗證后,LXC容器映像最終創建完畢,你會看到默認的登錄資料可供使用。容器存儲在/var/lib/lxc /,根文件系統則位于/var/lib/lxc/ /rootfs。

LXC創建過程中下載的所有程序包則緩存在/var/cache/lxc里面,那樣使用同樣的LXC模板創建額外的容器就不用花時間了。

現在不妨看一下主機上的LXC容器列表:

$ sudo lxc-ls –fancy

NAME STATE IPV4 IPV6 AUTOSTART

————————————

test-lxc STOPPED – - NO

想啟動一個容器,請使用下面這個命令。“-d”選項將容器作為守護程序來啟動。要是沒有這個選項,你在啟動容器后,會直接被連接到控制臺。

$ sudo lxc-start -n -d

啟動容器后,不妨再次檢查容器狀態:

$ sudo lxc-ls –fancy

NAME STATE IPV4 IPV6 AUTOSTART

—————————————–

lxc RUNNING 10.0.3.55 – NO

你會看到,容器處于“RUNNING”(運行)狀態,已被賦予了一個IP地址。

你還可以證實,容器的接口(比如vethJ06SFL)自動連接到LXC的內部網橋(lxcbr0),如下所示。

$ brctl show lxcbr0

如何在Ubuntu上創建及管理LXC容器

管理LXC容器

既然我們已知道了如何創建及啟動LXC容器,現在不妨看看我們可以如何處理運行中的容器。

首先,我們想要訪問容器的控制臺。為此,鍵入這個命令:

$ sudo lxc-console -n

如何在Ubuntu上創建及管理LXC容器

鍵入組合鍵,退出控制臺。

想停止和銷毀容器:

$ sudo lxc-stop -n 
$ sudo lxc-destroy -n

想把現有容器克隆成另一個容器,使用這些命令:

$ sudo lxc-stop -n 
$ sudo lxc-clone -o -n

故障排查

如果你遇到了LXC方面的錯誤,下面是故障排查方面的幾個要點。

1. 你無法創建LXC容器,出現下列錯誤。

$ sudo lxc-create -n test-lxc -t ubuntu
lxc-create: symbol lookup error: /usr/lib/x86_64-linux-gnu/liblxc.so.1: undefined symbol: cgmanager_get_pid_cgroup_abs_sync

這意味著你運行最新的LXC,卻使用較舊的libcgmanager(libcg管理器)。想解決這個問題,你就需要更新libcg管理器。

$ sudo apt-get install libcgmanager0
來源:51CTO

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!