Docker 概覽

什麼是Docker

Docker是開發,運行和部署應用程序的開放管理平臺。 開發人員能利用docker 開發和運行應用程序 運維人員能利用docker 部署和管理應用程序html

 

 

Docker 平臺介紹

Docker提供了在一個徹底隔離的環境中打包和運行應用程序的能力,這個隔離的環境被稱爲容器。linux

因爲容器的隔離性和安全性,所以能夠在一個主機(宿主機)上同時運行多個相互隔離的容器,互不干預。docker

Docker已經提供工具和組件(Docker Client、Docker Daemon等)來管理容器的生命週期: 使用容器來開發應用程序及其支持組件。windows

容器成爲分發和測試你的應用程序的單元。 準備好後,將您的應用程序部署到生產環境中,做爲容器或協調服務。不管您的生產環境是本地數據中心,雲提供商仍是二者的混合,這都是同樣的。安全

 

爲何用 Docker

 

Docker使您可以將應用程序與基礎架構分開,以便您能夠快速交付軟件。 藉助Docker,您能夠像管理應用程序同樣管理基礎架構。網絡

經過利用Docker的方法快速進行運輸,測試和部署代碼,您能夠顯着縮短編寫代碼和在生產環境中運行代碼之間的延遲。架構

如:運維

  1. 開發人員在本地編寫代碼,能夠使用Docker同事進行共享,實現協同工做。
  2. 使用Docker開發完成程序,能夠直接對應用程序執行自動和手動測試。
  3. 當開發人員發現錯誤或BUG時,能夠直接在開發環境中修復後,並迅速將它們從新部署到測試環境進行測試和驗證。
  4. 利用Docker開發完成後,交付時,直接交付Docker,也就意味着交付完成。
  5. 後續若是有提供修補程序或更新,須要推送到生成環境運行起來,也是同樣的簡單。

Docker主要解決的問題:工具

  • 保證程序運行環境的一致性;
  • 下降配置開發環境、生產環境的複雜度和成本;
  • 實現程序的快速部署和分發。

 

Docker 引擎介紹

Docker Engine是一個包含如下組件的 客戶端-服務端(C/S)應用程序測試

  • 服務端 --- 一個長時間運行的守護進程(Docker Daemon)
  • REST API --- 一套用於與Docker Daemon通訊並指示其執行操做的接口
  • 客戶端 --- 命令行接口CLI( Command Line Interface)

 

 

 

CLI利用Docker命令經過REST API直接操控Docker Daemon執行操做

Docker Daemon負責建立並管理Docker的對象(鏡像、容器、網絡、數據卷)

 

Docker結構概覽圖

 

 

Docker 結構簡介

Docker客戶端(Docker Client)

  • Docker客戶端(Docker Client)是用戶與Docker進行交互的最主要方式。
  • 當在終端輸入docker命令時,對應的就會在服務端產生對應的做用,並把結果返回給客戶端。
  • Docker Client除了鏈接本地服務端,經過更改或指定DOCKER_HOST鏈接遠程服務端。

Docker服務端(Docker Server)

  • Docker Daemon其實就是Docker 的服務端。
  • 它負責監聽Docker API請求(如Docker Client)並管理Docker對象(Docker Objects),如鏡像、容器、網絡、數據卷等

Docker Registries

  • 俗稱Docker倉庫,專門用於存儲鏡像的雲服務環境.
  • Docker Hub就是一個公有的存放鏡像的地方,相似Github存儲代碼文件。一樣的也能夠相似Github那樣搭建私有的倉庫。

Docker 對象

  • (Docker Objects) 鏡像:一個Docker的可執行文件,其中包括運行應用程序所需的全部代碼內容、依賴庫、環境變量和配置文件等。
  • 容器:鏡像被運行起來後的實例。
  • 網絡:外部或者容器間如何互相訪問的網絡方式,如host模式、bridge模式。
  • 數據卷:容器與宿主機之間、容器與容器之間共享存儲方式,相似虛擬機與主機之間的共享文件目錄。

 

 Docker 底層技術瞭解

Docker使用Go語言實現。

Docker利用linux內核的幾個特性來實現功能:

  • 利用linux的命名空間(Namespaces)
  • 利用linux控制組(Control Groups)
  • 利用linux的聯合文件系統(Union File Systems)
  • 這也就意味着Docker只能在linux上運行。
  • 在windows、MacOS上運行Docker,其實本質上是藉助了虛擬化技術,而後在linux虛擬機上運行的Docker程序。

容器格式( Container Format ):

  • Docker Engine將namespace、cgroups、UnionFS進行組合後的一個package,就是一個容器格式(Container Format)。Docker經過對這個package中的namespace、cgroups、UnionFS進行管理控制實現容器的建立和
  • 生命週期管理。
  • 容器格式(Container Format)有多種,其中Docker目前使用的容器格式被稱爲libcontainer

 

Namespaces(命名空間):爲Docker容器提供操做系統層面的隔離

  • 進程號隔離:每個容器內運行的第一個進程,進程號老是從1開始起算
  • 網絡隔離:容器的網絡與宿主機或其餘容器的網絡是隔離的、分開的,也就是至關於兩個網絡
  • 進程間通隔離:容器中的進程與宿主機或其餘容器中的進程是互相不可見的,通訊須要藉助網絡
  • 文件系統掛載隔離: 容器擁有本身單獨的工做目錄
  • 內核以及系統版本號隔離:容器查看內核版本號或者系統版本號時,查看的是容器的,而非宿主機的

Control Groups(控制組-cgroups):爲Docker容器提供硬件層面的隔離

  • 控制組能控制應用程序所使用的硬件資源。
  • 基於該性質,控制組幫助docker引擎將硬件資源共享給容器使用,而且加以約束和限制。如控制容器所使用的內存大小。
  • Union File Systems(聯合文件系統--UnionFS):利用分層(layer)思想管理鏡像和容器

菜鳥教程

https://www.runoob.com/docker/docker-hello-world.html
相關文章
相關標籤/搜索