Docker官網的這個介紹還是淺顯易懂的

一、介紹

Docker是一個用GO語言編寫的,用于開發、發布和運行應用程序的開放平臺。Docker能夠將應用程序和基礎設施分離,使得可以快速交付軟件。有了Docker,你可以像管理應用程序一樣管理基礎設施。通過利用Docker快速發布、測試和部署的特性,可以顯著減少從編寫代碼到部署到生產環境的的時間。

二、Docker平臺

Docker提供了在松散隔離的環境(稱為容器)中打包和運行應用程序的能力。隔離性和安全性可以使得同一個主機上同時運行多個容器。因為容器是輕量級的,所以它是不需要額外的hypervisor負載,而是直接在主機的內核里運行。這意味著可以在給定的硬件資源下運行比虛機更多的容器,甚至可以在虛機里運行Docker容器。

Docker提供了管理容器生命周期的工具和平臺:

使用容器開發應用程序及其支持的組件

使用容器成為分發和測試應用程序的單元

將應用程序作為容器或編排的服務部署到生產環境中。

三、Docker引擎

Docker引擎是一個Client-Server的應用,包含以下組件:

Server:是一個一直運行的后臺守護進程(dockerd)。

REST API:應用程序通過REST API與后臺進程通信,執行相應的指令。

Client:客戶端是一個命令行接口(docker)。

Docker CLI Client通過腳本或CLI命令通過REST API與Docker Server守護進程交互。Docker Server負責創建和管理Docker對象,如images,containers,networks和volumes。

四、Docker特性

1、應用程序的快速、一致性交付

開發人員通過在標準環境中使用容器來縮短開發周期,這些容器用來提供應用程序和服務。容器非常適合持續集成和持續交付(CI/CD)的場景。比如下面的這些場景:

開發人員在本地編寫代碼,使用Docker容器與其他同事進行分享。

使用Docker將應用程序推送到測試環境,并執行自動化和手動測試。

當開發人員發現bug時,可以在開發環境中修復它們,并重新部署到測試環境中進行測試和驗證。

當測試完成后,將更新后的鏡像推送到生產環境就可以修復用戶問題。

2、靈活的部署和擴縮容

Docker這種基于容器的平臺可以方便的移植,也可以運行在本地筆記本電腦、物理機和虛擬機等多種機器上。Docker的可移植和輕量級特性可以動態的進行管理,能夠做到根據業務需求擴展和縮放應用程序和服務的副本,幾乎是實時的。

3、硬件資源的充分利用

Docker輕巧快速,成為基于hypervisor的虛擬機的一個可行的、經濟的替代方案。因此,可以在同等配置的機器算力下運行更多的服務來實現業務目標。

五、Docker架構

Docker使用Client-Server架構,Docker Client與Docker Server守護進程通信,Docker Server守護進程負責構建、運行和分發Docker容器。Docker Client和Docker Server可以運行在同一個系統上,也可以運行在不同的機器上。Docker Client和Docker Server守護進程通過一個REST API進行通信。

1、Docker守護進程

Docker守護進程(dockerd)監聽Docker API請求和管理Docker對象,如images,containers,networks和volumes。Docker 守護進程也會與其他守護進程通信來管理Docker服務。

2、Docker客戶端

Docker client是Docker用戶與Docker交互的主要方式。當用戶執行docker run命令時,客戶端會發送這些命令給dockerd,dockerd來執行這些命令。docker的命令通過Docker API發送給dockerd。Docker client可以與多個守護進程進行通信。

3、Docker倉庫

Docker倉庫用來存儲Docker鏡像。Docker Hub是一個任何人都可以訪問的公共鏡像倉庫。Docker默認情況下去Docker Hub里查找鏡像。每個組織可以根據自己的情況搭建自己的私有倉庫。當使用docker pull或docker run命令時,所需的鏡像就會從配置得鏡像倉庫去拉取。當使用docker push時,鏡像也會推送到配置得鏡像倉庫里。

4、Docker對象

當使用Docker時,會創建和使用images、containers、networks、volumes、plugins等對象,下面做個簡單介紹:

鏡像(IMAGES)

鏡像是一個用于創建Docker容器的模板。通常情況下,一個鏡像是基于另一個鏡像,并帶有一些額外的自定義內容。例如,你可以構建一個基于ubuntu鏡像的鏡像,但需要安裝Apache Web Server和應用程序,以及應用程序運行所需的配置詳細信息。

你可以創建自己的鏡像,也可以使用他人創建并推送到鏡像倉庫里的鏡像。要構建自己的鏡像,需要創建一個Dockerfile文件,其中包含一些簡單的語法,用于定義構建鏡像以及運行鏡像的步驟。Dockerfile中的每條指令都會在鏡像中創建一層。當修改Dockerfile并重新構建時,只有被修改的層會

重新構建。與其他虛擬化技術相比,這是使得鏡像如此輕量、體積小和快速的原因之一。

容器(CONTAINERS)

容器是鏡像運行的一個實例,可以通過Docker CLI命令創建、啟動、停止和刪除一個容器。可以將一個容器連接到一個或多個網絡,將存儲附加到這個容器上,甚至可以基于當前容器的狀態創建新的鏡像。

默認情況下,一個容器會與其他容器及其主機隔離,你可以控制一個容器的網絡、存儲或

其他底層子系統與其他容器或主機的隔離程度。容器由鏡像以及創建或啟動時提供的配置選項定義的。當一個容器被刪除時,任何沒有存儲到持久性存儲里的變更都會消失。

以docker run這個命令為例:

下面的命令運行一個ubuntu的容器,以交互的方式連接到容器里的本地命令行會話,并運行/bin/bash。

$ docker run -i -t ubuntu /bin/bash

假設使用的是默認的鏡像倉庫配置,執行這個命令的步驟是:

1、如果本地沒有ubuntu鏡像,Docker會從鏡像倉庫拉取這個鏡像,和手動執行docker pull ubuntu命令一樣。

2、Docker創建了一個新的容器,和手動執行docker container create命令一樣。

3、Docker為容器分配一個讀寫文件系統,作為容器的最后一層。這就允許正在運行的容器在本地文件系統中創建和修改文件和目錄。

4、Docker創建一個網絡接口,因為這里沒有指定任何網絡選項,比如為容器分配IP地址等,所以容器會連接到默認網絡。默認情況下,容器可以使用主機網絡連接到外部網絡。

5、Docker啟動容器并且執行/bin/bash。由于容器是以交互方式執行并連接到本地終端(-i -t參數),你可以使用本地的鍵盤輸入信息以及在本地終端上看到日志。

6、當輸入exit終止/bin/bash命令時,容器停止但不會被刪除。

服務(SERVICES)

服務是可以跨多個Docker守護進程擴展容器,服務允許定義預期的狀態,比如任意時刻服務副本的數量。默認情況下,服務的負載是通過集群node節點來做的,對消費者來說,Docker服務表現出來的就是一個單獨的應用。

六、基礎技術

Docker是用GO語言編寫的,利用了Linux內核的一些特性來提供功能。

命名空間(Namespaces)

Docker利用了命名空間的技術來為容器提供獨立的工作區域。當運行容器時,Docker會為這個容器創建一組命名空間。這些命名空間提供了一個隔離層,容器的每個方面都在一個單獨的命名空間中運行并且其訪問權限僅限于該命名空間。

Docker引擎使用如下的命名空間:

1、pid命名空間:進程隔離(PID:Process ID)

2、net命名空間:管理網絡接口(NET:Networking)

3、ipc命名空間:管理對IPC資源的訪問(IPC:InterProcess Communication)

4、mnt命名空間:管理文件掛載點(MNT:Mount)

5、uts命名空間:隔離內核和版本標識符(UTS:Unix Timesharing System)

控制組(Control groups)

Docker引擎還依賴于另一種稱為控制組(cgroup)的技術。cgroup將應用程序限制為特定的資源集。控制組允許Docker引擎將可用的硬件資源共享給容器,并實施限制和約束。例如,限制特定容器的可用內存。

聯合文件系統(Union file systems)

聯合文件系統(UnionFS),是通過創建層來操作的文件系統,使得非常輕量級和快速。Docker引擎使用UnionFS為容器提供構建塊。Docker引擎可以使用多個UnionFS變體,包括AUFS、btrfs、vfs和DeviceMapper。

容器格式(Container format)

Docker引擎將命名空間、控制組和UnionFS組合成一個容器格式的包裝器,默認的容器格式是libcontainer。

七、總結

Docker的出現改變了軟件的交付方式和部署、運維方式。隨著基于Docker的云原生技術的不斷發展,在未來,軟件的交付會越來越便捷,交付速度也會越來越快,進而提升企業的市場競爭力。由于Docker本身的天然優勢,替換虛機是大勢所趨,云平臺會成為像水和電一樣的基礎設施,DevOps也必然成為企業內部軟件交付的中臺能力。

翻譯:Docker官網

歡迎關注交流“DevOps亮哥”

?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 你知道自己喜歡什么,討厭什么嗎? 我喜歡一切靚麗的顏色,討厭綠色 我喜歡一切深沉的顏色,討厭墨綠。 看起來“一切”...
    喵識閱讀 264評論 0 0
  • 重慶新思維學校鐵軍教練團每日工作心得分享: 時間:8.9 部門名稱:校區 崗位名稱:執行總校長 分享人:黃蘋 今日...
    詞媽閱讀 282評論 0 0