教你在 Ubuntu 上使用 LXC 容器
使用“容器”來保證主機環境的安全性,這個概念早在十年前就已經存在(例如 FreeBSD 的 jail 虛擬化技術),但是直到最近,隨著部署雲架構需求越來越多,像 LXC 和 Docker 這種 Linux 下的容器才成為被關注的焦點。當然,由於主流廠商(雲服務商如亞馬遜主推 AWS,微軟主推 Azure;發行版如紅帽、Ubuntu等)組成的強大靠山,Docker 已經被放在媒體的聚光燈下面,其實,Docker 裡面所謂的“容器”技術是由 LXC 提供的。
你只是一個普通的 Linux 使用者,那 Docker/LXC 能為你帶來什麼好處呢?容器可以將你的應用在不同的 Linux 發行版之間遷移。想像一下這個場景:你正在用的發行版是 Debian,你喜歡它的穩定性,同時你又想玩一款最新的 Ubuntu 遊戲,你不需要在電腦上裝雙系統然後重啟進入 Ubuntu,也不需要在 Debian 上跑一個耗資源的 Ubuntu 虛擬機器,你只需要簡單地生成一個 Ubuntu 容器就夠了。
拋開 Docker 的好處不談,讓我們聊一下 LXC 容器的好處:我可以使用 libvirt 提供的介面來管理 LXC,這些介面和 Docker 沒有任何關係。如果你有使用基於 libvirt 庫的管理工具(例如 virt-manager 和 virsh),你就可以使用它們來管理 LXC 容器。
在這篇教程中,我只介紹標準 LXC 容器管理工具的命令列操作,來教你如何在 Ubuntu 下建立和管理 LXC 容器。
Ubuntu 下安裝 LXC
使用下面的命令安裝 LXC 在使用者態的工具:
$ sudo apt-get install lxc
然後檢查當前核心是否支援 LXC。如果所有結果都是“enable”,說明核心支援:
$ lxc-checkconfig
安裝完 LXC 工具後,就能看到 LXC 自動建立了一塊橋接網路卡(lxcbr0,可以在 /etc/lxc/default.conf 中設定)。
當你建立了 LXC 容器後,它的網口會自動連結到這個橋接網路卡上,然後這個容器就能和外部世界通訊了。
建立 LXC 容器
為了在指定環境下(比如 Debian Wheezy 64位)建立 LXC 容器,你需要一個相應的 LXC 模板。幸運的是 LXC 提供的工具整合了一整套現成的 LXC 模板,你可以在 /usr/share/lxc/templates 目錄下找到它們。
$ ls /usr/share/lxc/templates
一個 LXC 模板實質上就是一個指令碼,用於建立指定環境下的容器。當你建立 LXC 容器時,你需要用到它們。
比如你要新建 Ubuntu 容器,使用下面的命令即可:
$ sudo lxc-create -n <container-name> -t ubuntu
預設情況下,這個命令會建立一個最小的 Ubuntu 環境,版本號與你的宿主機一致,我這邊是“活潑的蠑螈”(版本號是13.10),64位。
當然你也可以建立任何你喜歡的版本,只要在命令裡面加一個版本引數即可。舉個例子,建立 Ubuntu 14.10 的容器:
$ sudo lxc-create -n <container-name> -t ubuntu -- --release utopic
這個命令就會下載安裝指定環境下的軟體包,建立新容器。整個過程需要幾分鐘時間,與容器的型別有關,所以,你可能需要耐心等待。
下載安裝完所有軟體包後,LXC 容器映象就建立完成了,你可以看到預設的登入介面。容器被放到 /var/lib/lxc/<容器名> 這個目錄下,容器的根檔案系統放在 /var/lib/lxc/<容器名>/rootfs 目錄下。
建立過程中下載的軟體包儲存在 /var/cache/lxc 目錄下面,當你想另外建一個一樣的容器時,可以省去很多下載時間。
用下面的命令看看主機上所有的 LXC 容器:
$ sudo lxc-ls --fancy
NAME STATE IPV4 IPV6 AUTOSTART ------------------------------------ test-lxc STOPPED - - NO
使用下面的命令啟動容器。引數“-d”將容器作為後臺程式開啟。如果沒有指定這個引數,你可以在控制檯介面上直接把容器的執行程式關閉(LCTT譯註:Ctrl+C組合鍵)。
$ sudo lxc-start -n <container-name> -d
開啟容器後,看看狀態:
$ sudo lxc-ls --fancy
NAME STATE IPV4 IPV6 AUTOSTART ----------------------------------------- lxc RUNNING 10.0.3.55 - NO
容器狀態是“執行中”,容器 IP 是10.0.3.55。
你也可以看到容器的網路介面(比如我這裡是 vethJ06SFL)自動與 LXC 內部網橋(lxcbr0)連上了:
$ brctl show lxcbr0
管理 LXC 容器
我們已經學習了怎麼建立和啟動 LXC 容器,現在來看看怎麼玩一個正在執行著的容器。
第一步:開啟容器控制檯:
$ sudo lxc-console -n <container-name>
使用“Crtl+a q”組合鍵退出控制檯。
停止、刪除容器:
$ sudo lxc-stop -n <container-name> $ sudo lxc-destroy -n <container-name>
複製容器,用下面的命令:
$ sudo lxc-stop -n <container-name> $ sudo lxc-clone -o <container-name> -n <new-container-name>
常見問題
這個小節主要介紹你們在使用 LXC 過程中碰到過的問題。
-
建立 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 版本較老,兩者不相容。升級下 libcmanager 即可解決問題:
$ sudo apt-get install libcgmanager0
相關文章
- 如何在Ubuntu上建立及管理LXC容器Ubuntu
- 容器技術之LXC
- 容器技術之LXC WEB管理工具LXC WEB PanelWeb
- 手把手教你在容器服務 TKE 上使用 LB 直通 Pod
- 教你在Ubuntu上安裝Linux核心6.1UbuntuLinux
- [Docker]在Ubuntu容器中建立sudo使用者DockerUbuntu
- 在Ubuntu上安裝OpenShift並使用Ubuntu
- 在Ubuntu上使用Jetty部署War包UbuntuJetty
- 手把手教你在Nginx上使用CertBotNginx
- 在 Ubuntu 上使用原始碼安裝 OpenRestyUbuntu原始碼REST
- 在 Ubuntu 上使用 Nginx 部署 Flask 應用UbuntuNginxFlask
- 【Ubuntu】在Ubuntu上安裝微信Ubuntu
- 使用 LXD 容器執行 Ubuntu CoreUbuntu
- ubuntu 上使用valgrindUbuntu
- Ubuntu18 上使用 docker 的 nginx 容器模擬負載均衡UbuntuDockerNginx負載
- 無需sudo使用Podman在Linux上執行容器Linux
- 教你在 Linux 上使用 Calibre 建立電子書Linux
- 在 Ubuntu 中用 Docker 管理 Linux Container 容器UbuntuDockerLinuxAI
- 在 Ubuntu 14.04 上安裝 Ubuntu Tweak 0.8.8Ubuntu
- Image server for Incus and LXCServer
- 在Ubuntu上安裝MariaDBUbuntu
- 在 Ubuntu 上安裝 Budgie 桌面Ubuntu
- 在Ubuntu上安裝openssh(轉)Ubuntu
- 在virtualbox上安裝ubuntuUbuntu
- 手把手教你在容器服務 TKE 中使用動態准入控制器
- 在Ubuntu上使用Netdata設定實時效能監控Ubuntu
- 在ubuntu上安裝docker, 使用國內的安裝源UbuntuDocker
- 教你在Ubuntu中安裝Gscan2PDF 2.5.5Ubuntu
- ubuntu上使用sqlite3UbuntuSQLite
- 在Ubuntu上開啟SSH服務Ubuntu
- 在Ubuntu上使用apt-get安裝MySQL+安全優化Ubuntuapt-getMySql優化
- 教你使用Docker容器化Node.js應用程式DockerNode.js
- 在Ubuntu上建立並測試GRE tunnelUbuntu
- 教程:在Ubuntu 18.04.1上安裝ElasticsearchUbuntuElasticsearch
- 怎樣在 Ubuntu 上禁用 IPv6 ?Ubuntu
- 在Ubuntu 18.04上安裝TensorflowUbuntu
- 在Ubuntu上安裝LAMP伺服器UbuntuLAMP伺服器
- 超酷!在網頁上線上體驗Ubuntu網頁Ubuntu