Docker
Docker(全稱:Docker Engine)是一組用於構建、發布及運行應用程式的開源平台即服務(PaaS)產品[1][2]。它基於作業系統層級的虛擬化技術,將軟件與其依賴項打包為稱為容器的標準化單元[3]。Docker能夠幫助開發者在輕量級容器中自動部署應用程式,並使得不同容器中的應用程式彼此隔離[1][2]。該服務有免費和高級版本,於2013年首次發布,由Docker, Inc.開發[1][2]。
| 中文名 | 應用容器引擎 |
|---|---|
| 外文名 | Docker |
| 啟動時間 | 2013年3月[1] |
| 主要贊助商 | Docker, Inc.[1] |
| 適用系統 | Windows,macOS,Linux[1] |
| 適用架構 | x86-64,ARM,s390x,ppc64le[1] |
| 許可協議 | Apache 2.0 license[1] |
| 編程語言 | Go[1][2] |
Docker是一個開源的平台,用於開發、交付和運行應用程式[1][2]。它能夠在Windows,macOS,Linux計算機上運行,並將某一應用程式及其依賴項打包至一個容器中,這些容器可以在任何支持Docker的環境中運行[1][2]。容器彼此隔離,但可以通過特定的通道相互傳遞信息[1][2]。
Docker提供了一個輕量級的虛擬化解決方案。由於運行在同一計算機上的所有容器共享同一個作業系統內核,避免了啟動與維護虛擬機的開銷。因此相比於傳統的虛擬機,Docker容器更加輕便、快速、容易部署[1][2]。使用Docker,開發者可以避免在兩台計算機上運行效果不一致的問題,容器提供了一致的行為,進而使得應用程式在不同環境的計算機上有相同的運行效果[1][2]。
最初Docker是PaaS提供商dotCloud開源的一個基於LXC的高級容器引擎,原始碼託管在Github上。後基於Go語言自研libcontainer用以替換LXC[1][2]。Docker自2013年以來非常火熱,無論是從GitHub上的代碼活躍度,還是Redhat在RHEL6.5中集成對Docker的支持,就連Google的Compute Engine也支持Docker在其之上運行[1][2]。
Docker之所以大獲成功,是因為彼時的軟件開發者面臨環境管理複雜、雲計算時代到來、虛擬化手段變化以及LXC移動性等問題[1][2]。Docker的設想是交付運行環境如同海運,OS如同一個貨輪,每一個在OS基礎上的軟件都如同一個集裝箱。用戶可以通過標準化手段自由組裝運行環境,同時集裝箱的內容可以由用戶自定義,也可以由專業人員製造[2]。
2010年夏季,Founder's Den的第一批孵化項目中的12家初創公司之一,Docker Inc.由Kamel Founadi、Solomon Hykes和Sebastien Pahl在Y Combinator夏季創業孵化器團隊中創立,並於2011年運營。之後,Hykes在法國的dotCloud(一家PaaS公司)內部啟動了Docker項目[2]。
2013年3月,Docker以Apache 2.0授權協議開源,主要項目代碼在GitHub上進行維護[4]。Docker項目後來還加入了Linux基金會[4]。
2014年,隨着0.9版本的發布,Docker用自己的組件libcontainer替換了LXC,後者是用Go編程語言編寫的。同年11月,亞馬遜彈性計算雲(EC2)的Docker容器服務發布[2]。
2016年4月,獨立軟件供應商Windocks向Windows發布了Docker開源項目的移植版,支持Windows[2]。
Docker使用客戶端-伺服器(C/S)架構[3][5]。Docker客戶端與Docker守護進程對話,Docker守護進程負責構建、運行和分發Docker容器的繁重工作[3]。Docker客戶端和守護進程可以在同一系統上運行,或者可以將Docker客戶端連接到遠程Docker守護進程[3]。Docker客戶端和守護進程通過REST API在UNIX套接字或網絡接口上進行通信[3]。
Docker守護進程(dockerd)偵聽Docker API請求並管理Docker對象,例如鏡像、容器、網絡和卷。守護進程還可以與其他守護進程通信以管理Docker服務[3]。
Docker客戶端(docker)是許多用戶與Docker交互的主要方式。當用戶使用諸如`docker run`之類的命令時,客戶端會將這些命令發送到`dockerd`守護進程,後者會執行這些命令[3]。
Docker註冊表存儲Docker鏡像。Docker Hub是一個任何人都可以使用的公共註冊表,並且Docker默認配置為在Docker Hub上查找鏡像。用戶甚至可以運行自己的私有註冊表[3]。
Docker的三大核心概念是鏡像(Image)、容器(Container)和倉庫(Repository)[6]。
Docker鏡像是一個只讀的模板,可以用來創建Docker容器[6]。它相當於是一個root文件系統,包含了運行某個應用所需的所有內容,包括代碼、運行時、系統工具、庫和設置[6]。
容器是鏡像的運行實例[6]。它是一個輕量級的、獨立的、可執行的軟件包,包含運行應用程式所需的一切[3]。容器可以被啟動、開始、停止、刪除,並且彼此相互隔離[6]。
倉庫是用來存儲和管理Docker鏡像的地方,類似於代碼倉庫[6]。Docker官方提供了Docker Hub倉庫[6]。一個Docker註冊表(Registry)中可以包含多個倉庫(Repository);每個倉庫可以包含多個標籤(Tag);每個標籤對應一個鏡像[7]。
- ↑ 1.00 1.01 1.02 1.03 1.04 1.05 1.06 1.07 1.08 1.09 1.10 1.11 1.12 1.13 1.14 1.15 1.16 Docker_百度百科
- ↑ 2.00 2.01 2.02 2.03 2.04 2.05 2.06 2.07 2.08 2.09 2.10 2.11 2.12 2.13 2.14 2.15 圖文詳情——科普中國資源服務
- ↑ 3.0 3.1 3.2 3.3 3.4 3.5 3.6 3.7 3.8 Docker 概述
- ↑ 4.0 4.1 打開 Docker 大門-華為開發者話題
- ↑ docker的底層原理
- ↑ 6.0 6.1 6.2 6.3 6.4 6.5 6.6 深入理解Docker的三大核心概念:鏡像、容器與倉庫
- ↑ 一篇文掌握Docker鏡像容器倉庫核心概念及生命周期管理-開發者社區-阿里雲