2026西湖龙井茶官网DTC发售:茶农直供,政府溯源防伪到农户家
“你一直在用那个词”
澄清操作系统层面的容器误解
在我们编写一行代码之前,必须驱散那些流行术语制造的迷雾。
容器究竟是什么
你已经听过上百遍的营销定义是:“容器是一个可执行的软件单元,其依赖项被打包在一起。” 这个说法并不错误,但它对你理解机器上实际发生的事情毫无帮助。
以下是操作系统层面的真相:容器是一个进程(或一组进程树),内核在运行它时限制了它所能看到的命名空间,并通过控制组(cgroup)对其可消耗的资源设置了上限。 这就是全部奥秘所在。没有虚拟机监视器(hypervisor),没有客户机内核,也没有虚拟化的硬件。只是一个被精心施加了一组约束条件的普通进程。
本文其余所有内容都是为了证明这一核心观点。
启动一个简单的 HTTPD 容器
我使用以下 podman 命令启动了一个资源受限的 HTTPD 容器。
podman run -d \
--name my-limited-httpd \
--replace \
--memory=512m \ # 硬性内存上限
--memory-swap=512m \ # 交换空间上限等于内存 = 不允许使用交换空间
--cpus=1.5 \ # CPU 配额:相当于 1.5 个核心的 CPU 时间
--cpu-shares=512 \ # 资源争用时的相对 CPU 权重
--pids-limit=100 \ # 此容器中最多允许 100 个进程/线程
--blkio-weight=500 \ # 相对块设备 I/O 权重
-p 8081:80 \
registry.access.redhat.com/ubi8/httpd-24
这会以指定的资源限制启动一个容器。你可以通过以下命令检查
krish-local:~ # pstree -pT
systemd(1)─┬─NetworkManager(944)
├─agetty(1011)
├─agetty(1012)
├─auditd(835)
├─chronyd(1007)
# ConMon 是容器监控器。HTTPD 是我们运行的容器
├─conmon(13669)───httpd(13684)─┬─cat(13727)
│ ├─cat(13728)
│ ├─cat(13729)
│ ├─cat(13730)
│ ├─httpd(13731)
│
免责声明:本文内容来自互联网,该文观点不代表本站观点。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,请到页面底部单击反馈,一经查实,本站将立刻删除。