2020年12月24日星期四

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

大家对 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 containersOptions: -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 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

总结

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

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

灵魂追问

  1. 为什么资源动态统计 Mem LIMIT 是 1.941GB,这个是在哪里设置的?
    个人博客:https://dayarch.top
    加我微信好友, 进群娱乐学习交流,备注「进群」

欢迎持续关注公众号:「日拱一兵」

  • 前沿 Java 技术干货分享
  • 高效工具汇总 | 回复「工具」
  • 面试问题分析与解答
  • 技术资料领取 | 回复「资料」

以读侦探小说思维轻松趣味学习 Java 技术栈相关知识,本着将复杂问题简单化,抽象问题具体化和图形化原则逐步分解技术问题,技术持续更新,请持续关注......










原文转载:http://www.shaoqun.com/a/502838.html

跨境电商:https://www.ikjzd.com/

c2c模式:https://www.ikjzd.com/w/1576

拍拍网:https://www.ikjzd.com/w/2205


大家对Docker都应该有了或多或少的认识了,相信大家都是从这两张图来粗旷的理解Docker及容器概念的那我们如何更轻松的理解容器Container呢?说白了Container就是一个进程比如我们run一个mongo的镜像image然后我们通过下面命令列举出正在运行的容器(以下两个命令等同)#旧命令dockerps#新命令dockercontainerls个人建议使用新命令如果你对上述等同命令有所
宝付:宝付
贝恩:贝恩
独立站建站平台BigCommerce上市 市值达48亿美元!:独立站建站平台BigCommerce上市 市值达48亿美元!
金子山攻略?连山金子山门票团购优惠吗?:金子山攻略?连山金子山门票团购优惠吗?
马尔代夫有哪些美丽的岛屿?:马尔代夫有哪些美丽的岛屿?

没有评论:

发表评论