网站首页 > 教程文章 正文
前面学习了容器运行时containerd的基本使用,containerd的架构,namespace, cgroup, rootfs等容器背后的技术。 本节做一个阶段性的小节。此时,如果有人问"容器是什么?",我们可能会给出以下的回答:
- 容器实际上是一种特殊的进程。它使用namespace进行隔离,使用cgroup进行资源限制,并且它还以联合文件系统的形式挂载了单独的rootfs。
- 为了更方便的准备运行容器所需的资源和管理容器的生命周期,还需要容器引擎如containerd。
- 容器镜像实际上就是一种特殊的文件系统,它包含容器运行所需的程序、库、资源配置等所有内容,构建后内容保持不变。在启动容器时镜像会挂载为容器的rootfs。
既然容器仅仅是一种特殊的进程,下面我们实际去探索一下它的存在。继续前面启动的redis容器为例,可以使用nerdctl inspect <container id>和ctr c info <container id>查看一下容器的信息。 下面的命令可以打印出容器在宿主机上的进程id:
nerdctl inspect 8102f | grep Pid
"Pid": 27582,
容器作为一种特殊的操作系统进程,可以在系统的/proc/<process-id>中感受它的存在:
ls /proc/27582
attr auxv clear_refs comm cpuset environ fd gid_map limits map_files mem mounts net numa_maps oom_score pagemap projid_map sched sessionid smaps stat status task uid_map
autogroup cgroup cmdline coredump_filter cwd exe fdinfo io loginuid maps mountinfo mountstats ns oom_adj oom_score_adj personality root schedstat setgroups stack statm syscall timers wchan
/proc/27582/ns目录下对应了容器的各个namespace:
ll /proc/27582/ns
total 0
lrwxrwxrwx 1 ipc -> ipc:[4026532172]
lrwxrwxrwx 1 mnt -> mnt:[4026532170]
lrwxrwxrwx 1 net -> net:[4026532175]
lrwxrwxrwx 1 pid -> pid:[4026532173]
lrwxrwxrwx 1 user -> user:[4026531837]
lrwxrwxrwx 1 uts -> uts:[4026532171]
/proc/27582/cgroup文件对应了容器的11种cgroup:
cat /proc/27582/cgroup
11:hugetlb:/default/8102f7fbee26792830e54e80b3488714ac559e092c59beb2e311cf8e88f475d6
10:perf_event:/default/8102f7fbee26792830e54e80b3488714ac559e092c59beb2e311cf8e88f475d6
9:devices:/default/8102f7fbee26792830e54e80b3488714ac559e092c59beb2e311cf8e88f475d6
8:memory:/default/8102f7fbee26792830e54e80b3488714ac559e092c59beb2e311cf8e88f475d6
7:freezer:/default/8102f7fbee26792830e54e80b3488714ac559e092c59beb2e311cf8e88f475d6
6:cpuacct,cpu:/default/8102f7fbee26792830e54e80b3488714ac559e092c59beb2e311cf8e88f475d6
5:blkio:/default/8102f7fbee26792830e54e80b3488714ac559e092c59beb2e311cf8e88f475d6
4:pids:/default/8102f7fbee26792830e54e80b3488714ac559e092c59beb2e311cf8e88f475d6
3:net_prio,net_cls:/default/8102f7fbee26792830e54e80b3488714ac559e092c59beb2e311cf8e88f475d6
2:cpuset:/default/8102f7fbee26792830e54e80b3488714ac559e092c59beb2e311cf8e88f475d6
1:name=systemd:/default/8102f7fbee26792830e54e80b3488714ac559e092c59beb2e311cf8e88f475d6
而对于rootfs,容器是使用mount namespace实现的。mount namespace与挂载操作结合使用,处于不同mount namespace中的进程看到的是不同的挂载点视图。 这样容器进程的rootfs就和宿主机系统以及其他容器进程隔离区分开来了。
- 上一篇: 什么是容器技术,它解决了什么问题?
- 下一篇: 容器和虚拟机究竟有什么不同 ?
猜你喜欢
- 2025-01-06 什么是容器编排及容器编排是怎么工作的?
- 2025-01-06 人的心灵就像一个容器,懂得时长清理沉淀,只留清明
- 2025-01-06 深入理解Spring4框架(二)--容器
- 2025-01-06 特种设备—压力容器的定义
- 2025-01-06 云服务器与容器的区别和联系
- 2025-01-06 精选文章-人生就是一个容器
- 2025-01-06 食量大小与容器有关
- 2025-01-06 家是生活的容器
- 2025-01-06 经常说的容器板是什么东西?09MnNiDR又是什么?
- 2025-01-06 压力容器与气瓶基本知识与安全培训
- 最近发表
- 标签列表
-
- location.href (44)
- document.ready (36)
- git checkout -b (34)
- 跃点数 (35)
- 阿里云镜像地址 (33)
- qt qmessagebox (36)
- md5 sha1 (32)
- mybatis plus page (35)
- semaphore 使用详解 (32)
- update from 语句 (32)
- vue @scroll (38)
- 堆栈区别 (33)
- 在线子域名爆破 (32)
- 什么是容器 (33)
- sha1 md5 (33)
- navicat导出数据 (34)
- 阿里云acp考试 (33)
- 阿里云 nacos (34)
- redhat官网下载镜像 (36)
- srs服务器 (33)
- pico开发者 (33)
- https的端口号 (34)
- vscode更改主题 (35)
- 阿里云资源池 (34)
- os.path.join (33)