编程知识 cdmana.com

Docker Container 就是一個程序,多新鮮啊?

大家對 Docker 都應該有了或多或少的認識了,相信大家都是從這兩張圖來粗曠的理解 Docker 及容器概念的![](https://img2020.cnblogs.com/blog/1583165/202012/1583165-20201224094233996-1237384383.png)那我們如何更輕鬆的理解容器 `Container` 呢?說白了## Container 就是一個程序比如我們 `run` 一個 `mongo` 的映象 `image`![](https://img2020.cnblogs.com/other/1583165/202012/1583165-20201224092457754-588370869.gif)然後我們通過下面命令列舉出正在執行的容器 (以下兩個命令等同)```shell# 舊命令docker ps# 新命令docker container ls```![](https://img2020.cnblogs.com/other/1583165/202012/1583165-20201224092458028-281846030.png)個人建議使用新命令> 如果你對上述等同命令有所疑惑,或者好奇動圖中的命令自動補全是怎麼實現的,以及為什麼建議使用新命令,請看 [Docker 命令自動補全](https://dayarch.top/p/docker-install-command-completion.html),在不熟悉命令之前,建議充分利用 TAB 鍵來檢視每個命令的含義,然後結合實際使用場景,慢慢記憶,這樣才根深蒂固我們 run 下面命令:```shell# top -- Display the running processes of a container (這是 TAB 補全給的命令提示說明)docker container top mongo```![](https://img2020.cnblogs.com/other/1583165/202012/1583165-20201224092458199-301821934.png)從上圖中可以看到,PID 為 2292,command 為 `mongod`。既然我們說 container 是一個程序,那我們就應該在 Host 中找得到,執行下面命令```shellps aux | grep mongod```檢視執行結果:```shellrgyb 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,這是為什麼?![](https://img2020.cnblogs.com/other/1583165/202012/1583165-20201224092458436-1701773837.png)細心的朋友可能已經從動圖中發現我是用 Mac 做的測試,Docker Platform 原生執行在 Linux 上(在 Linux 作業系統中就不會有上述問題,大家可以自行嘗試)。我是用 Docker for Mac,其實使用的是在macOS上一個特殊的 xhyve VM中執行的小型(定製)Alpine Linux,所以如果想看到這個程序,我們需要進入到 Mac 的這個 Docker VM執行下述命令:```shelldocker run -it --rm --privileged --pid=host justincormack/nsenter1```(這裡暫不展開說明,有興趣的可以看看這個 [justincormack/nsenter1 image](https://github.com/justincormack/nsenter1) 到底做了什麼,Docker for Windows 也可以用這種方式進入 Docker VM)![](https://img2020.cnblogs.com/other/1583165/202012/1583165-20201224092458727-489543682.png)到這,Container 是個程序算是證明完了,但是老gong,你證明這個有什麼用呢?> 程式設計師都對程序有基本瞭解,證明 Container 是個程序,只不過是將一個“新”東西剝開看看本質,並掛靠到你熟悉的內容上程序就是它可以獲取作業系統的哪些資源(網路/磁碟/檔案等),當停止程序,也就會自動退出,釋放相應資源。所以,接下來只要慢慢探索,一個 Container 中使用了哪些資源,是如何獲取資源的。瞭解了這些,也就慢慢了解了 Docker大家可以通過下面兩個命令瞭解 Container 的更多詳情- `docker container inspect mongo` 檢視Container 的詳細資訊(JSON 的資料形式)```shellUsage: docker container inspect [OPTIONS] CONTAINER [CONTAINER...]Display detailed information on one or more containersOptions: -f, --format string Format the output using the given Go template -s, --size Display total file sizes------------------------------docker container inspect mongo```![](https://img2020.cnblogs.com/other/1583165/202012/1583165-20201224092459293-1856300715.png)細節內容非常多,可以簡單的看一看(一定有你一眼就能看明白的資訊),暫不用深究- `docker container stats mongo` 檢視資源是用情況(動態統計)```shellUsage: docker container stats [OPTIONS] [CONTAINER...]Display a live stream of container(s) resource usage statisticsOptions: -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```![](https://img2020.cnblogs.com/other/1583165/202012/1583165-20201224092500015-364580394.gif)## 總結這裡沒有上來就和大家死背命令,現在不會,將來也不會。而是通過實際目的,結合命令補全自行檢視的方式逐步認識與瞭解。強烈建議大家安裝命令補全,可以盡情使用 TAB,也可以在每個命令後面新增 `--help` 的方式隨時檢視使用方式證明 Container 就是一個程序,這樣貼近我們已有知識後,學習門檻至少矮了半截吧。最後做個遊戲吧,你記住了本文的多少個命令?## 靈魂追問1. 為什麼資源動態統計 Mem LIMIT 是 1.941GB,這個是在哪裡設定的?[個人部落格:https://dayarch.top](https://dayarch.top)[加我微信好友](https://mp.weixin.qq.com/s/G7BXuZh0Qh1-mE6ts4LJqQ), 進群娛樂學習交流,備註「進群」> ### 歡迎持續關注公眾號:「日拱一兵」> - 前沿 Java 技術乾貨分享 > - 高效工具彙總 | 回覆「工具」> - 面試問題分析與解答 > - 技術資料領取 | 回覆「資料」> 以讀偵探小說思維輕鬆趣味學習 Java 技術棧相關知識,本著將複雜問題簡單化,抽象問題具體化和圖形化原則逐步分解技術問題,技術持續更新,請持續關注......---![](https://img2020.cnblogs.com/other/1583165/202012/1583165-20201224092500802-2081100

版权声明
本文为[itread01]所创,转载请带上原文链接,感谢
https://www.itread01.com/content/1608793802.html

Scroll to Top