跳至內容

Docker

輕之舟百科,讓知識輕裝啟航

Docker(全稱:Docker Engine)是一組用於構建、發布及運行應用程式的開源平台即服務(PaaS)產品[1][2]。它基於作業系統層級的虛擬化技術,將軟件與其依賴項打包為稱為容器的標準化單元[3]。Docker能夠幫助開發者在輕量級容器中自動部署應用程式,並使得不同容器中的應用程式彼此隔離[1][2]。該服務有免費和高級版本,於2013年首次發布,由Docker, Inc.開發[1][2]。

Docker
中文名應用容器引擎
外文名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守護進程

[編輯 | 編輯原始碼]

Docker守護進程(dockerd)偵聽Docker API請求並管理Docker對象,例如鏡像、容器、網絡和卷。守護進程還可以與其他守護進程通信以管理Docker服務[3]。

Docker客戶端

[編輯 | 編輯原始碼]

Docker客戶端(docker)是許多用戶與Docker交互的主要方式。當用戶使用諸如`docker run`之類的命令時,客戶端會將這些命令發送到`dockerd`守護進程,後者會執行這些命令[3]。

Docker註冊表

[編輯 | 編輯原始碼]

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]。

參考文獻

[編輯 | 編輯原始碼]