docker、LXC、LXD的區(qū)別及傳統(tǒng)的虛擬機與操作系統(tǒng)虛擬化詳解
1. 概念解釋
1.1. Docker
Docker是一個用于在集中式平臺上創(chuàng)建、部署和運行應(yīng)用程序的開源工具。
這使得主機的操作系統(tǒng)通過容器運行具有相同Linux內(nèi)核的應(yīng)用程序,而不是創(chuàng)建一個完整的虛擬機。
使用docker容器不需要考慮Ram和磁盤空間的分配。它能夠自己處理這些需求。
Docker只提供了應(yīng)用程序的虛擬化,通過cgroup、namespace實現(xiàn)資源隔離,資源限制配置參見resource_constraints。
Docker容器將應(yīng)用和其依賴環(huán)境全部打包到一個單一對象中,在不包含完整的操作系統(tǒng)的情況下就能運行普通應(yīng)用,更加輕量級,可移植性更好。所以它成為了PaaS(比如Kubernates)平臺的基石
Docker提供的特性:
- Docker is Fast and Easy configurable【快速且易于配置】.
- Technical feasibility and increased productivity.
- Secure services【安全服務(wù)】 through commands like secret inspect and secret create, etc.
- Provides application isolation and no container is dependent on any other.【提供應(yīng)用程序隔離,且容器不依賴于任何其他容器】

1.2. LXC
LXC是Linux容器的縮寫,Linux容器是一種操作系統(tǒng),用于通過單個Linux內(nèi)核在受控主機上虛擬運行多個Linux系統(tǒng)。
LXC與內(nèi)核的cgroup捆綁在一起,為進(jìn)程和網(wǎng)絡(luò)空間提供功能,而不是創(chuàng)建一個完整的虛擬機,并為應(yīng)用程序提供一個隔離的環(huán)境。
LXC代表Linux容器,它是一種用于操作系統(tǒng)虛擬化的工具。通過使用LXC,可以在虛擬環(huán)境中而不是在物理系統(tǒng)中操作任何軟件或應(yīng)用程序。虛擬環(huán)境功能使LXC更加安全,成本也更低。LXC很容易操作,因為它帶有控制組【Control groups Cgroups】功能。
LXC為提供了完整的操作系統(tǒng)虛擬化,
操作系統(tǒng)級虛擬化是一種服務(wù)器虛擬化方法,在這種方法中,操作系統(tǒng)的內(nèi)核允許存在多個孤立且隔離的用戶空間實例,而不是只有一個
LCX就是一種輕量級虛擬化,將linux進(jìn)程沙盒化,使用的是linux中的namespace技術(shù)進(jìn)行資源隔離,
- pid namespace隔離了進(jìn)程,
- mount namespace隔離了文件系統(tǒng),
- network namespace隔離了網(wǎng)絡(luò)
LXC提供的特性:
- 它提供了內(nèi)核名稱空間【Kernel namespaces】,如IPC、掛載【mount】、PID、網(wǎng)絡(luò)和用戶。
- 它提供了內(nèi)核功能【Kernel capabilities】。
- Control groups (Cgroups).
- Seccomp profiles

1.3. LXD
LXD代表Linux Daemon,它是一個擴展,主要用于指導(dǎo)LXC。
它用于向LXC提供新的屬性和功能,以便以更有效的方式使用LXC。
LXD和LXC之間的通信是通過使用內(nèi)置庫完成的,liblxc就是這樣一個庫。
2. 區(qū)別
2.1. docker與LXC/LXD容器的區(qū)別
- LXD/LXC是一個系統(tǒng)級容器。Docker是一個應(yīng)用程序容器,
- LXC不能跨機器上進(jìn)行移植,而Docker可以跨機器甚至跨平臺移植。
| 比較點 | LXC | Docker |
|---|---|---|
| Developed by | LXC was created by IBM, Virtuozzo, Google and Eric Biederman. | Docker was created by Solomon Hykes in 2003. |
| Data Retrieval | LXC does not support data retrieval after it is processed. | Data retrieval is supported in Docker. |
| Usability | It is a multi-purpose solution for virtualization. | It is single purpose solution. |
| Platform | LXC is supported only on Linux platform. | Docker is platform dependent. |
| Virtualization | LXC provides us full system virtualization. | Docker provides application virtualization. |
| Cloud support | There is no need for cloud storage as Linux provides each feature. | The need of cloud storage is required for a sizeable ecosystem. |
| Popularity | Due to some constraints LXC is not much popular among the developers. | Docker is popular due to containers and it took containers to a next level. |
| Speed Of Deployment | LXC is not lightweight and consumes a lot of time . | Docker Containers are lightweight and fast. |

2.2. LXC與LXD區(qū)別
- LXD可以看作是LXC的升級版。LXD的管理命令和LXC的管理命令大多相同。
- LXC起源于cgroup和namespaces,使得進(jìn)程之間相互隔離,即進(jìn)程虛擬化。
- LXC有一些缺點,比如無法有效支持跨主機之間的容器遷移、管理復(fù)雜。而LXD很好地解決了這些問題。
- LXC/LXD和docker不同的地方在于LXC/LXD中包含完整的操作系統(tǒng)。
| LXC | LXD |
|---|---|
| LXC is a virtual environment creation tool, it was built by Google, IBM etc. | LXD is an add on for the LXC to provide advanced features and functionalities. |
| Multiple processes are needed for multiple containers and hence it is not flexible. | LXD makes it flexible by providing a single process for multiple containers. |
| Snapshots, Live Migration【快照和動態(tài)遷移】 etc are some of the features which are not supported by LXC. | LXD supports snapshots and lives migration features. |
| Scalability functionality is not provided by LXC and hence users shift to other virtual solutions. | With the use of LXD, scalability is achieved in LXC. |
| Management capabilities are poor, especially in the case of network and storage. | It has better management capabilities like storage pooling. |
| It is not user friendly and needs the expertise to handle the processes. | It provides a user-friendly interface. |
| After data processing, the data cannot be retrieved. | Data retrieval functionality after data processing is provided in LXD. |
| C API is used by the LXC. | LXD uses REST API. |
2.3. 傳統(tǒng)的虛擬機與操作系統(tǒng)虛擬化的區(qū)別
- 傳統(tǒng)的虛擬機使用了一種叫做hypervisor的東西,它運行在內(nèi)核之上,該管理程序通過監(jiān)視其資源使用情況和訪問模式,為在其上運行的應(yīng)用程序提供虛擬化。這會導(dǎo)致大量開銷,導(dǎo)致不必要的性能損失。
- 操作系統(tǒng)級虛擬化的工作方式不同。它使用namespace和cgroup來限制應(yīng)用程序的功能,包括資源的使用,這是linux內(nèi)核提供的一個特性,幾乎沒有開銷。

總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Linux使用skopeo工具如何進(jìn)行docker鏡像同步
這篇文章主要介紹了Linux使用skopeo工具如何進(jìn)行docker鏡像同步問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2025-05-05
docker swarm外部驗證負(fù)載均衡時不生效的解決方案
這篇文章主要介紹了docker swarm外部驗證負(fù)載均衡時不生效的問題,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-04-04
docker?環(huán)境搭建、docker?與容器常用指令大全(推薦)
這篇文章主要介紹了docker?環(huán)境搭建、docker?與容器常用指令大全,主要包括docker容器操作命令匯總,文中介紹需要注意的是如果想要刪除一個容器,需要先停止該容器且如果鏡像中有運行狀態(tài)的容器,也是無法刪除容器的,需要的朋友可以參考下2022-06-06
docker部署nginx及nginx.conf文件配置方式
這篇文章主要介紹了docker部署nginx及nginx.conf文件配置方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-08-08
Docker創(chuàng)建MongoDB容器并添加root密碼驗證與更多用戶詳細(xì)步驟
MongoDB是一個著名的面向文檔的數(shù)據(jù)庫,被許多現(xiàn)代Web應(yīng)用程序使用,下面這篇文章主要給大家介紹了關(guān)于Docker創(chuàng)建MongoDB容器并添加root密碼驗證與更多用戶的相關(guān)資料,需要的朋友可以參考下2023-01-01
Docker Registry搭建私有鏡像倉庫的實現(xiàn)方法
這篇文章主要介紹了Docker Registry搭建私有鏡像倉庫的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-10-10

