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

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

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


微信图片_20220511190757.png

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


Container 就是一个进程


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


微信图片_20220511190832.gif


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


# 旧命令
docker ps
# 新命令
docker container ls


微信图片_20220511190903.png


个人建议使用新命令


如果你对上述等同命令有所疑惑,或者好奇动图中的命令自动补全是怎么实现的,以及为什么建议使用新命令,请看 Docker 命令自动补全,在不熟悉命令之前,建议充分利用 TAB 键来查看每个命令的含义,然后结合实际使用场景,慢慢记忆,这样才根深蒂固


我们 run 下面命令:


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


微信图片_20220511190941.png


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


微信图片_20220511191109.png



细心的朋友可能已经从动图中发现我是用 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)


微信图片_20220511191221.png


到这,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


微信图片_20220511191305.png


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


  • 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


微信图片_20220511191342.gif


总结


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


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


灵魂追问


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


相关文章
|
9天前
|
存储 Linux Docker
CentOS 7.6安装Docker实战案例及存储引擎和服务进程简介
关于如何在CentOS 7.6上安装Docker、介绍Docker存储引擎以及服务进程关系的实战案例。
47 3
CentOS 7.6安装Docker实战案例及存储引擎和服务进程简介
|
14天前
|
缓存 Serverless Docker
函数计算产品使用问题之怎么修改Docker守护进程配置
函数计算产品作为一种事件驱动的全托管计算服务,让用户能够专注于业务逻辑的编写,而无需关心底层服务器的管理与运维。你可以有效地利用函数计算产品来支撑各类应用场景,从简单的数据处理到复杂的业务逻辑,实现快速、高效、低成本的云上部署与运维。以下是一些关于使用函数计算产品的合集和要点,帮助你更好地理解和应用这一服务。
|
23天前
|
Kubernetes Shell 测试技术
在Docker中,可以在一个容器中同时运行多个应用进程吗?
在Docker中,可以在一个容器中同时运行多个应用进程吗?
|
23天前
|
监控 Linux API
在Docker中,docker run指令执行后,生成了哪些进程?
在Docker中,docker run指令执行后,生成了哪些进程?
|
17天前
|
Docker 容器
【Azure 应用服务】App Service for Container 无法拉取Docker Hub中的镜像替代方案
【Azure 应用服务】App Service for Container 无法拉取Docker Hub中的镜像替代方案
|
18天前
|
存储 Linux Docker
【Azure 应用服务】应用服务中发布Docker Container,如何添加卷(如Azure File Share)以便永久存储文件
【Azure 应用服务】应用服务中发布Docker Container,如何添加卷(如Azure File Share)以便永久存储文件
|
2月前
|
存储 Docker 容器
docker查看日志:docker service logs 与 docker container logs
docker查看日志:docker service logs 与 docker container logs
93 0
|
4月前
|
应用服务中间件 nginx Docker
Docker中报错 Error response from daemon: Conflict. The container name “/nginx01“ is already in use
在尝试运行 `docker run -d --name nginx01 -p 3344:80 nginx` 时遇到错误。问题源于已有名为 nginx01 的容器未正确终止,造成命名冲突。解决方法:首先使用 `docker ps -a` 查看所有容器,然后删除现有 nginx01 容器,执行 `docker rm <container_id>`(替换 `<container_id>` 为实际容器ID),最后再运行 `docker run` 命令即可。
192 0
|
11月前
|
Linux Docker 容器
在Docker守护进程停机期间保持容器运行(即重启Docker时,正在运行的容器不会停止)
在Docker守护进程停机期间保持容器运行(即重启Docker时,正在运行的容器不会停止)
326 0
|
4月前
|
缓存 自然语言处理 Docker
[Docker] DevContainer高效开发(第一篇):基于remote container开发
VS Code的Dev Containers简化了Python的容器化开发,将开发环境与应用一同打包在Docker中,消除环境配置问题。这种方式使得多语言、多版本开发变得整洁高效。
313 0