Docker:認識(一)

1.Docker

本博客以及後續,是根據尚硅谷_Docker核心技術課程和自己學習整理所得,供後續學習查看使用。

1.1 場景

  • 一款產品從開發到上線,從操作系統,到運行環境,再到應用配置。作爲開發+運維之間的協作我們需要關心很多東西,這也是很多互聯網公司都不得不面對的問題,特別是各種版本的迭代之後,不同版本環境的兼容,對運維人員都是考驗
  • Docker之所以發展如此迅速,也是因爲它對此給出了一個標準化的解決方案。
  • 環境配置如此麻煩,換一臺機器,就要重來一次,費力費時。很多人想到,能不能從根本上解決問題,軟件可以帶環境安裝?也就是說,安裝的時候,把原始環境一模一樣地複製過來。開發人員利用 Docker 可以消除協作編碼時“在我的機器上可正常工作”的問題。

後續更新...

1.2 介紹

  • Docker 是一個開源的應用容器引擎,基於 Go 語言 並遵從 Apache2.0 協議開源。
  • Docker 可以讓開發者打包他們的應用以及依賴包到一個輕量級、可移植的容器中,然後發佈到任何流行的 Linux 機器上,也可以實現虛擬化。
  • 容器是完全使用沙箱機制,相互之間不會有任何接口(類似 iPhone 的 app),更重要的是容器性能開銷極低。
  • Docker 從 17.03 版本之後分爲 CE(Community Edition: 社區版) 和EE(Enterprise Edition: 企業版)
  • Docker的主要目標是“Build,Ship and Run Any App,Anywhere”,也就是通過對應用組件的封裝、分發、部署、運行等生命週期的管理,使用戶的APP(可以是一個WEB應用或數據庫應用等等)及其運行環境能夠做到“一次封裝,到處運行
  • 一句話:解決了運行環境和配置問題軟件容器,方便做持續集成並有助於整體發佈的容器虛擬化技術。

1.3 優點

1.更快速的應用交付和部署
傳統的應用開發完成後,需要提供一堆安裝程序和配置說明文檔,安裝部署後需根據配置文檔進行繁雜的配置才能正常運行。Docker化之後只需要交付少量容器鏡像文件,在正式生產環境加載鏡像並運行即可,應用安裝配置在鏡像裏已經內置好,大大節省部署配置和測試驗證時間。
2.更便捷的升級和擴縮容
隨着微服務架構和Docker的發展,大量的應用會通過微服務方式架構,應用的開發構建將變成搭樂高積木一樣,每個Docker容器將變成一塊“積木”,應用的升級將變得非常容易。當現有的容器不足以支撐業務處理時,可通過鏡像運行新的容器進行快速擴容,使應用系統的擴容從原先的天級變成分鐘級甚至秒級。
3.更便捷的升級和擴縮容
應用容器化運行後,生產環境運行的應用可與開發、測試環境的應用高度一致,容器會將應用程序相關的環境和狀態完全封裝起來,不會因爲底層基礎架構和操作系統的不一致性給應用帶來影響,產生新的BUG。當出現程序異常時,也可以通過測試環境的相同容器進行快速定位和修復。
4.更便捷的升級和擴縮容
Docker是內核級虛擬化,其不像傳統的虛擬化技術一樣需要額外的Hypervisor支持,所以在一臺物理機上可以運行很多個容器實例,可大大提升物理服務器的CPU和內存的利用率。

1.4 運行原理

1.運行原理:
Docker是一個Client-Server結構的系統,Docker守護進程運行在主機上, 然後通過Socket連接從客戶端訪問,守護進程從客戶端接受命令並管理運行在主機上的容器。 容器,是一個運行時環境,就是我們前面說到的集裝箱。
在這裏插入圖片描述

2.爲啥快:

(1)docker有着比虛擬機更少的抽象層。由亍docker不需要Hypervisor實現硬件資源虛擬化,運行在docker容器上的程序直接使用的都是實際物理機的硬件資源。因此在CPU、內存利用率上docker將會在效率上有明顯優勢。
(2)docker利用的是宿主機的內核,而不需要Guest OS。因此,當新建一個容器時,docker不需要和虛擬機一樣重新加載一個操作系統內核。仍而避免引尋、加載操作系統內核返個比較費時費資源的過程,當新建一個虛擬機時,虛擬機軟件需要加載Guest OS,返個新建過程是分鐘級別的。而docker由於直接利用宿主機的操作系統,則省略了返個過程,因此新建一個docker容器只需要幾秒鐘。

在這裏插入圖片描述
在這裏插入圖片描述

2.Docker三元素

2.1 鏡像(Image)

  • Docker 鏡像(Image)就是一個只讀的模板。鏡像可以用來創建 Docker 容器,一個鏡像可以創建很多容器
  • 鏡像是一種輕量級、可執行的獨立軟件包,用來打包軟件運行環境和基於運行環境開發的軟件,它包含運行某個軟件所需的所有內容,包括代碼、運行時、庫、環境變量和配置文件。
    在這裏插入圖片描述

UnionFS(聯合文件系統)
在這裏插入圖片描述
Docker鏡像加載原理
在這裏插入圖片描述
在這裏插入圖片描述
分層鏡像

鏡像是分層的,最大的一個好處就是 - 共享資源
比如:有多個鏡像都從相同的 base 鏡像構建而來,那麼宿主機只需在磁盤上保存一份base鏡像,
同時內存中也只需加載一份 base 鏡像,就可以爲所有容器服務了。而且鏡像的每一層都可以被共享。

特點
Docker鏡像都是隻讀的,當容器啓動時,一個新的可寫層被加載到鏡像的頂部。這一層通常被稱作“容器層”,“容器層”之下的都叫“鏡像層”。
在這裏插入圖片描述

容器反生成鏡像

在這裏插入圖片描述
在這裏插入圖片描述

2.2 容器(Container)

  • Docker 利用容器(Container)獨立運行的一個或一組應用。容器是用鏡像創建的運行實例。即一個實例就是一個容器
  • 它可以被啓動、開始、停止、刪除。每個容器都是相互隔離的、保證安全的平臺。
  • 可以把容器看做是一個簡易版的 Linux 環境(包括root用戶權限、進程空間、用戶空間和網絡空間等)和運行在其中的應用程序。
  • 容器的定義和鏡像幾乎一模一樣,也是一堆層的統一視角,唯一區別在於容器的最上面那一層是可讀可寫的。

2.3 倉庫(Repository)

  • 倉庫(Repository)是集中存放鏡像文件的場所。
  • 倉庫(Repository)和倉庫註冊服務器(Registry)是有區別的。倉庫註冊服務器上往往存放着多個倉庫,每個倉庫中又包含了多個鏡像,每個鏡像有不同的標籤(tag)。
  • 倉庫分爲公開倉庫(Public)和私有倉庫(Private)兩種形式。
    最大的公開倉庫是 Docker Hub(https://hub.docker.com/),
    存放了數量龐大的鏡像供用戶下載。國內的公開倉庫包括阿里雲 、網易雲 等

2.4 三元素之間關係

  • Docker 本身是一個容器運行載體或稱之爲管理引擎。我們把應用程序和配置依賴打包好形成一個可交付的運行環境,這個打包好的運行環境就似乎 image鏡像文件。只有通過這個鏡像文件才能生成 Docker 容器。image 文件可以看作是容器的模板。Docker 根據 image 文件生成容器的實例。同一個 image 文件,可以生成多個同時運行的容器實例。
  • image 文件生成的容器實例,本身也是一個文件,稱爲鏡像文件。
  • 一個容器運行一種服務,當我們需要的時候,就可以通過docker客戶端創建一個對應的運行實例,也就是我們的容器
  • 至於倉儲,就是放了一堆鏡像的地方,我們可以把鏡像發佈到倉儲中,需要的時候從倉儲中拉下來就可以了。
    在這裏插入圖片描述

參考

1.官網
2.這可能是最爲詳細的Docker入門吐血總結
3.Docker 教程
4.Docker中文文檔

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章