Docker 映像和容器之間有何區別?
Docker 映像和容器是應用程式部署技術。傳統上,若要執行任何應用程式,必須安裝與電腦作業系統相符的版本。然而,現在您可以建立執行於所有類型裝置和作業系統的單一軟體套件或容器。Docker 是可將軟體包裝至容器內的軟體平台。Docker 映像是包含建立容器之指示的唯讀範本。Docker 映像是程式庫的快照或藍圖,也是應用程式執行的容器內所需的相依性。
為什麼使用 Docker 映像和容器?
容器可讓開發人員封裝在任何目標系統上執行的軟體。以前,必須專門針對不同目標系統封裝軟體。例如,如果希望應用程式在 macOS 和 Windows 上執行,則必須變更應用程式設計並針對不同的系統進行封裝。
容器化可讓軟體應用程式以微型服務的形式在分散式跨平台硬體架構之間執行。由於容器具有高度可攜性,因此這些軟體應用程式可以在幾乎任何具有快速部署的電腦上執行。例如,企業應用程式可能有數百個微型服務。這些微型服務可以作為容器在專用資料中心和雲端中跨多台電腦和虛擬機器 (VM) 執行。
運作方式:Docker 映像與Docker 容器
Docker 是容器化平台,您可以使用此平台封裝容器中的軟體,並在目標電腦上執行它們。Docker 容器可在安裝 Docker 引擎的任何電腦或虛擬機器上執行。並且,此類容器可在不了解基礎系統架構的情況下執行。Docker 引擎僅在 Linux 作業系統上執行。Docker 容器是使用 Docker 容器化平台建立的容器;還有其他較為冷門的容器化平台。
Docker 容器的運作方式
Docker 容器是執行期環境,其中包含執行應用程式程式碼而不使用主機機器相依項所需的所有必要元件 (例如程式碼、相依項和程式庫),。此容器執行期會在伺服器、電腦或雲端執行個體上的引擎中執行。引擎會依據可用的基礎資源執行多個容器。
若要部署和擴展一組容器,以便在不同的電腦或虛擬機器之間有效通訊,需要 Kubernetes 等容器協同運作平台。無論您的電腦位於內部部署還是雲端環境,這都可提供幫助。Kubernetes 會在容器營運的內容中管理多台電腦 (稱為叢集)。
Docker 映像的運作方式
Docker 映像或容器映像是用於建立容器的獨立可執行檔案。此容器映像包含容器需要執行的所有程式庫、相依項和檔案。Docker 映像可共享且便於攜帶,因此您可以一次在多個位置部署相同的映像,非常類似於軟體二進位檔案。
可以將映像儲存在登錄檔中,以追蹤複雜的軟體架構、專案、業務部門和使用者群組存取權。例如,公有 Docker Hub 登錄檔包含諸如作業系統、程式設計語言框架、資料庫和程式碼編輯器之類的映像。
主要命令:Docker 映像與.Docker 容器
可以使用帶參數的命令來操作 Docker 容器。標準的命令格式是 docker [options] [command] [arguments]。
容器命令
如下資料表包含常用的容器命令。Docker 文件中還列出了其他若干命令。
命令 |
解釋 |
docker ps -a |
列出所有容器。-a 標記顯示執行中和非執行的容器。若只要顯示執行中的容器,可以省略此標記。 |
docker rename [container] [new_name] |
將給定的容器重新命名為 new_name。 |
docker start [container] |
執行給定的容器。 |
docker stop [container] |
停止給定的容器。 |
docker wait [container] |
使給定的容器等待,直到其他正在執行的容器停止。 |
映像命令
與容器命令相比,映像命令較少。
Docker build -t image_name . |
從當前目錄中的檔案建置標記為 image_name 的 Docker 映像。 |
docker create [image] |
從給定的映像建置非執行的容器。 |
docker run [image] |
以給定映像為基礎建置並執行容器。 |
從 Docker 映像建立 Docker 容器
若要從特定的 Docker 映像建立容器,請在電腦上啟動引擎。然後,使用基本的 Docker 執行命令。
下列是命令範例:
docker run -it MyImage bash
此命令從名為 MyImage 的映像檔案建立容器。-it 會在執行中的容器內建立虛擬終端。此外,透過指定 bash 作為命令,一個 bash 終端會在容器中開啟。
主要區別:Docker 映像與Docker 容器
Docker 容器是獨立的、可執行的軟體應用程式或服務。另一方面,Docker 映像是載入容器以執行的範本,類似於一組指令。
可以儲存映像以進行共享和重複使用,但可以在應用程式的生命週期中建立和銷毀容器。接下來給出更多的差異。
來源
您可以從 Dockerfile (類似於組態檔案的人類可讀文字檔案) 建立 Docker 映像。Dockerfile 包含建置映像的所有指令。必須將 Dockerfile 以及所有關聯的程式庫和相應項放在同一個資料夾中,才能順利建置映像。
相反,可以直接從 Docker 映像建立 Docker 容器。
結構
Docker 映像檔案由多個層組成,以保持較小的檔案規模。 每個層都代表對映像執行的變更。這些層是唯讀的,可以在多個容器之間共享。
作為映像執行個體的 Docker 容器也包含層。但是,容器頂部有一個額外的可寫層,稱為容器層。容器層允許讀寫存取。它也可實現容器內執行的任何變更,從而與基於相同映像的其他容器隔離。
可變性
Docker 映像是不可變的,這意味著它們一旦建立就不能修改。如果需要對映像進行變更,則必須建立包含所需修改的新映像。
相較之下,容器是可變的,並可在執行期進行修改。在容器內執行的變更僅會影響此特定容器,不會影響其關聯的映像。一些變更範例是撰寫新檔案、安裝軟體或修改組態。
使用時機:Docker 映像與Docker 容器
可以在建立和部署軟體時彼此結合使用 Docker 映像和容器。
可以使用容器建置一次應用程式,並在任何位置執行這些應用程式。可以視需要快速啟動、停止和重新啟動容器。因此,可以依據應用程式的需求輕鬆縱向擴展或縮減規模。
話雖如此,同時使用映像和容器時,可更加輕鬆地進行管理。例如,以下是搭配使用映像和容器的方式:
- 依據相同的映像執行多個容器執行個體,從而水平擴展應用程式。
- 透過在開發、測試和生產環境中使用不同的映像,將持續整合與部署 (CI/CD) 管道自動化。
- 標記和管理不同版本的映像。這可協助您視需要復原或部署特定版本。
差異摘要:Docker 映像與Docker 容器
Docker 映像 |
Docker 容器 |
|
這是什麼? |
用來建立容器的可重複使用、可共享檔案。 |
執行期執行個體;獨立軟體。 |
建立來源 |
軟體程式碼、相依項、程式庫和 Dockerfile。 |
映像。 |
結構 |
唯讀層。 |
頂部帶有額外讀寫層的唯讀層。 |
可變性 |
不可變。如果有變更,則必須建置新的檔案。 |
可變;可以依據需要在執行期變更。 |
使用時機 |
將應用程式組態詳細資訊儲存為範本。 |
執行應用程式。 |
AWS 如何協助您滿足容器和映像要求?
Amazon Web Services (AWS) 提供許多可讓您安全地儲存和管理容器映像的產品。
我們提供的協同運作可管理容器的執行時間和地點,同時帶來為您的容器提供支援的彈性運算引擎。AWS 可協助管理容器及其部署,因此,您無需擔心基礎架構。如需詳細資訊,請前往 AWS 上的容器。
Amazon Elastic Container Registry (Amazon ECR) 是全受管容器登錄檔,提供高效能託管服務。因此,可以在任何地點可靠地部署應用程式映像和成品。建置以容器為基礎的應用程式的開發人員現在可以直接從 Amazon ECR Public 探索和下載 Docker 官方映像。
Amazon Elastic Container Service (Amazon ECS) 是全受管的容器協同運作服務。它可讓您更輕鬆地部署、管理和擴展容器化應用程式。Amazon ECS 使用任務定義中的 Docker 映像來啟動容器。
立即建立帳戶,開始在 AWS 上使用 Docker。