1、Docker 是什麼?
Docker 是一個開源的應用容器引擎,基於 Go 語言 並遵從 Apache2.0 協議開源。
Docker 可以讓開發者打包他們的應用以及依賴包到一個輕量級、可移植的容器中,然後釋出到任何流行的 Linux 機器上,也可以實現虛擬化。
容器是完全使用沙箱機制,相互之間不會有任何介面(類似 iPhone 的 app),更重要的是容器效能開銷極低。
2、Docker 為什麼會出現?
①、一次構建,到處執行
一個專案,從開發-上線,開發人員需要在本機進行開發,運維人員將打包的服務部署上線,涉及到作業系統變更,應用配置變更,很常見的一種情況是:
我本地執行的好好的,怎麼到你那就不行了呢?
進而衍生出:
專案可以帶環境安裝嗎?也就是部署的時候,可以把原始環境一起打包複製過來。
Docker 便能幹這個事,通過 Docker 打包映象釋出測試,提供了一個標準化的解決方案,再也不用擔心因為環境不一致而導致的服務部署問題。
②、更高效的計算資源利用
我們部署專案,發展歷程如下:
一、物理機時代
部署一個服務,會粗略估計服務所需要的機器效能,然後去採購對應的真實物理機器,然後在該機器上安裝服務需要的一些軟體,比如伺服器Tomcat,資料庫MySQL等等。
物理機時代還是有很多缺點的:
1、部署非常慢:採購機器,安裝系統,安裝軟體等等;
2、成本高以及資源浪費:通常為了以防服務效能不夠,我們都會盡量採購比預期資源高一點的機器,不僅會增加成本,還會造成機器資源浪費;
3、難於擴充套件與遷移:由於是真實的物理機,擴充套件或者遷移會比較麻煩;
二、虛擬機器時代
VMware 相信大家都玩過,通過VMware 我們能在自己電腦上建立很多虛擬機器器,而物理機時代就是在一臺真實物理機上,虛擬出多臺機器,而且每臺機器都可以看做是一臺獨立的電腦。
相對於物理機時代,虛擬機器能夠在一臺機器上建立多臺機器,能夠充分利用資源,並且也做到了機器之間的隔離,機器效能不夠用了,也可以通過 Hypervisor 隨時進行擴充套件。
但是也有個缺點,我們每一臺虛擬機器都要獨立安裝作業系統,大家知道作業系統其實也是比較佔用效能的,有多少臺虛擬機器,我們就得多安裝多少個作業系統,這樣就浪費了很多資源,那麼怎麼解決呢?
三、容器化時代
容器類似於 VM,但是它們具有被放寬的隔離屬性,可以在應用程式之間共享作業系統(OS)。 因此,容器被認為是輕量級的。容器與 VM 類似,具有自己的檔案系統、CPU、記憶體、程式空間等。可以把容器看做是不用安裝作業系統的虛擬機器,容器化技術比虛擬機器更加靈活,更加小巧,更加極致的利用物理機資源。
3、Docker 的優點
①、部署快,開發測試更加敏捷
通過Docker 打包映象釋出測試,一鍵執行。
②、快速擴縮機器
由於Docker容器快速啟動特性,可以很快速的啟動幾十個、上百個容器來提供更多併發和資源利用率,並且這麼多容器也有比較成熟的解決方案來統一管理,比如K8S。
③、提高系統利用率,降低硬體成本
輕量級的虛擬機器,更省資源。
④、跨環境可移植
⑤、更好的支援微服務
微服務是近幾年來IT圈內談論比較多的一個名詞,意義也很簡單:儘可能細粒度拆分業務程式架構,由多個獨立服務組成業務系統。
而Docker的容器設計原則:一個容器一個服務,容器之間相互隔離,和微服務正好遙相呼應。
⑥、應用運維標準化,支援不同語言應用
⑦、避免雲廠商鎖定
4、Docker 學習網站
①、官網(永遠的神)
②、官方文件
③、倉庫地址