[譯] Docker簡介

D調的蜀威 2021-08-15 17:05:48 阅读数:387

本文一共[544]字,预计阅读时长:1分钟~
docker

原文地址:docs.docker.com/get-started… (Docker官方文檔)

Docker 是一個用於開發,交付和運行應用程序的開放平臺。Docker能使你的程序與你的基礎設施分開,所以你可以快速地交付軟件。通過Docker,你可以與管理應用程序同樣的方式管理你的應用程序。通過借助Docker快速地交付、測試和編碼的優勢,你可以顯著地减少你編碼和運行你產品的延遲。

Docker 平臺

Docker提供一種通過寬松的隔離環境打包和運行應用程序的能力,這種寬松的隔離環境也叫容器(container)。它的隔離性和安全性允許你在一個給定的主機裏同時運行很多的容器。容器是輕量級的,而且它包含了運行應用程序所必須的所有的東西,所以你不需要依賴目前在你主機所安裝的東西。你可以在你工作時很輕易地分享你的容器,它可以保證每個被分享的人的同一個容器能通過同一的方式工作。

Docker 提供工具和平臺以管理你的容器的整個生命周期:

  • 開發你的應用程序和使用容器提供的組件
  • 容器成為分配和測試你的應用程序的最小單元。
  • 准備好之後,將應用程序作為容器或編排好的服務部署到生產環境中。 無論您的生產環境是本地數據中心、雲提供商還是兩者的混合,其工作原理都是一樣的。

我可以使用Docker做什麼?

快速一致的交付你的應用程序

Docker簡化了開發生命周期,允許開發人員在標准化的環境中使用本地容器來提供應用程序和服務。 容器對於持續集成和持續交付(CI/CD)工作流非常有用。

考慮以下示例場景:

  • 你的開發人員在本地編寫代碼,並使用Docker容器與同事分享他們的工作成果。
  • 他們使用Docker將應用程序推入測試環境,並執行自動和手動測試。
  • 當開發人員發現錯誤時,他們可以在開發環境中修複它們,並將它們重新部署到測試環境中進行測試和驗證。
  • 測試完成後,向客戶獲取修複就像將更新後的映像推入生產環境一樣簡單。
響應式部署和擴展

Docker基於容器的平臺允許高度可移植的工作負載。 Docker容器可以運行在開發人員的本地筆記本電腦、數據中心的物理機或虛擬機、雲提供商或混合環境中。

Docker的可移植性和輕量級特性也使得它可以很容易地動態管理工作負載,並根據業務需求幾乎實時地擴展或拆除應用程序和服務。

在相同的硬件上運行更多的工作負載

Docker是輕量級和快速的。 它為基於管理程序的虛擬機提供了一種可行的、經濟有效的替代方案,因此您可以使用更多的計算能力來實現業務目標。 Docker非常適合高密度環境和中小型部署,在這些環境中,你需要用更少的資源做更多的事情。

Docker 架構

Docker使用客戶-服務器架構。 Docker客戶端與Docker守護進程對話,後者負責構建、運行和分發Docker容器。 Docker客戶端和守護進程可以運行在同一個系統上,或者您可以將一個Docker客戶端連接到一個遠程Docker守護進程。 Docker客戶端和守護進程使用REST API通過UNIX套接字或網絡接口進行通信。 另一個Docker客戶端是Docker Compose,它允許您使用由一組容器組成的應用程序。

Docker Architecture Diagram

Docker守護進程

Docker守護進程(dockerd)監聽Docker API請求,管理Docker對象,如鏡像、容器、網絡和卷。 一個守護進程也可以與其他守護進程通信來管理Docker服務。

Docker客戶端

Docker客戶端(Docker)是許多Docker用戶與Docker交互的主要方式。 當您使用諸如docker run之類的命令時,客戶端將這些命令發送給dockerd,由dockerd執行這些命令。 docker命令使用docker API。 Docker客戶端可以與多個守護進程通信。

Docker倉庫

Docker倉庫存儲Docker鏡像。 Docker Hub是一個任何人都可以使用的公共倉庫,Docker默認配置為在Docker Hub上查找映像。 您甚至可以運行自己的私有倉庫。

當您使用docker pull或docker run命令時,將從配置的倉庫中提取所需的鏡像。 當您使用docker push命令時,您的鏡像將被推送到已配置的倉庫中。

Docker對象

當您使用Docker時,您正在創建和使用鏡像、容器、網絡、卷、插件和其他對象。 本節簡要介紹其中一些對象。

鏡像

鏡像是一個只讀模板,包含創建Docker容器的說明。 通常,一個鏡像基於另一個鏡像,並進行一些額外的定制。 例如,您可以構建一個基於ubuntu鏡像的鏡像,但是安裝Apache web服務器和您的應用程序,以及使您的應用程序運行所需的配置細節。

您可以創建自己的鏡像,也可以只使用其他人創建的並在倉庫發布的鏡像。 要構建自己的鏡像,你需要使用簡單的語法創建一個Dockerfile,它定義創建鏡像和運行鏡像所需的步驟。 Dockerfile中的每條指令在圖像中創建一個層。 當您更改Dockerfile並重新構建鏡像時,只會重新構建那些已更改的層。 與其他虛擬化技術相比,這是使鏡像如此輕量級、小型和快速的部分原因。

容器

容器是鏡像的可運行實例。 您可以使用Docker API或CLI創建、啟動、停止、移動或删除容器。 您可以將容器連接到一個或多個網絡,為其附加存儲,甚至根據其當前狀態創建新鏡像。

默認情况下,容器與其他容器及其主機相對隔離。 您可以控制容器的網絡、存儲或其他底層子系統與其他容器或主機的隔離程度。

容器由它的鏡像以及在創建或啟動它時提供給它的任何配置選項定義。 當容器被移除時,任何不存儲在持久存儲中的對其狀態的更改都會消失。

docker run命令使用示例

下面的命令運行一個ubuntu容器,交互式地連接到本地命令行會話,並運行/bin/bash.

$ docker run -i -t ubuntu /bin/bash
複制代碼

當您運行此命令時,會發生以下情况(假設您使用的是默認倉庫配置):

  1. 如果你本地沒有ubuntu鏡像,Docker會從你配置的倉庫中提取它,就像你手動運行了Docker pull ubuntu一樣。
  2. Docker創建一個新的容器,就像你手動運行了一個docker container create命令一樣。
  3. Docker將一個可讀寫文件系統分配給容器作為它的最後一層。 這允許正在運行的容器在其本地文件系統中創建或修改文件和目錄。
  4. Docker創建一個網絡接口來將容器連接到默認網絡,因為您沒有指定任何網絡選項。 這包括為容器分配一個IP地址。 默認情况下,容器可以使用主機的網絡連接連接到外部網絡。
  5. Docker啟動容器並執行/bin/bash命令。因為容器是以交互方式運行的,並且連接到您的終端(由於使用了-i和-t標志),所以您可以在將輸出記錄到終端的同時使用鍵盤提供輸入。
  6. 當輸入exit終止/bin/bash命令時,容器將停止,但不會被删除。 您可以重新啟動或删除它。

底層技術

Docker是用Go編程語言編寫的,並利用了Linux內核的幾個特性來交付其功能。 Docker使用名為名稱空間的技術來提供名為容器的獨立工作區。 當您運行一個容器時,Docker會為該容器創建一組名稱空間。

這些名稱空間提供了一個隔離層。 容器的每個方面都運行在一個單獨的名稱空間中,它的訪問僅限於該名稱空間。

版权声明:本文为[D調的蜀威]所创,转载请带上原文链接,感谢。 https://gsmany.com/2021/08/20210815170542636B.html