docker logs
洞察容器內(nèi)部活動(dòng)docker top
透視容器進(jìn)程世界docker stats
全方位資源監(jiān)控docker inspect
容器的詳細(xì)檔案
今天要介紹命令均服務(wù)于容器運(yùn)行狀態(tài)的觀察邻眷、診斷和性能分析,通過(guò)獲取日志輸出剔交、進(jìn)程列表和資源使用統(tǒng)計(jì)肆饶,可以幫助用戶排查容器內(nèi)部的問(wèn)題、優(yōu)化資源分配或進(jìn)行容量規(guī)劃岖常。由于它們聚焦于容器運(yùn)行時(shí)的監(jiān)控與調(diào)試驯镊,合并在同一起介紹有利于形成完整的監(jiān)控視角。
1. docker logs
洞察容器內(nèi)部活動(dòng)
docker logs
命令在容器運(yùn)維竭鞍、故障排查板惑、監(jiān)控告警、審計(jì)合規(guī)笼蛛、性能分析洒放、業(yè)務(wù)洞察、開發(fā)測(cè)試以及容器生命周期管理等多個(gè)方面發(fā)揮著核心作用滨砍,是管理和理解 Docker 容器運(yùn)行狀態(tài)的重要工具。
? ~ docker run -d -p 3000:3000 --name hello-go hello-go:default
5d301eb6b03f5c6397096fb6efb4193f9970a876a93fbf3a16bf26249fa79efb
? ~ docker logs hello-go
[GIN-debug] [WARNING] Creating an Engine instance with the Logger and Recovery middleware already attached.
[GIN-debug] [WARNING] Running in "debug" mode. Switch to "release" mode in production.
- using env: export GIN_MODE=release
- using code: gin.SetMode(gin.ReleaseMode)
[GIN-debug] GET / --> main.main.func1 (3 handlers)
[GIN-debug] GET /ping --> main.main.func2 (3 handlers)
[GIN-debug] [WARNING] You trusted all proxies, this is NOT safe. We recommend you to set a value.
Please check https://pkg.go.dev/github.com/gin-gonic/gin#readme-don-t-trust-all-proxies for details.
[GIN-debug] Listening and serving HTTP on :3000
[GIN] 2024/04/13 - 04:06:33 | 200 | 33.754μs | 192.168.31.47 | GET "/"
[GIN] 2024/04/13 - 04:06:33 | 404 | 903ns | 192.168.31.47 | GET "/favicon.ico"
運(yùn)行一個(gè)hello-go容器,-d
后臺(tái)運(yùn)行惋戏,-p 3000:3000
宿主機(jī)3000與容器內(nèi)3000映射领追,--name hello-go
命名容器為hello-go,最后跟hello-go:default
指定我們啟動(dòng)容器所基于的鏡像响逢。
通過(guò)命令docker logs [容器名稱 or 容器id]
绒窑,可以查看容器內(nèi)應(yīng)用的運(yùn)行日志,方便診斷應(yīng)用運(yùn)行期間的問(wèn)題舔亭。應(yīng)用日志文件會(huì)寫入日志文件進(jìn)行存儲(chǔ)些膨,建議使用掛在卷的方式持久化存儲(chǔ),防止因容器停止或刪除钦铺,丟失數(shù)據(jù)订雾。
可以在加-f
,用于實(shí)時(shí)跟蹤指定容器的日志輸出矛洞,實(shí)時(shí)打印容器新增的日志條目洼哎。docker logs hello-go -f
2. docker top
透視容器進(jìn)程世界
docker top
命令主要用于實(shí)時(shí)監(jiān)控容器內(nèi)部進(jìn)程狀態(tài)、資源使用情況沼本,以及進(jìn)行故障排查、安全審計(jì)抽兆、資源分配優(yōu)化、自動(dòng)化監(jiān)控等任務(wù)辫红,是管理和運(yùn)維 Docker 容器過(guò)程中必不可少的診斷和分析工具。
? ~ docker top hello-go
UID PID PPID C STIME TTY
TIME CMD
root 1232 1213 0 00:06 ?
00:00:00 ./app
使用docker top hello-go
命令厉熟,根據(jù)輸出容器內(nèi)部只有一個(gè)運(yùn)行中的進(jìn)程(PID 為 1232),該進(jìn)程以 root 用戶身份運(yùn)行揍瑟,其父進(jìn)程為 PID 1213。進(jìn)程啟動(dòng)于6分鐘前绢片,未關(guān)聯(lián)任何終端,且自啟動(dòng)以來(lái)未顯著占用CPU時(shí)間底循。進(jìn)程的主要任務(wù)是執(zhí)行當(dāng)前目錄下的 app
可執(zhí)行文件。
輸出解釋:
- UID: 表示在容器內(nèi)部運(yùn)行進(jìn)程的用戶標(biāo)識(shí)符(User ID)熙涤。
- PID: 進(jìn)程標(biāo)識(shí)符(Process ID)阁苞。
- PPID: 父進(jìn)程標(biāo)識(shí)符(Parent Process ID)困檩。
-
C: CPU 使用優(yōu)先級(jí)或nice值。數(shù)值越小那槽,優(yōu)先級(jí)越高悼沿,占用CPU資源的可能性越大。此處為
0
骚灸,表示該進(jìn)程具有普通(默認(rèn))的CPU使用優(yōu)先級(jí)糟趾。 -
STIME: 進(jìn)程啟動(dòng)時(shí)間。顯示為
00:06
甚牲,表示該進(jìn)程在當(dāng)前時(shí)間的前6分鐘啟動(dòng)义郑。 -
TTY: 終端類型。符號(hào)
?
表示該進(jìn)程沒有關(guān)聯(lián)到終端(non-TTY process)丈钙,通常后臺(tái)服務(wù)或守護(hù)進(jìn)程會(huì)有這樣的標(biāo)記非驮。運(yùn)行容器加-t
會(huì)為容器分配偽TTY。 -
TIME: 進(jìn)程累計(jì)占用CPU時(shí)間著恩。顯示為
00:00:00
院尔,表示該進(jìn)程自啟動(dòng)以來(lái),尚未占用過(guò)CPU時(shí)間或者統(tǒng)計(jì)周期內(nèi)未占用CPU時(shí)間喉誊。 -
CMD: 執(zhí)行的命令及參數(shù)邀摆。此處為
./app
,表示該進(jìn)程正在運(yùn)行一個(gè)名為app
的可執(zhí)行文件伍茄,該文件位于當(dāng)前工作目錄(.
)下栋盹。
3. docker stats
全方位資源監(jiān)控
docker stats
命令是監(jiān)控容器資源使用情況、進(jìn)行性能分析與調(diào)優(yōu)敷矫、容量規(guī)劃例获、故障排查、智能調(diào)度曹仗、合規(guī)審計(jì)以及自動(dòng)化運(yùn)維的核心工具榨汤,對(duì)于有效管理大規(guī)模容器化環(huán)境、保障服務(wù)質(zhì)量和降低成本具有重要意義怎茫。會(huì)顯示指定容器(或所有正在運(yùn)行的容器)的 CPU收壕、內(nèi)存、網(wǎng)絡(luò)和磁盤 I/O 的使用統(tǒng)計(jì)信息轨蛤。
使用命令docker stats hello-go
? ~ docker stats hello-go
CONTAINER ID NAME CPU % MEM USAGE / LIMIT MEM % NET I/O BLOCK I/O PIDS
5d301eb6b03f hello-go 0.00% 8.191MiB / 3.823GiB 0.21% 6.64kB / 4.04kB 7.11MB / 0B 6
輸出解釋:
-
CONTAINER ID: 容器的唯一標(biāo)識(shí)符蜜宪,一個(gè)長(zhǎng)字符串,如
5d301eb6b03f
祥山。 -
NAME: 容器的名稱圃验,如
hello-go
。這是您在創(chuàng)建容器時(shí)通過(guò)--name
參數(shù)指定的名稱缝呕,或者 Docker 自動(dòng)賦予的名稱斧散。 -
CPU %: 容器當(dāng)前使用的 CPU 占比颅湘。這里始終顯示為
0.00%
,說(shuō)明在采樣時(shí)刻瞻鹏,容器幾乎未使用 CPU 資源新博。 -
MEM USAGE / LIMIT: 容器當(dāng)前使用的內(nèi)存(MEM USAGE)及其內(nèi)存限制(LIMIT)。如
8.191MiB / 3.823GiB
表示容器使用了 8.191 MiB 內(nèi)存原献,其內(nèi)存限制為 3.823 GiB埂淮。后面的0.21%
是內(nèi)存使用量相對(duì)于限制的百分比,說(shuō)明容器的內(nèi)存使用非常低讲仰。 -
NET I/O: 容器的網(wǎng)絡(luò)輸入(I/O)和輸出(O)流量鄙陡。如
6.64kB / 4.04kB
表示容器接收了 6.64 kB 的數(shù)據(jù)躏啰,發(fā)送了 4.04 kB 的數(shù)據(jù)给僵。這些值都很小,說(shuō)明容器在網(wǎng)絡(luò)通信方面幾乎沒有活動(dòng)培漏。 -
BLOCK I/O: 容器對(duì)存儲(chǔ)(磁盤)的讀扰票(I/O)和寫入(O)量侧甫。如
7.11MB / 0B
表示容器向磁盤寫入了 7.11 MB 的數(shù)據(jù),沒有從磁盤讀取數(shù)據(jù)咒锻。寫入量稍大,但總體來(lái)看蒿辙,容器的磁盤活動(dòng)也相當(dāng)有限思灌。 -
PIDS: 容器內(nèi)當(dāng)前運(yùn)行的進(jìn)程數(shù)泰偿。這里始終顯示為
6
蜈垮,表示容器內(nèi)部有 6 個(gè)進(jìn)程正在運(yùn)行。
綜上所述调塌,docker logs
烟阐、docker top
和docker stats
這三個(gè)命令構(gòu)成了Docker容器日志與監(jiān)控的核心工具集紊扬,分別從日志輸出餐屎、進(jìn)程信息和資源使用三個(gè)維度為運(yùn)維人員提供了全面的容器觀測(cè)手段腹缩。熟練運(yùn)用這些命令,不僅能提升日常運(yùn)維效率润讥,還能在問(wèn)題發(fā)生時(shí)迅速定位根源楚殿,確保容器化環(huán)境的穩(wěn)定運(yùn)行和高效利用脆粥。實(shí)現(xiàn)容器監(jiān)控,為容器化應(yīng)用的長(zhǎng)期穩(wěn)健運(yùn)行保駕護(hù)航规伐。
4. docker inspect
容器的詳細(xì)檔案
docker inspect
命令是Docker容器管理中的一個(gè)重要工具匣缘,用于獲取指定容器的詳細(xì)配置孵户、狀態(tài)及元數(shù)據(jù)信息。這些信息以JSON格式輸出,包含容器的創(chuàng)建參數(shù)竖配、運(yùn)行狀態(tài)进胯、網(wǎng)絡(luò)配置、存儲(chǔ)掛載胁镐、資源限制诸衔、環(huán)境變量等諸多細(xì)節(jié)笨农。
以下是使用 docker inspect
命令查詢 hello-go
容器詳細(xì)信息的示例:
? ~ docker inspect hello-go
在這條命令中,hello-go
是您要查詢?cè)敿?xì)信息的容器名稱或ID竭宰。執(zhí)行命令后,Docker 會(huì)返回一個(gè)詳細(xì)的JSON對(duì)象廓旬,包含容器的所有相關(guān)信息嗤谚。由于JSON輸出通常較為冗長(zhǎng)且結(jié)構(gòu)化,不在展示旁赊,請(qǐng)運(yùn)行命令查看终畅。
通過(guò) docker inspect -f '{{json .<field>}}' <container>
可以只輸出指定字段的信息离福。
例如炼蛤,查詢?nèi)萜鱅P地址:docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' hello-go
理朋。
輸出解釋:
-
Id
: 容器的唯一標(biāo)識(shí)符(長(zhǎng)哈希字符串)嗽上。 -
Name
: 容器的名稱彼念,即創(chuàng)建時(shí)通過(guò)--name
參數(shù)指定的名稱或Docker自動(dòng)分配的短名稱浅萧。 -
State
: 容器當(dāng)前運(yùn)行狀態(tài)惯殊,包括Running
、Paused
务热、Restarting
崎岂、Dead
等狀態(tài)以及相關(guān)的詳細(xì)信息闪湾,如啟動(dòng)時(shí)間、退出代碼濒憋、是否可以自動(dòng)重啟等凛驮。 -
Config
: 容器創(chuàng)建時(shí)的配置信息黔夭,如命令本姥、入口點(diǎn)婚惫、環(huán)境變量颜屠、工作目錄甫窟、用戶粗井、資源限制(CPU浇衬、內(nèi)存)等耘擂。 -
NetworkSettings
: 容器的網(wǎng)絡(luò)配置醉冤,包括網(wǎng)絡(luò)模式(橋接、主機(jī)篙悯、none蚁阳、自定義網(wǎng)絡(luò))、端口映射鸽照、IP地址螺捐、DNS配置等。 -
Mounts
: 容器掛載的數(shù)據(jù)卷或綁定掛載信息,包括源路徑定血、目標(biāo)路徑赔癌、類型(volume、bind澜沟、tmpfs)等灾票。 -
Image
: 容器基于的鏡像信息,包括鏡像ID铝条、鏡像名稱悼枢、標(biāo)簽等。 -
Labels
: 容器上設(shè)置的標(biāo)簽(鍵值對(duì)),用于組織和篩選容器。 -
HostConfig
: 與主機(jī)相關(guān)的配置,如內(nèi)存课锌、CPU限制踢步、設(shè)備映射、特權(quán)模式唆缴、日志驅(qū)動(dòng)趟紊、重啟策略等铛嘱。
綜上所述,docker logs
、docker top
、docker stats
和docker inspect
這四個(gè)命令構(gòu)成了Docker容器日志與監(jiān)控的核心工具集衷佃,分別從日志輸出、進(jìn)程信息和資源使用、容器的詳盡配置信息四個(gè)維度為運(yùn)維人員提供了全面的容器觀測(cè)手段。熟練運(yùn)用這些命令鸭蛙,不僅能提升日常運(yùn)維效率肪获,還能在問(wèn)題發(fā)生時(shí)迅速定位根源寒锚,確保容器化環(huán)境的穩(wěn)定運(yùn)行和高效利用。實(shí)現(xiàn)容器監(jiān)控拣技,為容器化應(yīng)用的長(zhǎng)期穩(wěn)健運(yùn)行保駕護(hù)航。
忍不住要加個(gè)關(guān)注!不是我吹守呜,但你會(huì)后悔沒關(guān)注的萍歉!