通過 Linux 容器進行虛擬化

2021-09-06 17:10:21 字數 3999 閱讀 7125

簡單介紹

linux 容器是一種輕量級「虛擬化」方法,用於在單個控制主機上同一時候執行多個虛擬裝置(容器)。還有乙個可用來描寫敘述 linux 容器所執行的操作的術語是「容器化」。

linux 容器提供作業系統級別的虛擬化,當中的核心控制隔離的容器。容器通過核心控制組 (cgroup) 和核心命名空間進行隔離。通過 xen 和 kvm 等其它完整虛擬化解決方式,虛擬化子系統可模擬完整的硬體環境。

apache web server就是乙個 linux 容器使用案例。通過 xen 或 kvm 等超級管理程式,使用者能夠在虛擬機上安裝 suse linux enterprise server 和 apache。虛擬機器的引導方式與不論什麼物理計算機的引導方式一樣,首先進行開機自檢 (post) 以將控制傳遞給 bootloader (grub),然後,bootloader 將載入 linux 核心並啟動 init 程序以針對定義的執行級別載入全部服務和守護程式,比如 apache。

在 suse linux enterprise server 上執行的 apache web server的 linux 容器與超級管理程式演示樣例大相徑庭。對於 suse linux enterprise server 和 apache,須要在 linux 容器中安裝的軟體包較少。最明顯不須要安裝的軟體包是 linux 核心。還有乙個差別是引導程序。使用 linux 容器,引導程序從 init 程序開始,該程序將針對定義的執行級別載入全部服務(比如網路)和守護程式(比如 apache)。linux 容器不須要硬體 post(啟動 grub 並載入 linux 核心)就可以執行。

使用 linux 容器有兩大主要優點。首先,因為在容器引導程序中不須要 post、bootloader 和核心,因此容器能夠很高速地啟動。第二,相比執行超級管理程式的虛擬機器,容器將使用更少的server物理資源。這意味著在單個物理系統中能夠啟動很多其它的容器。

linux 容器的乙個缺點是:容器須要使用主機系統的核心。也就是說,假設主機是 suse linux enterprise server 時,容器將無法執行 microsoft windows。

本文將重點介紹與 linux 容器相關的重要術語;闡述 suse linux enterprise server 11 sp3 中 linux 容器的體系結構;討論 linux 容器使用入門;還提供了一些有關 suse linux enterprise server 中的 linux 容器的未來的一些見解。

術語

結構概覽

linux 容器不須要超級管理程式。這與型別 1 或型別 2 超級管理程式不同,後兩者中的超級管理程式層位於硬體層之上。從概念上講,可將 linux 容器視為經過改進的 chroot 技術,該技術利用 linux 中的額外功能來建立強大但輕量的虛擬化選項,該選項差點兒可將全部容器內容與 linux 容器主機server隔離開來。

chroot 環境可分隔檔案系統,從而使容器看起來是在檔案系統的根上執行,但實際上檔案系統儲存在 linux 容器主機server內的資料夾中。suse linux enterprise server 11 sp3 的預設位置是將容器檔案系統儲存在 /var/lib/lxc/中。也能夠將容器檔案系統儲存在虛擬磁碟映像中。這不是儲存 rootfs 的預設方法,而是 lxc.conf 手冊頁中介紹的高階配置選項。

lxc 手冊頁會提到將 linux 容器用作應用程式容器或系統容器。眼下,suse linux enterprise server 11 sp3 僅支援設定系統容器。系統容器是安裝大部分 suse linux enterprise server 作業系統檔案的位置,這些檔案安裝在即將成為容器的根的資料夾中。應用程式容器僅包括特定於要在容器中執行的應用程式的檔案和庫。全部其它檔案和庫將通過 linux 容器主機檔案系統使用。設定應用程式容器不如設定系統容器easy,但它是 suse linux enterprise server 上的 linux 容器的未來目標。

能夠將 linux 容器中的網路分隔,這意味著容器能夠有自己的 ip 位址。網路分隔通過在 suse linux enterprise server 中使用 linux 橋接來實現。linux 橋接技術與用於 suse linux enterprise server 上的 xen 和 kvm 中的網路的橋接技術同樣。使用 brctl 命令詢問並與 linux 容器主機server上的網橋互動。

linux 容器使用入門

首先從已經註冊和全然安裝了增補程式的 suse linux enterprise server 11 sp3 系統開始。安裝 gnome 這種 gui 將使得 yast 模組的使用變得easy簡單,但不須要 gui。有一項要點須要注意:建立 linux 容器須要具備已定義的而且可用的儲存庫。建議您註冊 linux 容器主機server,以便在建立容器時已正確設定安裝和更新儲存庫,而且儲存庫可用。

linux 容器須要在 linux 容器主機上安裝多個軟體包。使用 yast 或 zypper 安裝 lxc、yast2-lxc、sles-lxcquick_en-pdf 和 bridge-utils。yast 或 zypper 可能還會加入�另外一些相關軟體包。雖然 sles-lxcquick_en-pdf 不是核心,但它包括 linux 容器 quickstart pdf,該容器位於 /usr/share/doc/manual/sles-lxcquick_en-pdf/sles-lxcquick_en.pdf。

使用 yast 網路設定模組設定網橋。通常,主機上第乙個網橋的預設名稱是「br0」。

suse 已建立了 linux 容器 yast 模組。此模組使您能夠輕鬆建立、刪除、啟動、停止容器以及連線到容器。啟動 linux 容器 yast 模組時,它會自己主動報告來自 lxc-createconfig 的輸出。除檔案功能通常顯示為禁用以外,全部功能都顯示為已啟用。假設報告不論什麼錯誤或出現紅色文字,則必須在建立和啟動第乙個容器之前解決這些問題。

假設更習慣使用命令列,則 linux 管理員能夠非常輕鬆地使用「lxc-」命令與不論什麼容器進行互動。如前面提到的那樣,lxc-checkconfig 命令能夠驗證控制組虛擬檔案系統和子系統是否已正確安裝,以及全部內容是否均已正確配置,能夠執行容器。lxc-createconfig 和 lxc-create 可定義容器並基於 linux 容器模板將 suse linux enterprise server 安裝到容器中。能夠對模板進行自己定義,以加入�其它要安裝到容器中的軟體包。模板檔案位於 /usr/share/lxc/templates 中。

lxc-start 和 lxc-stop 命令簡單明瞭。管理員可以使用 lxc-console 連線到在後台啟動的容器。lxc-ls、lxc-info 和 lxc-ps 命令使管理員可以列出容器中的程序、獲取程序資訊並檢視程序。還有更多 lxc 命令,但最後乙個須要重點介紹一下的 lxc 命令是 lxc-cgroup。此命令控制容器的資源管理環節,包含設定 cpu、記憶體和塊 i/o 限制。

outlook

借助 suse linux enterprise server 12,我們將從「lxc」linux 容器框架切換到 libvirt-lxc。這意味著:用於管理 xen 和 kvm 的同樣庫和工具(比如 virt-manager)將用於管理 linux 容器。

我們還會介紹 docker 專案,這是乙個基於 linux 容器構建的框架。請看來自 docker 專案站點的引言:「它是乙個輕量級框架(具有功能強大的 api),可提供在容器中構建和部署應用程式的生命週期。」docker 可提供映像儲存庫並簡化容器使用。docker 將成為 suse linux enterprise server 12 中的乙個技術概覽,也就是說,能夠對 docker 進行測試,但不建議用於生產。

總結

linux 容器提供了還有乙個「虛擬化」選項,該選項既有優勢也有侷限。linux 容器的優勢包含:

linux 容器的侷限

下面是另外幾個有關 linux 容器的使用案例想法:

了解具體資訊

Linux虛擬化與容器化

隨著雲計算的不斷發展,計算資源不斷集中於大規模的伺服器集群上。為了充分發揮硬體潛力,提高伺服器效能,虛擬化技術由此誕生。所謂虛擬化技術,是指將計算元件和硬體隔離開來,隱藏底層的硬體物理特性,為使用者提供抽象 統一的模擬計算環境,從而可以適應龐大的硬體資源而不至於浪費效能。如intel vt和amd ...

虛擬化 VS 容器化

本文講的是虛擬化 vs 容器化,編者的話 以 docker 為代表的容器技術一度被認為是虛擬化技術的替代品,然而這兩種技術之間並不是不可調和的。作者分別列舉了容器技術以及虛擬化技術的優缺點,並提出將兩者結合取長補短的解決方案。容器為應用程式提供了隔離的執行空間 每個容器內都包含乙個獨享的完整使用者環...

虛擬化與容器化

安裝 1.使用root許可權操作 安裝命令 yum install docker 2.檢查安裝是否成功 檢查命令docker version 若輸出了 docker 的版本號,說明安裝成功了,可通過以下命令啟動 docker 服務 3.docker啟動命令service docker start 一...