
- Docker 教程
- Docker - 首頁
- Docker - 概述
- Docker - 在 Linux 上安裝
- Docker - 安裝
- Docker - Hub
- Docker - 映象
- Docker - 容器
- Docker - 登錄檔
- Docker - Compose
- Docker - 使用容器
- Docker - 架構
- Docker - 層
- Docker - 容器和主機
- Docker - 配置
- Docker - 容器和 Shell
- Docker - Dockerfile
- Docker - 構建檔案
- Docker - 公共倉庫
- Docker - 管理埠
- Docker - Web 伺服器
- Docker - 命令
- Docker - 容器連結
- Docker - 資料儲存
- Docker - 卷
- Docker - 網路
- Docker - 安全
- Docker - 工具箱
- Docker - 雲
- Docker - 構建雲
- Docker - 日誌記錄
- Docker - 持續整合
- Docker - Kubernetes 架構
- Docker - Kubernetes 的工作原理
- Docker - 生成式 AI
- Docker - 託管
- Docker - 最佳實踐
- Docker 設定服務
- Docker - 設定 Node.js
- Docker - 設定 MongoDB
- Docker - 設定 NGINX
- Docker - 設定 ASP.Net
- Docker - 設定 MySQL
- Docker - 設定 Go
- Docker - 設定 Rust
- Docker - 設定 Apache
- Docker - 設定 MariaDB
- Docker - 設定 Jupyter
- Docker - 設定 Portainer
- Docker - 設定 Rstudio
- Docker - 設定 Plex
- Docker 設定 - Flame
- Docker 設定 - PostgreSql
- Docker 設定 - Mosquitto
- Docker 設定 - Grafana
- Docker 設定 - Nextcloud
- Docker 設定 - Pawns
- Docker 設定 - Ubuntu
- Docker 設定 - RabbitMQ
- Docker - 設定 Python
- Docker - 設定 Java
- Docker - 設定 Redis
- Docker - 設定 Alpine
- Docker - 設定 BusyBox
- Docker 設定 - Traefik
- Docker 設定 - WordPress
- Docker 有用資源
- Docker - 快速指南
- Docker - 有用資源
- Docker - 討論
Docker - 容器
Docker 容器是 Docker 映象的執行時例項。可以透過例項化映象來建立它們。Docker 容器正在徹底改變軟體開發、部署和管理。從本質上講,Docker 容器將應用程式及其所有依賴項捆綁到一個緊湊、輕量級的包中。它們可以透過在作業系統級別使用虛擬化,在各種計算環境中可靠地執行。
這種封裝是透過使用**Docker 映象**來實現的。映象本質上是包含執行特定應用程式所需的所有檔案、庫和配置的藍圖。由於容器將應用程式及其依賴項與底層系統隔離開來,因此它們在各種環境中提供一致性和可預測性。
Docker 容器充當具有其自己的檔案系統、網路介面和資源的獨立程序,但它們輕量且高效,因為它們與主機作業系統共享相同的核心。它們依賴於 Docker 生態系統的重要元件才能工作,包括構建、啟動和管理容器的 Docker Engine,以及充當 Docker 映象儲存庫的 Docker Registry。
在本章中,讓我們瞭解容器的工作原理以及您最常使用的重要的 Docker 容器命令。
Docker 容器的關鍵概念
以下是 Docker 容器背後的關鍵概念和原則。
容器化
從本質上講,容器基於容器化的概念,即將應用程式及其所有依賴項打包到一個單一軟體包中。此軟體包稱為容器映象,其中包含執行應用程式所需的所有必要的執行時環境、庫和其他元件。
隔離
Docker 容器使用作業系統級虛擬化來提供應用程式隔離。每個容器都作為獨立的程序執行,具有自己的檔案系統、網路介面和程序空間,獨立於主機系統。
透過保持彼此獨立,容器透過這種隔離避免相互干擾。
Docker Engine
Docker Engine 是 Docker 容器背後的核心;它構建、啟動和維護它們。Docker Engine 由兩個組成部分構成:在後臺執行的 Docker 守護程序和允許使用者透過命令與 Docker 守護程序通訊的 Docker 客戶端。
映象和容器生命週期
Docker 容器生命週期的第一步是建立容器映象。此映象是使用 Dockerfile 構建的,Dockerfile 描述了應用程式的依賴項和配置。
建立映象後,可以使用它來例項化容器,容器是正在執行的映象例項。可以單獨啟動、停止、暫停和重新啟動容器。
資源管理
Docker 容器由於其共享核心體系結構和輕量級設計,提供有效的資源管理。由於容器共享主機作業系統的作業系統核心,因此減少了開銷並加快了啟動時間。
Docker 還提供用於監控和控制資源使用的工具,以確保最佳效能和可擴充套件性。
可移植性
Docker 容器的主要優勢之一是其可移植性。容器映象是獨立的單元,可以輕鬆地部署和分發到各種環境中,從生產到測試和開發。
這種可移植性簡化了部署過程並降低了相容性問題的可能性,實現了“一次構建,隨處執行”。
Docker 容器生命週期
Docker 容器生命週期包含五個基本階段:建立、啟動、暫停、退出和死亡。生命週期由其階段表示,從建立和執行到終止和可能的恢復。
瞭解這些階段對於有效地管理 Docker 容器並在容器化環境中確保其正確執行至關重要。

讓我們探索 Docker 容器生命週期的各個階段
建立狀態
“建立”狀態是第一個階段。當使用 docker create 命令或類似的 API 呼叫建立容器時,它將進入此階段。處於“建立”狀態的容器尚未執行,但它確實作為一個靜態實體存在,其所有配置設定都已定義。
此時,Docker 預留了容器所需的儲存卷和網路介面,但容器內的程序尚未啟動。
啟動狀態
“啟動”或“執行”狀態是生命週期的下一階段。當使用 docker start 命令或等效的 API 呼叫啟動容器時,它將進入此階段。
當容器處於“啟動”狀態時,其程序將啟動並開始執行其映象中指定的應用程式或服務。在此狀態下,容器積極地使用 CPU、記憶體和其他系統資源來執行其分配的任務。
暫停狀態
在容器的生命週期中,容器也可能進入“暫停”狀態。當使用 docker pause 命令暫停容器時,其程序將掛起,從而停止其執行。
暫停的容器保持其資源分配和配置設定,但處於非活動狀態。此狀態有助於透過暫時停止容器執行(而無需完全停止)來節省資源和進行除錯。
退出狀態
處於“退出”狀態的容器已完成執行並退出其主程序。容器在完成其預期任務或遇到導致其終止的錯誤時可以進入此狀態。
“退出”的容器保持停止狀態,保留其資源和配置設定,但停止執行任何程序。在此狀態下,容器可以使用 docker rm 命令完全刪除或使用 docker start 命令重新啟動。
死亡狀態
處於“死亡”狀態的容器已遇到不可恢復的錯誤或已意外終止。容器化應用程式中的嚴重錯誤、底層主機系統中的問題或手動干預都可能導致容器進入此狀態。
當容器處於“死亡”狀態時,它處於非活動狀態,並且 Docker 守護程序通常會釋放或回收其資源。需要使用**docker rm 命令**刪除處於此狀態的容器,因為它們無法重新啟動,從而釋放系統資源。
重要的 Docker 容器命令
既然您已經瞭解了 Docker 容器的基礎知識及其工作原理,那麼讓我們藉助示例瞭解最重要的 Docker 容器命令。
列出所有 Docker 容器
可以使用**docker ps 命令**列出 Docker 主機上的正在執行的容器。預設情況下,它僅顯示正在執行的容器,您可以使用 -a 或 --all 標誌顯示所有容器,包括已停止的容器。
$ docker ps

此命令顯示所有當前正在執行的容器的 ID、名稱、狀態和其他相關詳細資訊。如果沒有任何容器正在使用,則返回空列表。
執行 Docker 容器
啟動和建立 Docker 容器的主要命令是“docker run”。當您執行此命令時,如果本地尚未提供映象,Docker 會從登錄檔中拉取映象。然後,它透過基於該映象生成一個來啟動一個新的容器例項。
透過此命令,您可以指定多個選項,包括卷掛載、環境變數、埠對映等,以根據您的需求自定義容器配置。
$ docker run -d -p 8080:80 nginx

在這種情況下,docker run 的分離模式 (-d) 基於“nginx”映象建立一個新容器並在後臺執行它。此外,它將主機埠 8080 對映到容器埠 80 (-p 8080:80),從而允許訪問容器中託管的 NGINX Web 伺服器。
停止 Docker 容器
可以使用 docker stop 命令優雅地停止容器,該命令向容器的主程序傳送 SIGTERM 訊號。這使容器能夠在關閉之前完成任何清理操作,例如儲存狀態或斷開網路連線。
$ docker stop my_container

此命令停止當前正在執行的“my_container”容器。Docker 會等待容器在可配置的持續時間內(預設情況下為 10 秒)優雅地結束其生命週期。如果它在此時間限制內未停止,Docker 將自動使用 SIGKILL 訊號終止容器。
暫停正在執行的容器
可以使用 docker pause 命令暫時掛起正在執行的容器的程序或暫停其執行。這對於暫時釋放系統資源、除錯和解決問題可能很有用。
$ docker pause my_container

此命令停止容器“my_container”的執行。當暫停時,容器不使用任何 CPU 或記憶體,因為其程序已凍結。但是,容器保留其資源分配和配置設定。
恢復 Docker 容器
當容器暫停時,可以使用 docker unpause 命令重新執行其程序。透過使用此命令,容器將返回到其初始狀態並撤消 docker pause 命令的效果。
$ docker unpause my_container

上述命令恢復暫停的容器“my_container”的執行,並允許其程序照常繼續。
重啟容器
一種快速停止和重啟正在執行的容器的簡單方法是使用 docker restart 命令。它常用於在容器遇到問題後強制其重新初始化,或將更改應用於正在執行的容器的配置。
$ docker restart my_container

此命令會暫停然後恢復名為“my_container”的容器的執行。容器內的程序會在重啟時停止然後重新啟動,使任何修改生效。
在正在執行的 Docker 容器中執行命令
要在已執行的容器內執行命令,請使用 docker exec 命令。它允許使用者在容器的環境中執行任意命令,例如啟動 shell 會話或執行特定程式。
$ docker exec -it my_container bash

此命令在互動式 shell 會話(bash)中開啟當前正在執行的“my_container”容器。為了啟用互動式輸入/輸出,-it 標記分配一個偽終端並保持 STDIN 開啟,即使它未連線也是如此。
刪除 Docker 容器
要刪除一個或多個 Docker 容器,可以使用 docker rm 命令。可以指定要刪除的容器的 ID 或名稱。預設情況下,此命令僅刪除已停止的容器;要強制刪除正在執行的容器,可以使用 -f 或 --force 標記。
$ docker rm my_container

以上命令刪除名為“my_container”的容器。除非使用 -f 標記強制刪除,否則容器必須停止執行才能被刪除。
要清理 Docker 主機上的磁碟空間,可以使用 docker container prune 命令刪除所有已停止的容器。這是一種清理空閒容器並回收資源的實用方法。
$ docker container prune

Docker 會在繼續之前請求確認,但您可以透過使用 -f 或 –force 標記傳遞它來忽略此提示。
如果要一起刪除所有 Docker 容器,可以使用兩個命令的組合 - “docker ps -aq”,它用於獲取所有容器 ID 的列表,並將其與“docker rm”命令結合使用以刪除所有容器,包括正在執行的容器。
$ docker rm $(docker ps -aq)

以上命令刪除 Docker 主機上的每個容器,無論它是否正在執行或已停止。
結論
總而言之,Docker 容器徹底改變了現代軟體開發構建、部署和管理應用程式的方式。Docker 容器是輕量級且可移植的環境,提供了許多優勢,例如一致性、可重複性、資源效率、可擴充套件性和可移植性,用於打包和執行應用程式。
開發人員可以使用各種 Docker 命令和工具輕鬆建立、部署和管理容器,從而促進更有效的開發工作流程並增強團隊協作。隨著容器化的普及,Docker 容器將繼續成為軟體開發生態系統的重要組成部分,幫助企業更快地創新並更有效地為客戶提供價值。
常見問題
Q1. Docker 是容器還是虛擬機器?
Docker 是一個容器化平臺,這意味著它使用容器來執行和打包應用程式。與虛擬機器 (VM) 虛擬化硬體不同,Docker 容器共享宿主機核心並虛擬化作業系統。
因此,由於它們不需要為每個應用程式提供單獨的作業系統例項,因此 Docker 容器比虛擬機器 (VM) 更輕量級且更高效。
Q2. Docker 和 Kubernetes 之間有什麼區別?
雖然它們有不同的用途,但 Docker 和 Kubernetes 都是容器生態系統中廣泛使用的工具。Docker 提供用於構建容器映象和在本地或生產環境中執行容器的工具。它主要用於建立、管理和執行容器。
Kubernetes 是一個容器編排平臺,可以自動化容器化應用程式的部署、擴充套件和管理。Docker 專注於容器化過程本身,而 Kubernetes 管理容器叢集並確保它們具有彈性、可擴充套件性和可用性。
Q3. 如何執行 Docker 容器?
您可以使用“docker run <image>”命令啟動 Docker 容器。您必須提及 Docker 映象的 ID 或名稱,該映象可在本地或透過 Docker Hub 等登錄檔獲取。然後,使用 docker run 命令後跟映象的名稱或 ID 來建立並從該映象啟動容器。為了進一步自定義容器的配置,您可以選擇提供更多引數,例如埠對映、環境變數和卷掛載。
Q4. 什麼是 Docker Daemon?
在主機系統上監控 Docker 容器的後臺程序稱為 Docker 守護程序或“dockerd”。除了執行容器生命週期任務(包括構建、啟動、停止和刪除容器)外,它還負責管理容器映象、網路和卷。為了管理容器資源,Docker 守護程序與主機作業系統的核心互動,同時偵聽來自 Docker 客戶端的 Docker API 請求並在使用者的代表下執行這些請求。
Q5. Docker 容器的生命週期是怎樣的?
Docker 容器的生命週期可能因其配置、建立方式以及它是在附加模式還是分離模式下執行而異。Docker 容器通常會無限期執行,除非其主程序結束或使用者手動停止或終止它。
當容器處於分離模式 (-d) 時,它們會在後臺執行,直到使用 docker stop 命令顯式停止它們,或直到 Docker 守護程序重新啟動。重啟策略是另一種設定容器的方式,以便在發生故障或停止時自行重啟。