什么是Docker
Docker是一個虛擬環境中的容器,可以將你的可執行文件,配置文件及一切其他你需要的文件一起打包到這個容器中,並發布和應用到任意平台中
docker比如一個集裝箱,在一艘大船上,可以把貨物規整的擺放起來,各種各樣的貨物備集裝箱標准化,各個集裝箱之間不會影響,只要這些貨物在集裝箱里
封裝的好好的,那我們就可以用另外一艘船把他們運走
docker生命周期
鏡像:可以理解為一堆靜態的文件
容器:是鏡像run起來之后的一個實例
倉庫:鏡像保存的地方
docker六大優點:
更高效的利用系統資源:容器不需要進行硬件虛擬運行完整操作系統的額外開銷。無論執行速度,內存損耗或文件的存儲速度都比傳統虛擬機更高效
更快速的啟動時間:由於直接運行於宿主的內核,無序啟動完整的操作系統,可以做到秒級,毫秒級的啟動時間,大大節約了開發,測試,部署的時間
一致的運行環境:由於開發環境,測試環境,生產環境不一致,導致bug並未在開發中發現,而docker的景象提供了內核外完整的運行環境,確保環境一致
持續交付和部署:持續集成系統進行集成測試,而運維人員可以直接在生產環境中快速部署改鏡像,
更輕松的遷移:docker可以在很多平台上運行,無論是物理機,虛擬機,公有雲,私有雲,筆記本。器運行結果是一致的
更輕松的維護和擴展:docker使用的分層存儲以及鏡像技術,使得應用重復部分的復用更為容易,也使得應用的維護更新更加簡單,基礎鏡像進一步擴張也變得非常簡單
docker對比傳統虛擬機
什么是kvm?
KVM是一個開源的系統虛擬化模塊,使用的是liunx自身的調度器管理,先對xen,其核心代碼少,kvm是基於硬件的完全虛擬化,使用kvm把多台物理機虛擬化后,組成一個大的虛擬化
資源池,方便用戶從資源池中安分配計算能力,提升資源的使用效率,保證多用戶資源之間的隔離性,安全性
kvm概念:
在kvm技術中,應用到兩個東西,qenu和kvm,kvm負責cpu虛擬化,qemu是模擬IO設備(網卡,磁盤)kvm加上qemu之后實現真正的服務器虛擬化
一.kvm功能概述:
內存管理:KVM依賴Linux內核進行內存管理。上面提到,一個KVM客戶機就是一個普通的Linux進程,所以,客戶機的“物理內存”就是宿主機內核管理的普通進程的虛擬內存。進而,Linux內存管理的機制、通過mmap的進程間共享內存,統統可以應用到客戶機內存管理上
二.存儲和客戶機鏡像的格式:
這是qemu的功能特性
1.KVM能夠使用Linux支持的任何存儲來存儲虛擬機鏡像,包括具有IDE、SCSI和 SATA的本地磁盤,網絡附加存儲NAS或NFS,或者支持iSCSI和光線通道的SAN。多路徑I/O可用於改進存儲吞吐量和提供冗余。
2.允許客戶機鏡像在多個宿主機之間共享或使用邏輯卷共享。磁盤鏡像支持稀疏文件形式,支持通過僅在虛擬機需要時分配存儲空間,而不是提前分配整個存儲空間,這就提高了存儲利用率
三 實時遷移
kvm支持實時遷移,這提供了在宿主機之間轉移正在運行的客戶機而不中斷服務的能力。實時遷移對用戶是透明的,客戶機保持打開,網絡連接保持活動,用戶應用程序也持續運行,但客戶機轉移到了一個新的宿主機上,(除了實時的遷移,kvm還支持快照)存儲並能在以后恢復它
四 設備驅動程序
KVM支持混合虛擬化,其中半虛擬化的驅動程序安裝在客戶機操作系統中,允許虛擬機使用優化的 I/O 接口而不使用模擬的設備,從而為網絡和塊設備提供高性能的 I/O。
五 性能和可伸縮性
kvm繼承了linux的性能伸縮性,kvm在cpu,內存,網絡,磁盤等性能表現很棒,大多大歐洲原生系統的95%以上,對於宿主機可以同時運行客戶機數量,軟件無上限
這意味着,在復雜,在垃圾的應用程序都可以在kvm虛擬機上跑起來
對比:
|
KVM | docker | |
基礎設施 | 它可以是你的個人電腦,數據中心的服務器,或者是雲主機 | 基礎設施 | 配好yum原直接install |
虛擬機管理系統 | 可以在主操作系統之上運行多個不同的從操作(管理)系統(openstack等) | 主操作系統 | 所有主流的Linux發行版都可以運行Docker。對於MacOS和Windows,也有一些辦法”運行”Docker。 |
客戶機操作系統 | 假設你需要運行3個相互隔離的應用,則需要使用Hypervisor啟動3個客戶機操作系統,也就是3個虛擬機。這些虛擬機都非常大,也許有700MB,這就意味着它們將占用2.1GB的磁盤空間。更糟糕的是,它們還會消耗很多CPU和內存。 | Docker守護進程 | docker守護進程它是運行在操作系統之上的后台進程,負責管理Docker容器。 |
各種依賴 | 一個客戶機操作系統都需要安裝許多依賴。如果使用其他編程語言,比如Python或者,都會需要安裝對應的依賴庫。等等 | 各種依賴 | 對於Docker,應用的所有依賴都打包在Docker鏡像中,Docker容器是基於Docker鏡像創建的。 |
應用 | 安裝依賴之后,就可以在各個客戶機操作系統分別運行應用了,這樣各個應用就是相互隔離的 | 應用 | 應用的源代碼與它的依賴都打包在Docker鏡像中,不同的應用需要不同的Docker鏡像。不同的應用運行在不同的Docker容器中,它們是相互隔離的。 |
總結
在應用方面docker (經得起折騰,部署速度快),在系統方面kvm( 宿主隔離,也支持快照)