一、Docker是什么
1. 為什么會有Docker
一款產品從開發到上線,從操作系統到運行環境,再到應用配置。作為開發+運維之間的協作我們需要關心很多東西,這也是很多互聯網公司都不得不面對的問題,特別是各種版本的迭代之后,不同版本環境的兼容,對運維人員都是考驗。安裝的時候,把原始環境一模一樣地復制過來,開發人員利用Docker可以消除協作編碼時“在我的機器上可正常工作”的問題
2.Docker的理念
docker是基於GO語言實現的雲開源項目。docker的主要目標是“build,ship and run APP,anywhere“也就是通過對應用組件的封裝、分發、部署、運行等生命周期的管理,使用戶的APP及用戶環境能夠做到”一次封裝,到處運行“
3.總結
解決了運行環境和配置問題軟件容器,方便做持續集成並有助於整體發布的容器虛擬化技術。
二、Docker能干什么
1.之前的虛擬技術
虛擬機就是帶環境安裝的一種解決方案。它可以在一種操作系統中運行另一種操作系統,應用程序對此毫無感知,因為虛擬機看上去跟真實系統一模一樣,而對於底層系統來說,虛擬機就是一個普通文件,不需要了就刪掉,對其它部分毫無影響。這類虛擬機完美的運行了另一套系統,能夠使應用程序、操作系統和硬件三者之間的邏輯不變。
缺點:占用資源多、冗余步驟多、啟動慢
2.容器虛擬化技術
由於虛擬機存在的缺點,Linux發展出了另外一種虛擬化技術:Linux容器。Linux容器不是模擬一個完整的操作系統,而是對進程進行隔離。有了容器,就可以將軟件所需的所有資源打包到一個隔離的容器中。容器與虛擬機不同,不需要捆綁一套操作系統,只需要軟件工作所需的庫資源和設置。系統因此而變得高效輕量並保證部署在任何環境中的軟件都能始終如一地運行。
①傳統虛擬機是虛擬出一套硬件后,在其上運行一個完整操作系統,在該系統上再運行所需應用進程
②容器內的應用進程直接運行於宿主內核,容器沒有自己的內核,而且也沒有進行硬件虛擬。因此容器要比傳統虛擬機更加輕便
③每個容器之間相互隔離,每個容器都有自己的文件系統,容器之間進程不會相互影響,能區分計算資源
3.開發、運維 DevOps
一次構建,隨處運行
- 更快速的應用交付和部署
- 更便捷的升級和擴縮容
- 更簡單的系統運維
- 更高效的計算資源利用
4.企業現象
2020年春節疫情期間,全國各高校線上開學,各企業線上辦公,流量每天呈指數激增,是對中國互聯網人的一場技術大考驗。一些在線產品在這期間保持了持續不斷的十倍、幾十倍的業務容量增長:釘釘8天擴容10萬台服務器,騰訊在線會議緊急擴容100萬核。整個系統需要的資源是超乎想象的,用最短的時間解決史無前例的問題,調動全公司的資源,把解決問題的時間縮短十倍。2月12日,釘釘宣布連續擴容10萬台服務器,在疫情期間道路封閉、園區隔斷、人員異地的條件下,阿里雲完成了十萬台服務器的調撥、打包、運輸、調度、上架、發布。騰訊表示,帶寬擴容需要三個月,但實際上我們只花了三天。這些我們甚至都不能想象的操作背后,離不開容器管理和自動化。
三、Docker安裝
1、前提
-
CentOS Docker安裝
Docker支持以下的CentOS版本:CentOS 7(64-bit)、CentOS 6.5(64-bit)或更高版本
-
前提條件
目前,CentOS僅發行版中的內核支持Docker
Docker運行在CentOS7上,要求系統為64位、系統內核版本為3.10以上
Docker運行在CentOS 6.5或更高的版本上,要求系統為64位、系統內核版本為2.6.32-431或更高
-
查看自己的內核
四、Docker原理
1.Docker是怎么樣工作的
Docker是一個Client-Server結構的系統,Docker守護進程運行在主機上,然后通過Socket連接從客戶端訪問,守護進程從客戶端接受命令並管理運行在主機上的容器。容器,是一個運行時環境,就是所謂的“集裝箱”
2、為什么Docker比VM快
1)Docker有着比虛擬機更少的抽象層。由於Docker不需要Hypervisor實現硬件資源虛擬化,運行在Docker容器上的程序直接使用的都是實際物理機的硬件資源。因此在CPU、內存利用率上Docker將會在效率上有明顯優勢
2)Docker利用的是宿主機的內核,而不需要Guest OS。因此,當新建一個容器時,Docker不需要和虛擬機一樣重新加載一個操作系統內核。仍而避免引尋、加載操作系統內核等幾個比較費時費資源的過程,當新建一個虛擬機時,虛擬機軟件需要加載Guest OS,這個新建過程是分鍾級別的。而Docker由於直接利用宿主機的操作系統,則省略了這個過程,因此新建一個Docker容器只需要幾秒鍾
Docker容器 | 虛擬機 | |
---|---|---|
操作系統 | 與宿主機共享OS | 宿主機OS上運行虛擬機OS |
存儲大小 | 鏡像小,便於存儲與傳輸 | 鏡像龐大(VMdk/vdi等) |
運行性能 | 幾乎無額外性能損失 | 操作系統額外的CPU、內存消耗 |
移植性 | 輕便、靈活、適用於Linux | 笨重,與虛擬化技術耦合度高 |
硬件親和性 | 面向軟件開發者 | 面向硬件運維者 |
部署速度 | 快速、秒級 | 較慢,10s以上 |