Docker 是一個基于容器構(gòu)建應(yīng)用程序的軟件平臺——這些小巧且輕量級的執(zhí)行環(huán)境,共享作系統(tǒng)內(nèi)核,但彼此間獨(dú)立運(yùn)行。雖然容器在Linux和Unix系統(tǒng)中已經(jīng)使用了一段時間,但2013年啟動的開源項(xiàng)目Docker通過讓開發(fā)者比以往更容易打包軟件“一次構(gòu)建,隨處運(yùn)行”,從而推廣了這項(xiàng)技術(shù)。
Docker最初由所羅門·??怂褂?/span>2008年在巴黎創(chuàng)立,最初是一個平臺即服務(wù)(PaaS),2013年轉(zhuǎn)向?qū)W⒂谄淦脚_運(yùn)行的底層軟件容器的民主化。
Hykes于2013年3月在PyCon上首次演示了Docker,他解釋說Docker的誕生源于開發(fā)者不斷要求支持DotCloud平臺的底層技術(shù)。“我們一直覺得能說'是的,這是我們的低層次作品'會很酷?,F(xiàn)在你可以和我們一起做Linux容器,去做任何你想做的事,去構(gòu)建你的平臺。”所以我們就是這么做的。”
于是,Docker 誕生了,這個開源項(xiàng)目迅速在開發(fā)者中獲得關(guān)注,吸引了 Microsoft、IBM 和 Red Hat 等知名技術(shù)供應(yīng)商的關(guān)注,同時也吸引了愿意投入數(shù)百萬美元的風(fēng)險投資家。集裝箱革命由此開始。
正如Hykes在PyCon演講中所描述的,容器是“你可以從那邊的服務(wù)器交付到另一臺服務(wù)器的自足軟件單元,從你的筆記本電腦到EC2再到裸機(jī)巨型服務(wù)器,并且由于在進(jìn)程層面隔離,并且擁有自己的文件系統(tǒng),所以運(yùn)行方式相同。”
通過簡化這一過程,Docker 很快成為容器的事實(shí)行業(yè)標(biāo)準(zhǔn)。Docker 讓開發(fā)者能夠以一種簡化的方式部署、復(fù)制、移動和備份工作負(fù)載,利用一組可復(fù)用的鏡像,使工作負(fù)載比以往方法更可移植和靈活。
在虛擬機(jī)(VM)領(lǐng)域,這可以通過在同一硬件上運(yùn)行時保持應(yīng)用程序分離來實(shí)現(xiàn),但在那個世界里,每個虛擬機(jī)都需要自己的作系統(tǒng),這意味著它們通常體積龐大、啟動緩慢、移動不便且維護(hù)和升級繁瑣。容器標(biāo)志著與虛擬機(jī)時代的明顯轉(zhuǎn)變,是通過隔離執(zhí)行環(huán)境并共享底層作系統(tǒng)內(nèi)核,為開發(fā)者提供了輕量且快速的選擇。
Docker
虛擬化和容器基礎(chǔ)設(shè)施的疊加情況。
Docker:組件部分
Docker 之所以在軟件開發(fā)者中走紅,是因?yàn)樗业搅艘环N新穎的方法,將構(gòu)建和啟動容器所需的工具打包得比以往更簡潔和更簡潔。Docker細(xì)分為組件部分,包括Dockerfile、容器鏡像、Docker 運(yùn)行工具、Docker Hub、Docker Engine、Docker Compose和Docker Desktop。
Dockerfile。 每個 Docker 容器都以一個 Dockerfile 開始。該文本文件提供了一組構(gòu)建 Docker 鏡像的指令,包括作系統(tǒng)、語言、環(huán)境變量、文件位置、網(wǎng)絡(luò)端口以及運(yùn)行所需的其他組件。
Docker 鏡像。 類似于虛擬機(jī)中的快照,Docker 鏡像是一個可攜帶、只讀、可執(zhí)行的文件,包含創(chuàng)建容器的指令以及容器將運(yùn)行哪些軟件組件及其方式的規(guī)范。
Docker 運(yùn)行工具。Docker 的運(yùn)行工具是啟動容器的命令。每個容器都是鏡像的一個實(shí)例,并且可以同時運(yùn)行同一鏡像的多個實(shí)例。
Docker Hub。 Docker Hub 是一個可以存儲、共享和管理容器鏡像的倉庫??梢园阉醋魇?Docker 自己的 GitHub,但專門針對容器。
Docker 引擎。 Docker Engine 是 Docker 的核心。它是基于客戶端-服務(wù)器技術(shù)創(chuàng)建和運(yùn)行容器的。Docker 引擎包含一個名為 dockerd 的長期守護(hù)進(jìn)程用于管理容器,允許程序與 Docker 守護(hù)進(jìn)程通信的 API,以及命令行接口。
Docker Compose。 Docker Compose 是一款命令行工具,使用 YAML 文件來定義和運(yùn)行多容器 Docker 應(yīng)用程序。它允許你創(chuàng)建、啟動、停止和重建配置中的所有服務(wù),并查看所有運(yùn)行服務(wù)的狀態(tài)和日志輸出。
Docker 桌面版。 所有這些組件都包裹在 Docker 的桌面應(yīng)用中,提供了一種用戶友好的方式來構(gòu)建和共享容器化應(yīng)用和微服務(wù)。
Docker 容器提供了一種構(gòu)建比以往方法更易于組裝、維護(hù)和移動的應(yīng)用程序的方法。這為軟件開發(fā)者帶來了多重優(yōu)勢。
Docker 容器極簡,便于可移植性。 Docker 通過隔離應(yīng)用及其環(huán)境,使其保持清潔和最小化,從而實(shí)現(xiàn)更細(xì)致的控制和更高的可移植性。
Docker 容器支持組合性。 容器使開發(fā)者更容易將應(yīng)用的構(gòu)建模塊組合成模塊化單元,模塊化組件可互換,從而加快開發(fā)周期、功能發(fā)布和修復(fù)錯誤。
Docker 容器簡化了編排和擴(kuò)展。 由于容器重量輕,開發(fā)者可以大量推出以實(shí)現(xiàn)服務(wù)的擴(kuò)展性。這些容器集群需要被編排,這正是Kubernetes通常發(fā)揮作用的地方。
容器解決了許多問題,但并不能解決所有開發(fā)者的問題。
Docker 容器不是虛擬機(jī)。 與虛擬機(jī)不同,容器使用主機(jī)作系統(tǒng)資源的受控部分,這意味著元素不像虛擬機(jī)那樣嚴(yán)格隔離。
Docker 容器不提供裸機(jī)速度。 容器比虛擬機(jī)更輕巧,更貼近金屬,但確實(shí)會帶來一定的性能開銷。如果你的工作量需要裸金屬速度,容器能幫你接近但不會完全達(dá)到。
Docker 容器是無狀態(tài)且不可變的。 容器啟動和運(yùn)行時,會有一個描述其內(nèi)容的鏡像。這個形象默認(rèn)是不可改變的——一旦創(chuàng)建,就不會改變。但容器實(shí)例是暫時的。一旦從系統(tǒng)內(nèi)存中移除,它就永遠(yuǎn)消失了。如果你想讓容器像虛擬機(jī)一樣在會話間持久化狀態(tài),你需要設(shè)計(jì)持久化。
隨著云原生開發(fā)技術(shù)成為構(gòu)建和運(yùn)行軟件的主流模式,容器的使用持續(xù)增長,但Docker現(xiàn)在只是這一拼圖的一部分。
Docker 之所以成為主流,是因?yàn)榭梢暂p松地將應(yīng)用程序及其所有依賴的代碼從開發(fā)者的筆記本電腦遷移到服務(wù)器。但容器的興起導(dǎo)致應(yīng)用構(gòu)建方式發(fā)生轉(zhuǎn)變——從單體堆棧轉(zhuǎn)向微服務(wù)網(wǎng)絡(luò)。很快,許多用戶需要一種方式來大規(guī)模協(xié)調(diào)和管理容器群。
Kubernetes開源項(xiàng)目由谷歌發(fā)起,迅速成為實(shí)現(xiàn)這一目標(biāo)的最佳途徑,取代了Docker自身通過Swarm orchestrator(RIP)解決這一問題的嘗試。在資金問題日益嚴(yán)重的情況下,Docker 最終于2019年將其企業(yè)業(yè)務(wù)出售給 Mirantis,后者隨后將 Docker Enterprise 并入 Mirantis Kubernetes 引擎。
Docker 的殘余——包括最初的開源 Docker Engine 容器運(yùn)行時、Docker Hub 映像倉庫和 Docker Desktop 應(yīng)用——在公司資深人士 Scott Johnston 的領(lǐng)導(dǎo)下繼續(xù)存在,他正試圖圍繞核心客戶群——軟件開發(fā)者重新定位業(yè)務(wù)。
Copyright ? 2013-2020. All Rights Reserved. 恒訊科技 深圳市恒訊科技有限公司 粵ICP備20052954號 IDC證:B1-20230800.移動站


