在docker中,容器提供了一種高效的機制,用於將元件組合到應用程式和服務堆疊中,並保持軟體元件的更新和維護;docker容器不僅彼此隔離,而且與底層系統隔離,並且在支援容器運行環境的任何機器上都可以運行。
本教學操作環境:linux7.3系統、docker-1.13.1版、Dell G3電腦。
現代軟體開發的目標之一是應用程式既能運行在同一台主機或叢集上,又能彼此隔離,這樣它們就不會過度幹擾彼此的操作或維護,但由於要運行套件、庫和其他軟體元件,這樣就會變得比較困難。
解決這個問題的方案之一是用虛擬機,它將相同硬體上的應用程式完全隔離,並將軟體元件之間的衝突和硬體資源之間的競爭降到最低,但是虛擬機體積比較龐大,每個虛擬機器都需要自己的作業系統,所以通常是GB大小而且很難維護和升級。
與虛擬機器相反,容器將應用程式的執行環境彼此隔離,但共享底層OS核心。它們通常以兆位元組為單位,使用的資源比虛擬機器少得多,而且幾乎是立即啟動的。可以做到在相同的硬體上更密集地打包,而不需要花費太多的精力和開銷。
容器提供了一種高效和高粒度的機制,將軟體元件組合到現代企業所需的各種應用程式和服務堆疊中,並保持這些軟體元件的更新和維護。
Docker是一個開源項目,可以輕鬆創建容器和基於容器的應用程序,最初是為Linux構建的,現在也可以在Windows和MacOS上運行。
一直以來Docker都可以幫助開發人員快速建立輕量級且可移植的軟體容器,從而簡化應用程式開發、測試和部署等諸多環節。具體來說,它是一個用於建立應用程式的軟體平台,可以提供一個小型和輕量級的執行環境用來共享作業系統內核,但在其他方面是獨立運行的。
雖然容器概念已經出現不短的時間,但2013年推出的開源專案Docker在很大程度上幫助推廣了這項技術,並推動了軟體開發中容器化和微服務的趨勢,這種趨勢後來被稱為雲端原生開發。
Docker容器提供了一種建立企業應用程式和業務流程應用程式的方法,這些應用程式比傳統應用程式更容易安裝、維護和移動。
Docker容器支援隔離:Docker容器使應用程式不僅彼此隔離,而且與底層系統隔離。這不僅使軟體堆疊更乾淨,而且更容易使容器化應用程式使用系統資源,例如CPU、GPU、記憶體、I/O、網路等,它還可以確保資料和程式碼保持獨立。
Docker容器支援可移植性:Docker容器在支援容器運行環境的任何機器上運行。應用程式不必綁定到主機作業系統,因此可以保持應用程式環境和底層操作環境的整潔和最小化。
例如,採用容器的MySQL將在大多數支援容器的Linux系統上運行,應用程式的所有依賴項通常都在同一個容器中提供。基於容器的應用程式可以輕易從on-prem系統遷移到雲端環境中,或從開發人員的筆記型電腦移到伺服器上,只要目標系統支援Docker以及可能與之一起使用的任何第三方工具,例如Kubernetes。
通常,Docker容器映像必須為特定的平台建置。例如Windows容器不能在Linux上運行,反之亦然;以前,繞過此限制的一種方法是啟動運行所需作業系統實例的虛擬機,並在虛擬機中運行容器。
然而Docker團隊後來設計了一個更優雅的解決方案,稱為manifest,它允許多個作業系統的映像並行打包。儘管manifest雖然還處於試驗階段,但這暗示了容器可能成為跨平台應用程式解決方案和跨環境應用程式解決方案。
Docker容器支援可組合性:大多數業務應用程式由幾個獨立的元件組成,網頁伺服器、資料庫和cache快取。 Docker容器可以將這些零件組合成一個容易更換的功能單元。每個部分由不同的容器提供,可以獨立於其他容器進行維護、更新、交換和修改。
這本質上是應用程式設計的微服務模型。透過將應用程式功能劃分為獨立的、自包含的服務,微服務模型為過程緩慢的傳統開發和單一僵化的應用程式提供了一種解決方案,輕量級和便攜式容器使構建和維護基於微服務的應用程式變得更加容易。
Docker容器簡化了編排和擴展:由於容器是輕量級的,並且開銷很小,所以可以在給定的系統上啟動更多的容器,而且容器也可以用於跨系統集群擴展應用程序,並將服務向上或向下擴展以滿足高峰需求或節約資源。
用於部署、管理和擴展容器的大多數企業級工具版本都是透過第三方專案提供的。其中最主要的是Google的Kubernetes,這是一個支援容器部署和擴展的自動化系統,也支援容器連接、負載平衡和管理。 Kubernetes還提供了創建和重複使用多容器應用程式或「Helm charts」圖表的方法,因此可以根據需要建立和管理複雜的應用程式堆疊。
Docker也內建了Swarm編排模式,目前該模式應用比較少,Kubernetes已成為某種預設選擇。事實上Kubernetes與Docker Enterprise Edition捆綁在一起。
推薦學習:《docker影片教學》
以上是docker容器是用來做什麼的的詳細內容。更多資訊請關注PHP中文網其他相關文章!