如何查詢 Docker 容器程序?


介紹

Docker 是一種強大的工具,允許開發人員在容器內構建、交付和執行應用程式。容器是包含應用程式正常執行所需的所有元件(程式碼、庫、依賴項和執行時)的小型獨立可執行包。Docker 的關鍵功能之一是能夠管理和監控容器內執行的程序。

在本文中,我們將探討如何查詢 Docker 容器程序以及如何使用不同的方法來檢視和管理它們。

先決條件

您需要在您的計算機上安裝 Docker 才能按照本指南進行操作。您可以使用以下命令確定 Docker 是否已安裝:

$ docker --version

如果 Docker 未安裝,您可以按照適用於您作業系統的官方 Docker 安裝指南 進行操作。

方法

有幾種方法可以查詢 Docker 容器程序。我們將在本文中討論其中的一些方法:

  • Docker inspect 命令

  • Docker top 命令

  • Docker exec 命令

讓我們詳細討論每種方法以及示例。

Docker inspect 命令

我們可以使用 Docker inspect 命令獲取有關特定容器的全面詳細資訊,包括其程序。這有助於進行故障排除或更深入地瞭解容器的執行方式。

語法

我們使用以下命令來使用 docker inspect:

$ docker inspect <container-name>

示例

步驟 1 - 在您的程式碼編輯器中導航到您的專案目錄,該目錄包含您需要查詢容器程序的 Docker 容器。

要使用終端導航,請使用以下命令:

$ cd path-of-the-directory

步驟 2 - 在終端中,執行以下命令:

$ docker inspect docker-apps

這將列印有關容器“my-container”的全面詳細資訊,以及當前在其中執行的程序。

輸出

[
   {
      "Id": "sha256:eb6dda32a60d823a3816d88ed4b9d79c8fadca744d1ee1556231c00f8759f89e",
      "RepoTags": [
         "docker-apps:latest"
      ],
      "RepoDigests": [],
      "Parent": "",
      "Comment": "buildkit.dockerfile.v0",
      "Created": "2023-01-08T05:13:17.063330293Z",
      "Container": "",
      "ContainerConfig": {
         "Hostname": "",
         "Domainname": "",
         "User": "",
         "AttachStdin": false,
         "AttachStdout": false,
         "AttachStderr": false,
         "Tty": false,
         "OpenStdin": false,
         "StdinOnce": false,
         "Env": null,
         "Cmd": null,
         "Image": "",
         "Volumes": null,
         "WorkingDir": "",
         "Entrypoint": null,
         "OnBuild": null,
         "Labels": null
      },
      "DockerVersion": "",
      "Author": "",
      "Config": {
         "Hostname": "",
         "Domainname": "",
         "User": "",
         "AttachStdin": false,
         "AttachStdout": false,
         "AttachStderr": false,
         "Tty": false,
         "OpenStdin": false,
         "StdinOnce": false,
         "Env": [
            "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",
            "NODE_VERSION=19.4.0",
            "YARN_VERSION=1.22.19"
         ],
         "Cmd": [
            "/bin/sh",
            "-c",
            "node app.js"
         ],
         "ArgsEscaped": true,
         "Image": "",
         "Volumes": null,
         "WorkingDir": "/app",
         "Entrypoint": [
            "docker-entrypoint.sh"
         ],
         "OnBuild": null,
         "Labels": null
      },
      "Architecture": "amd64",
      "Os": "linux",
      "Size": 176079128,
      "VirtualSize": 176079128,
      "GraphDriver": {
         "Data": {
            "LowerDir": "/var/lib/docker/overlay2/8p8o9wm9g6dwlhibzwd14zzsg/diff:/var/lib/docker/overlay2/9b834a59db8eb73cfea182889e02167519d51b77275278d12b0f0836ff9cb591/diff:/var/lib/docker/overlay2/9b546e9fd0a50f20bddd71bb4a8156e2fcbf1c52dc94d3c312c7c962320a10ad/diff:/var/lib/docker/overlay2/a76e906cbf39ed57b5b973cf95d43b379713ced3bf29de44a628894f3036e599/diff:/var/lib/docker/overlay2/e4c1f1bb76c66c5d1781a775c8a2ca9338065ea0b398aeaed4230a00a15d2952/diff",
            "MergedDir": "/var/lib/docker/overlay2/x8mn6648vzpbkai1h0fsqi7cz/merged",
            "UpperDir": "/var/lib/docker/overlay2/x8mn6648vzpbkai1h0fsqi7cz/diff",
            "WorkDir": "/var/lib/docker/overlay2/x8mn6648vzpbkai1h0fsqi7cz/work"
         },
         "Name": "overlay2"
      },
      "RootFS": {
         "Type": "layers",
         "Layers": [
            "sha256:ded7a220bb058e28ee3254fbba04ca90b679070424424761a53a043b93b612bf",
            "sha256:9a6a030b65c4b6ac82eacf5ad6c84cbf66889e7f242b8eb4ff5645e58c24ab54",
            "sha256:72133ba0a087ab86a8688dec714d4641ed1b3d595d4293bf1009d4f6cde56ce3",
            "sha256:ed1deaa8b02f03679b53d4be39743add0c6315f88ae2586f90d54b3dcca9003d",
            "sha256:f8684c5845f4a6611e51ecdc18d83c50cd42dbf7dfbb119caf8909b326da183e",
            "sha256:5f70bf18a086007016e948b04aed3b82103a36bea41755b6cddfaf10ace3c6ef"
         ]
      },
      "Metadata": {
         "LastTagTime": "2023-01-08T05:13:17.19313535Z"
      }
   }
]

Docker top 命令

使用者可以使用 docker top 命令即時檢視 Docker 容器中執行的程序。此命令有助於診斷和除錯問題,以及快速確定哪些程式正在使用資源。

語法

以下命令將幫助您使用它:

$ docker top <container-name>

示例

步驟 1 - 在您的程式碼編輯器中導航到您的專案目錄,該目錄包含您需要查詢容器程序的 Docker 容器。

步驟 2 - 在終端中,執行以下命令:

$ docker top my-docker

這將列出容器“my-container”中執行的所有程序。

輸出

UID          PID      PPID     C     STIME    TTY       TIME 
CMD
root        2534      2379     0     10:35     ?    00:00:00 
/sbin/tini -- /usr/local/bin/jenkins.sh
jenkins     2535      2534     0     10:35     ?    00:00:00 
/bin/tini -- /usr/local/bin/jenkins.sh
jenkins     2612      2535     0     10:35     ?    00:00:00 
/usr/local/openjdk-8/bin/java -Djenkins.install.runSetupWizard=false -Djava.awt.headless=true -jar /usr/local/jenkins/jenkins.war --logfile=/var/jenkins_home/jenkins.log --webroot=/var/cache/jenkins/war --httpPort=8080

在此示例中,Jenkins 執行的容器被給予了 docker top 命令,結果列出了這些程序的程序 ID 和名稱。

Docker exec 命令

使用者可以使用 docker exec 命令在活動的 Docker 容器內執行命令。此命令可用於與容器內的程序互動以及檢查容器的狀態。

語法

以下命令將幫助您使用它:

$ docker exec <container-name> <command>

示例

步驟 1 - 在您的程式碼編輯器中導航到您的專案目錄,該目錄包含您需要查詢容器程序的 Docker 容器。

步驟 2 - 在終端中,執行以下命令:

$ docker exec my-container ps aux

容器“my-container”將執行“ps aux”命令,該命令將列出在其內部執行的每個程序。

輸出

$ docker    exec    docker-apps ps  aux
USER        PID     %CPU %MEM   VSZ      RSS     TTY  STAT   START  TIME COMMAND
root        1 0.0   0.0 32784   4360 ?    Ss   06:05  0:00 /bin/bash
root        37 0.0  0.0 16780   3000 ?    R+   06:05  0:00 ps aux

此輸出中顯示了 ID 為 docker-apps 的容器內執行的程序。ps aux 命令顯示了容器中當前活動的所有程序的列表,以及有關每個程序的使用者、PID、CPU、RAM、虛擬記憶體、駐留集大小、終端、狀態、啟動時間和命令的資訊。

結論

在本文中,我們探討了如何查詢 Docker 容器程序以及如何使用不同的方法來檢視和管理它們。top 命令允許您檢視容器內執行的程序,exec 命令允許您在執行的容器內執行命令,而 inspect 命令允許您檢視有關容器的詳細資訊,包括其程序。透過使用這些方法,您可以有效地管理和監控 Docker 容器內執行的程序。

更新於:2023年1月17日

14K+ 瀏覽量

開啟您的 職業生涯

透過完成課程獲得認證

開始學習
廣告