Docker學習筆記(一)—— 概述

1. Docker是個什麼玩意

說Docker是什麼以前,先來看一看Docker爲何會出現。咱們知道,在學習過程當中咱們須要頻繁地安裝配置一些軟件,不論是在Windows下仍是在Linux,這些東西的配置過程都是很是費時費力的,稍有不慎就得刪了重來,換一臺機器,還得重來一次,更討厭的是常常出現一些環境的兼容性問題(好比一些軟件只兼容win7)。那麼有沒有這樣一種解決方式:軟件帶環境安裝,省去麻煩的安裝配置過程,而且徹底不用考慮環境兼容問題,由於自帶環境嘛。也就是說,安裝的時候,把原始環境如出一轍地複製過來(上面說了,有一些軟件不兼容win10,那我就在win7上裝好,將軟件和系統揉成一坨,拿到win10上使用)。java

粗暴的總結成一句話:Docker就是這麼個玩意兒——應用程序+運行環境所構成的容器docker

2. Docker的踐行理念

經過上文,咱們大體知道了這是個什麼東西,接下來咱們看看Docker的設計理念。數據庫

Docker是基於Go語言實現的雲開源項目。服務器

Docker的主要目標是「Build,Ship and Run Any App,Anywhere」,也就是經過對應用組件的封裝、分發、部署、運行等生命週期的管理,使用戶的APP(能夠是一個WEB應用或數據庫應用等等)及其運行環境可以作到「一次封裝,處處運行」。架構

Linux 容器技術的出現就解決了這樣一個問題,而 Docker 就是在它的基礎上發展過來的。開發人員利用 Docker 能夠消除協做編碼時「在個人機器上可正常工做」的問題。依託Docker技術, 咱們能夠把應用程序和它所須要的系統環境,由下而上打包,達到應用程式跨平臺間的無縫接軌運做。 只須要一次配置好環境,換到別的平臺、環境上就能夠一鍵部署好,極大地方便了應用部署運維 。運維

總的說來:你們知道java是一門跨平臺語言,一次編譯,處處「調試」;而Docker真的作到了,一次構建,處處運行!!微服務

3. 淺談虛擬化技術

大佬說了一句話:性能

Docker是解決了運行環境和配置問題的軟件容器,方便作持續集成並有助於總體發佈的容器化虛擬技術。學習

這句話提到了虛擬化和容器化兩個技術名詞,接下來咱們來簡單瞭解一下這兩個玩意兒。測試

3.1 以前的虛擬化技術:

你們確定都接觸過的虛擬化技術——虛擬機(例如:vmware)。虛擬機就是一種帶環境安裝的解決方案,它能夠在一種操做系統裏面運行另外一種操做系統,好比說在Windows裏面運行Linux系統(Vmware虛擬出一套硬件平臺,Linux就是運行在這套平臺上的)。應用程序對此毫無感知,由於虛擬機看上去跟真實系統如出一轍,而對於底層系統來講,虛擬機就是一個普通文件,不須要了就刪掉,對其餘部分毫無影響。這類虛擬機完美的運行了另外一套系統,可以使應用程序,操做系統和硬件三者之間的邏輯不變。 簡單畫個圖感覺一下:

注意:APP是運行一層虛擬化出來的硬件平臺上,這樣的虛擬機具備如下缺點:

  • 資源佔用多
  • 冗餘步驟多
  • 啓動慢

3.2 容器化虛擬化技術:

因爲前面虛擬機存在這些缺點,Linux 發展出了另外一種虛擬化技術:Linux 容器(Linux Containers,縮寫爲 LXC)。Linux 容器不是模擬一個完整的操做系統,而是對進程進行隔離。有了容器,就能夠將軟件運行所需的全部資源打包到一個隔離的容器中。容器與虛擬機不一樣,不須要捆綁一整套操做系統,只須要軟件工做所需的庫資源和設置。系統所以而變得高效輕量並保證部署在任何環境中的軟件都能始終如一地運行。

比較了 Docker 和傳統虛擬化方式的不一樣之處:

  • 傳統虛擬機技術是虛擬出一套硬件後,在其上運行一個完整操做系統,在該系統上再運行所需應用進程;

  • 而容器內的應用進程直接運行於宿主的內核,容器內沒有本身的內核,並且也沒有進行硬件虛擬。所以容器要比傳統虛擬機更爲輕便。

  • 每一個容器之間互相隔離,每一個容器有本身的文件系統 ,容器之間進程不會相互影響,能區分計算資源。

3.3 對比傳統虛擬機總結

特性 容器 虛擬機
啓動 秒級 分鐘級
硬盤使用 通常爲 MB 通常爲 GB
性能 接近原生 弱於
系統支持量 單機支持上千個容器 通常幾十個

4.從DevOps的角度看Docker(選看)

4.1 更快的應用交付和部署:

傳統的應用開發完成後,須要提供一堆安裝程序和配置說明文檔,安裝部署後需根據配置文檔進行繁雜的配置才能正常運行。Docker化以後只須要交付少許容器鏡像文件,在正式生產環境加載鏡像並運行便可,應用安裝配置在鏡像裏已經內置好,大大節省部署配置和測試驗證時間。

4.2 更便捷的應用升級和擴縮容

隨着微服務架構和Docker的發展,大量的應用會經過微服務方式架構,應用的開發構建將變成搭樂高積木同樣,每一個Docker容器將變成一塊「積木」,應用的升級將變得很是容易。當現有的容器不足以支撐業務處理時,可經過鏡像運行新的容器進行快速擴容,使應用系統的擴容從原先的天級變成分鐘級甚至秒級。

4.3 更簡單的系統運維

應用容器化運行後,生產環境運行的應用可與開發、測試環境的應用高度一致,容器會將應用程序相關的環境和狀態徹底封裝起來,不會由於底層基礎架構和操做系統的不一致性給應用帶來影響,產生新的BUG。當出現程序異常時,也能夠經過測試環境的相同容器進行快速定位和修復。

4.4 更高效的利用系統資源

Docker是內核級虛擬化,直接運行在硬件平臺上,它不像傳統的虛擬化技術同樣須要額外Hypervisor支持,因此在一臺物理機上能夠運行不少個容器實例,可大大提高物理服務器的CPU和內存的利率。

除此以外,還有更快速的啓動、保證一致的運行環境、持續交付和部署、更輕鬆的遷移。。。。

總而言之:Docker天下第一 ~

既然Docker這麼完美,那麼咱們是否是對着它該來一發?下篇筆記記錄了怎麼擼它~

參考文章:

[1] 周陽.Docker基礎篇之快速上手

[2] 李衛民.Docker文檔

相關文章
相關標籤/搜索