Docker - 使用容器



Docker 容器是一個可移植的軟體單元,它將應用程式及其所有依賴項打包在一起,以便在任何基礎架構上執行。因此,應用程式可以在許多開發、測試和生產環境中一致地執行。本章重點介紹一些 Docker 容器的基本命令,這些命令將幫助您無縫地使用容器。

重要的 Docker 容器命令

Docker 附帶許多可用於構建、管理和執行容器的命令。這些命令是使用 Docker 的基礎;它們使您能夠非常有效地控制容器的生命週期和行為。瞭解和掌握這些命令的使用對於有效利用 Docker 至關重要。

建立和啟動容器 - docker run 命令

docker run 命令建立一個新容器並啟動它。它包括從儲存庫拉取映象(如果它尚未在您的本地系統上)、建立容器和啟動容器的功能。可以傳遞多個選項和標誌來更改容器的行為,例如設定環境變數、掛載卷和配置網路。

命令

$ docker run [OPTIONS] IMAGE [COMMAND] [ARG...]

示例

$ docker run -d -p 80:80 --name mywebserver nginx
Creating and Starting Containers

此命令將以分離模式 (-d) 啟動我們的 nginx web 伺服器容器,將主機的 80 埠對映到容器的 80 埠 (-p 80:80),並將容器命名為 mywebserver。

列出容器

docker ps 命令用於列出所有正在執行的容器。預設情況下,它只列出正在執行的容器,但是可以提供額外的標誌來包含已停止的容器或根據任意條件過濾結果。此命令輸出重要的資訊,例如容器 ID、名稱、狀態以及啟動特定容器的命令。

命令

$ docker ps

示例

$ docker ps -a 
Listing Containers

此命令列出所有容器,包括已停止的容器 (-a)。

管理容器狀態

這些是用於控制容器狀態的命令。

  • docker start − 啟動一個或多個已停止的容器。
  • docker stop − 優雅地停止正在執行的容器,以便有時間正確關閉。
  • docker restart − 停止然後啟動一個或多個容器,有效地重新啟動它們。

命令

$ docker start [CONTAINER]
$ docker stop [CONTAINER]
$ docker restart [CONTAINER]

示例

$ docker start mywebserver
$ docker stop mywebserver
$ docker restart mywebserver
Managing Container States

上面的命令分別啟動、停止和重啟名為 mywebserver 的容器。

檢視容器日誌

可以使用 docker logs 命令從正在執行或已停止的容器中提取日誌。它將提供容器輸出及其行為的檢視,這對於除錯和監控非常有用。您還可以關注即時日誌或將輸出限制為最近的日誌條目。

命令

$ docker logs [OPTIONS] CONTAINER

示例

$ docker logs mywebserver
Viewing Container Logs

此命令顯示 mywebserver 容器的日誌。

刪除容器

docker rm 命令刪除一個或多個容器。它對於清理不再需要的容器很有用。要刪除正在執行的容器,必須先停止它,或者使用 -f(強制)選項強制刪除它。

命令

$ docker rm [OPTIONS] CONTAINER [CONTAINER...]

示例

$ docker rm mywebserver
Removing Containers

此命令刪除 mywebserver 容器。

從容器建立映象

docker commit 命令根據容器中的更改提交一個新映象。當您想要儲存當前時刻容器的狀態,然後與他人共享該狀態或在另一個容器中再次使用它時,此命令非常有用。

命令

$ docker commit [OPTIONS] CONTAINER [REPOSITORY[:TAG]]

示例

$ docker commit mywebserver mynewimage
Creating Images from Containers

此命令將根據 webserver 容器建立新映象 mynewimage。

其他關鍵命令

Docker 還有一些其他命令可用於處理和管理容器。

  • docker exec − 在活動容器中執行命令。
  • docker cp − 在容器和本地檔案系統之間複製檔案/資料夾。
  • docker top − 顯示容器的正在執行的程序。
  • docker attach − 附加到正在執行的容器以與其互動。
  • docker pause 和 unpause − 分別用於暫停容器程序和恢復它。

命令和示例

以下命令在 mywebserver 容器中互動式地執行 Bash shell。

$ docker exec [OPTIONS] CONTAINER COMMAND [ARG...]
$ docker exec -it mywebserver /bin/bash

下一個命令將 /var/www/html 的內容從 mywebserver 容器複製到本地 ./local_copy 目錄。

$ docker cp [OPTIONS] CONTAINER:SRC_PATH DEST_PATH|-
$ docker cp mywebserver:/var/www/html ./local_copy

以下命令顯示 mywebserver 容器的正在執行的程序。

$ docker top CONTAINER [ps OPTIONS]
$ docker top mywebserver
Other Key Commands 1

下一個命令將您的終端附加到 mywebserver 容器。

$ docker attach [OPTIONS] CONTAINER
$ docker attach mywebserver
Other Key Commands 2

後續命令分別暫停和取消暫停 mywebserver 容器。

$ docker pause CONTAINER [CONTAINER...]
$ docker unpause CONTAINER [CONTAINER...]
$ docker pause mywebserver
$ docker unpause mywebserver
Other Key Commands 3

釋出容器埠

釋出容器埠使容器服務可以從 Docker 主機外部訪問。透過將容器埠對映到主機埠,您可以將容器內執行的服務公開給外部客戶端。

命令

$ docker run -p HOST_PORT:CONTAINER_PORT [OPTIONS] IMAGE [COMMAND] [ARG...]

示例

$ docker run -d -p 8080:80 --name webserver nginx
Publishing Container Ports

上面的命令將執行一個 nginx 容器並將容器的 80 埠對映到主機上的 8080 埠,允許透過 https://:8080 訪問 web 伺服器。

資源管理 (CPU、記憶體、IO)

Docker 提供了幾種設定限制和管理分配給容器的資源的功能。這可以防止單個容器以不公平的方式利用資源。

CPU 限制

$ docker run --cpus="1.5" [OPTIONS] IMAGE [COMMAND] [ARG...]

此命令將容器限制為最多使用 1.5 個 CPU 核心。

記憶體限制

$ docker run --memory="512m" [OPTIONS] IMAGE [COMMAND] [ARG...]

此命令將容器限制為最多 512 MB 的記憶體。

IO 限制

$ docker run --blkio-weight=500 [OPTIONS] IMAGE [COMMAND] [ARG...]

此命令初始化容器的塊 IO 權重;使用者可以影響 IO 優先順序。

結論

Docker 透過支援強大的容器化平臺,重新定義了軟體開發和部署的格局。在使用 Docker 時,瞭解和掌握其基本命令、網路功能、高階操作和最佳實踐對於充分發揮其潛力非常重要。

隨著您繼續使用 Docker 並花費時間使用它,這些基本和高階概念將幫助您構建、管理和部署不僅可擴充套件、安全,而且高效的應用程式。

關於 Docker 使用容器的常見問題

1. Docker 如何將容器彼此隔離以及與主機系統隔離?

名稱空間和控制組主要在 Docker 中實現隔離。名稱空間提供隔離 - 它們允許每個容器擁有自己的系統檢視,其中包含獨立的程序列表、網路設定和檔案系統。

控制組限制容器一次可以使用的資源量,以確保在 CPU、記憶體或 I/O 負載過重的情況下,它不會使系統的其餘部分資源匱乏。這種隔離確保包含的應用程式可以獨立執行,而不會干擾其他應用程式或底層主機。

2. 我可以在生產伺服器上使用 Docker 嗎?

是的,必須強調的是,Docker 在生產環境中被廣泛使用。組織在容器中執行服務,以可靠地將應用程式打包並部署到不同的平臺。

進入生產環境時,務必遵循安全、監控和可擴充套件性的最佳實踐。您可以使用 Docker Swarm 或 Kubernetes 等編排工具來幫助管理大規模的 Docker 部署。

3. 如何更新 Docker 容器而不丟失其資料?

要以非破壞性的方式更新容器,首先停止容器。從登錄檔拉取更新的映象,並在從登錄檔拉取更新的映象後,刪除舊的現有容器 - 在 docker rm 上保留其卷使用 "-v" 標誌

最後,使用更新的映象啟動一個新容器並在之前的容器中掛載相同的卷。這樣,您的資料在更新後仍然一致。

廣告