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


