大家對 Docker 都應該有了或多或少的認識了,相信大家都是從這兩張圖來粗曠的理解 Docker 及容器概念的

那我們如何更輕松的理解容器 Container 呢?說白了
Container 就是一個行程
比如我們 run 一個 mongo 的鏡像 image

然后我們通過下面命令列舉出正在運行的容器 (以下兩個命令等同)
# 舊命令
docker ps
# 新命令
docker container ls

個人建議使用新命令
如果你對上述等同命令有所疑惑,或者好奇動圖中的命令自動補全是怎么實作的,以及為什么建議使用新命令,請看 Docker 命令自動補全,在不熟悉命令之前,建議充分利用 TAB 鍵來查看每個命令的含義,然后結合實際使用場景,慢慢記憶,這樣才根深蒂固
我們 run 下面命令:
# top -- Display the running processes of a container (這是 TAB 補全給的命令提示說明)
docker container top mongo

從上圖中可以看到,PID 為 2292,command 為 mongod,既然我們說 container 是一個行程,那我們就應該在 Host 中找得到,執行下面命令
ps aux | grep mongod
查看執行結果:
rgyb 49927 0.0 0.0 4277516 708 s000 S+ 4:06PM 0:00.00 grep --color=auto --exclude-dir=.bzr --exclude-dir=CVS --exclude-dir=.git --exclude-dir=.hg --exclude-dir=.svn mongod
關于 mongod 只有我們剛剛執行的 grep mongod 的操作,并沒有上面說的 container,這是為什么?

細心的朋友可能已經從動圖中發現我是用 Mac 做的測驗,Docker Platform 原生運行在 Linux 上(在 Linux 作業系統中就不會有上述問題,大家可以自行嘗試),我是用 Docker for Mac,其實使用的是在macOS上一個特殊的 xhyve VM中運行的小型(定制)Alpine Linux,所以如果想看到這個行程,我們需要進入到 Mac 的這個 Docker VM
執行下述命令:
docker run -it --rm --privileged --pid=host justincormack/nsenter1
(這里暫不展開說明,有興趣的可以看看這個 justincormack/nsenter1 image 到底做了什么,Docker for Windows 也可以用這種方式進入 Docker VM)

到這,Container 是個行程算是證明完了,但是老gong,你證明這個有什么用呢?
程式員都對行程有基本了解,證明 Container 是個行程,只不過是將一個“新”東西剝開看看本質,并掛靠到你熟悉的內容上
行程就是它可以獲取作業系統的哪些資源(網路/磁盤/檔案等),當停止行程,也就會自動退出,釋放相應資源,所以,接下來只要慢慢探索,一個 Container 中使用了哪些資源,是如何獲取資源的,了解了這些,也就慢慢了解了 Docker
大家可以通過下面兩個命令了解 Container 的更多詳情
docker container inspect mongo查看Container 的詳細資訊(JSON 的資料形式)
Usage: docker container inspect [OPTIONS] CONTAINER [CONTAINER...]
Display detailed information on one or more containers
Options:
-f, --format string Format the output using the given Go template
-s, --size Display total file sizes
------------------------------
docker container inspect mongo

細節內容非常多,可以簡單的看一看(一定有你一眼就能看明白的資訊),暫不用深究
docker container stats mongo查看資源是用情況(動態統計)
Usage: docker container stats [OPTIONS] [CONTAINER...]
Display a live stream of container(s) resource usage statistics
Options:
-a, --all Show all containers (default shows just running)
--format string Pretty-print images using a Go template
--no-stream Disable streaming stats and only pull the first result
--no-trunc Do not truncate output
----------------------------
docker container stats mongo

總結
這里沒有上來就和大家死背命令,現在不會,將來也不會,而是通過實際目的,結合命令補全自行查看的方式逐步認識與了解,強烈建議大家安裝命令補全,可以盡情使用 TAB,也可以在每個命令后面添加 --help 的方式隨時查看使用方式
證明 Container 就是一個行程,這樣貼近我們已有知識后,學習門檻至少矮了半截吧,最后做個游戲吧,你記住了本文的多少個命令?
靈魂追問
- 為什么資源動態統計 Mem LIMIT 是 1.941GB,這個是在哪里設定的?
原創 | 日拱一兵
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/241967.html
標籤:AI
上一篇:云原生思想 — 關鍵技術
下一篇:阿里徹底拆中臺了!
