您好,登錄后才能下訂單哦!
這篇文章主要講解了“用Docker可以做什么”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“用Docker可以做什么”吧!
Docker是一個程序運行、測試、交付的開放平臺,Docker被設計為能夠使你快速地交付應用。在Docker中,你可以將你的程序分為不同的 基礎部分,對于每一個基礎部分都可以當做一個應用程序來管理。Docker能夠幫助你快速地測試、快速地編碼、快速地交付,并且縮短你從編碼到運行應用的 周期。
Docker使用輕量級的容器虛擬化平臺,并且結合工作流和工具,來幫助你管理、部署你的應用程序。
在其核心,Docker實現了讓幾乎任何程序都可以在一個安全、隔離的容器中運行。安全和隔離可以使你可以同時在機器上運行多個容器。
容器輕量級的特性,意味著你可以得到更多的硬件性能。
圍繞著容器的虛擬化工具和平臺,可以在以下幾個方面為你提供幫助:
幫助你把應用程序(包括其余的支持組件)放入到Docker容器中。
分發和轉移你的容器至你的團隊其它成員來進行進一步的開發和測試。
部署這些應用程序至你的生產環境,不論是本地的數據中心還是云平臺。
Docker可以為你的開發過程提供完美的幫助。Docker允許開發者在本地包含了應用程序和服務的容器進行開發,之后可以集成到連續的一體化和部署工作流中。
舉個例子,開發者們在本地編寫代碼并且使用Docker和同事分享其開發棧。當開發者們準備好了之后,他們可以將代碼和開發棧推送到測試環境中,在該環境進行一切所需要的測試。從測試環境中,你可以將Docker鏡像推送到服務器上進行部署。
Docker的以容器為基礎的平臺允許高度可移植的工作。Docker容器可以在開發者機器上運行,也可以在實體或者虛擬機上運行,也可以在云平臺上運行。
Docker的可移植、輕量特性同樣讓動態地管理負載更加簡單。你可以用Docker快速地增加應用規模或者關閉應用程序和服務。Docker的快速意味著變動幾乎是實時的。
Docker輕巧快速,它提供了一個可行的、 符合成本效益的替代基于虛擬機管理程序的虛擬機。這在高密度的環境下尤其有用。例如,構建你自己的云平臺或者PaaS,在中小的部署環境下同樣可以獲取到更多的資源性能。
Docker有兩個主要的部件:
Docker: 開源的容器虛擬化平臺。
Docker Hub: 用于分享、管理Docker容器的Docker SaaS平臺。
Docker使用客戶端-服務器(client-server)架構模式。Docker客戶端會與Docker守護進程進行通信。Docker守護 進程會處理復雜繁重的任務,例如建立、運行、發布你的Docker容器。Docker客戶端和守護進程可以運行在同一個系統上,當然你也可以使用 Docker客戶端去連接一個遠程的Docker守護進程。Docker客戶端和守護進程之間通過socket或者RESTful API進行通信。
如上圖所示,Docker守護進程運行在一臺主機上。用不并不直接和守護進程進行交互,而是通過Docker客戶端間接和其通信。
Docker客戶端,實際上是docker的二進制程序,是主要的用戶與Docker交互方式。它接收用戶指令并且與背后的Docker守護進程通信,如此來回往復。
要理解Docker的內部構建,必須知道以下三種部件:
Docker鏡像 (Docker images)。
Docker倉庫 (Docker registeries)。
Docker容器(Docker containers)。
Docker鏡像是一個只讀的模板。舉個例子,一個鏡像可以包含一個運行在Apache上的Web應用和其使用的Ubuntu操作系統。
鏡像是用來創建容器的。Docker提供了簡單的放來來建立新的鏡像或者升級現有的鏡像,你也可以下載別人已經創建好的鏡像。Docker鏡像是Docker的 構造 部分。
Docker倉庫用來保存鏡像。可以理解為代碼控制中的代碼倉庫。同樣的,Docker倉庫也有公有和私有的概念。公有的Docker倉庫名字是Docker Hub。Docker Hub提供了龐大的鏡像集合供使用。這些鏡像可以是你自己創建的,或者你也可以在別人的鏡像基礎上創建。Docker倉庫是Docker的 分發 部分。
Docker容器和文件夾很類似。一個Docker容器包含了所有的某個應用運行所需要的環境。每一個Docker容器都是從Docker鏡像創建 的。Docker容器可以運行、開始、停止、移動和刪除。每一個Docker容器都是獨立和安全的應用平臺。Docker容器是Docker的 運行 部分。
到目前為止,我們學習到了:
我們可以建立一個容納應用程序的容器。
我們可以從Docker鏡像創建Docker容器來運行我們的應用程序。
我們可以通過Docker Hub或者我們自己的Docker倉庫分享Docker鏡像。
我們已經看到了,Docker鏡像是Docker容器運行時的只讀模板。每一個鏡像由一系列的層(layers)組成。Docker使用UnionFS來將這些層聯合到一二鏡像中。Union文件系統允許獨立文件系統中的文件和文件夾(稱之為分支)被透明覆蓋,形成一個單獨連貫的文件系統。
這一段的原文:We've already seen that Docker images are read-only templates from which Docker containers are launched. Each image consists of a series of layers. Docker makes use of union file systems to combine these layers into a single image. Union file systems allow files and directories of separate file systems, known as branches, to be transparently overlaid, forming a single coherent file system.
正因為有了這些層的存在,Docker是如此的輕量。當你改變了一個Docker鏡像,比如升級到某個程序到新的版本,一個新的層會被創建。因此, 不用替換整個原先的鏡像或者重新建立(在使用虛擬機的時候你可能會這么做),只是一個新的層被添加或升級了。現在你不用重新發布整個鏡像,只需要升級。層 使得奮發Docker鏡像變得簡單和快速。
每個鏡像都是從一個基礎的鏡像開始的,比如ubuntu,一個基礎的Ubuntu鏡像,或者是fedora,一個基礎的Fedora鏡像。你可以使用你自己的鏡像作為新鏡像的基礎,例如你有一個基礎的安裝了Apache的鏡像,你可以使用該鏡像來建立你的Web應用程序鏡像。
注: Docker通常從Docker Hub獲取基礎鏡像。
Docker鏡像從這些基礎的鏡像創建,通過一種簡單、具有描述性的步驟,我們稱之為 指令(instructions)。 每一個指令會在鏡像中創建一個新的層,指令可以包含這些動作:
運行一個命令。
增加文件或者文件夾。
創建一個環境變量。
當運行容器的時候哪些程序會運行。
這些指令存儲在Dockerfile文件中。當你需要建立鏡像的時候,Docker可以從Dockerfile中讀取這些指令并且運行,然后返回一個最終的鏡像。
Docker倉庫是Docker鏡像的存儲倉庫。你可以推送你的鏡像到你的Docker倉庫中。
通過Docker客戶端,你可以從Docker倉庫中搜索鏡像。
一個Docker容器包含了一個操作系統、用戶添加的文件和元數據(meta-data)。我們可以看到,每個容器都是從鏡像建立的。鏡像告訴 Docker容器內包含了什么,當容器啟動時運行什么程序,還有許多配置數據。Docker鏡像是只讀的。當Docker運行一個從鏡像建立的容器,它會 在鏡像頂部添加一個可讀寫的層,應用程序可以在這里運行。
不論你使用docker命令或者是RESTful API,Docker客戶端都會告訴Docker守護進程運行一個容器。
$ sudo docker run -i -t ubuntu /bin/bash
讓我們來分析這個命令。Docker客戶端使用docker命令來運行,run參數表名客戶端要運行一個新的容器。Docker客戶端要運行一個容器需要告訴Docker守護進程的最小參數信息是:
這個容器從哪個鏡像創建,這里是ubuntu,基礎的Ubuntu鏡像。
在容器中要運行的命令,這里是/bin/bash,在容器中運行Bash shell。
那么運行這個命令之后在底層發生了什么?
按照順序,Docker做了這些事情:
拉取ubuntu鏡像: Docker檢查ubuntu鏡像是否存在,如果在本地沒有該鏡像,Docker會從Docker Hub下載。如果鏡像已經存在,Docker會使用它來創建新的容器。
創建新的容器: 當Docker有了這個鏡像之后,Docker會用它來創建一個新的容器。
分配文件系統并且掛載一個可讀寫的層: 容器會在這個文件系統中創建,并且一個可讀寫的層被添加到鏡像中。
分配網絡/橋接接口: 創建一個允許容器與本地主機通信的網絡接口。
設置一個IP地址: 從池中尋找一個可用的IP地址并且服加到容器上。
運行你指定的程序: 運行指定的程序。
捕獲并且提供應用輸出: 連接并且記錄標準輸出、輸入和錯誤讓你可以看到你的程序是如何運行的。
你現在擁有了一個運行著的容器!從這里開始你可以管理你的容器,與應用交互,應用完成之后,可以停止或者刪除你的容器。
Docker使用Go語言編寫,并且使用了一系列Linux內核提供的性能來實現我們已經看到的這些功能。
Docker充分利用了一項稱為namespaces的技術來提供隔離的工作空間,我們稱之為 container(容器)。當你運行一個容器的時候,Docker為該容器創建了一個命名空間集合。
這樣提供了一個隔離層,每一個應用在它們自己的命名空間中運行而且不會訪問到命名空間之外。
一些Docker使用到的命名空間有:
pid命名空間: 使用在進程隔離(PID: Process ID)。
net命名空間: 使用在管理網絡接口(NET: Networking)。
ipc命名空間: 使用在管理進程間通信資源 (IPC: InterProcess Communication)。
mnt命名空間: 使用在管理掛載點 (MNT: Mount)。
uts命名空間: 使用在隔離內核和版本標識 (UTS: Unix Timesharing System)。
Docker還使用到了cgroups技術來管理群組。使應用隔離運行的關鍵是讓它們只使用你想要的資源。這樣可以確保在機器上運行的容器都是良民(good multi-tenant citizens)。群組控制允許Docker分享或者限制容器使用硬件資源。例如,限制指定的容器的內容使用。
聯合文件系統(UnionFS)是用來操作創建層的,使它們輕巧快速。Docker使用UnionFS提供容器的構造塊。Docker可以使用很多種類的UnionFS包括AUFS, btrfs, vfs, and DeviceMapper。
Docker連接這些組建到一個包裝中,稱為一個 container format(容器格式)。默認的容器格式是libcontainer。Docker同樣支持傳統的Linux容器使用LXC。在未來,Docker也許會支持其它的容器格式,例如與BSD Jails 或 Solaris Zone集成。
感謝各位的閱讀,以上就是“用Docker可以做什么”的內容了,經過本文的學習后,相信大家對用Docker可以做什么這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。