【Java】Docker Container 就是一个进程,多新鲜啊?

大家对 Docker 都应该有了或多或少的认识了,相信大家都是从这两张图来粗旷的理解 Docker 及容器概念的

【Java】Docker Container 就是一个进程,多新鲜啊?

那我们如何更轻松的理解容器 Container 呢?说白了

Container 就是一个进程

比如我们 run 一个 mongo 的镜像 image

然后我们通过下面命令列举出正在运行的容器 (以下两个命令等同)

# 旧命令

docker ps

# 新命令

docker container ls

【Java】Docker Container 就是一个进程,多新鲜啊?

个人建议使用新命令

我们 run 下面命令:

# top      -- Display the running processes of a container (这是 TAB 补全给的命令提示说明)

docker container top mongo

【Java】Docker Container 就是一个进程,多新鲜啊?

从上图中可以看到,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,这是为什么?

【Java】Docker 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)

【Java】Docker Container 就是一个进程,多新鲜啊?

到这,Container 是个进程算是证明完了,但是老gong,你证明这个有什么用呢?

进程就是它可以获取操作系统的哪些资源(网络/磁盘/文件等),当停止进程,也就会自动退出,释放相应资源。所以,接下来只要慢慢探索,一个 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

【Java】Docker Container 就是一个进程,多新鲜啊?

细节内容非常多,可以简单的看一看(一定有你一眼就能看明白的信息),暂不用深究

  • 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

【Java】Docker Container 就是一个进程,多新鲜啊?

总结

这里没有上来就和大家死背命令,现在不会,将来也不会。而是通过实际目的,结合命令补全自行查看的方式逐步认识与了解。强烈建议大家安装命令补全,可以尽情使用 TAB,也可以在每个命令后面添加 --help 的方式随时查看使用方式

证明 Container 就是一个进程,这样贴近我们已有知识后,学习门槛至少矮了半截吧。最后做个游戏吧,你记住了本文的多少个命令?

灵魂追问

  1. 为什么资源动态统计 Mem LIMIT 是 1.941GB,这个是在哪里设置的?

日拱一兵 | 原创

以上是 【Java】Docker Container 就是一个进程,多新鲜啊? 的全部内容, 来源链接: utcz.com/a/91337.html

回到顶部