H
H
Published on 2026-02-27 / 12 Visits
0
0

容器化 (Containerize) 运营

主要思路

容器化是一种将应用程序及其运行所需的依赖(如库文件、运行时、系统工具和配置文件)打包在一起的技术,使应用能够在不同环境中保持一致运行。

其核心思路是:把应用和环境一起封装,而不是只部署代码。传统部署方式往往依赖目标服务器已有的系统环境,容易出现“在我电脑上能跑”的问题;而容器通过镜像(Image)将运行环境标准化,使开发、测试、生产环境保持一致。

容器化基于操作系统级虚拟化技术,通过共享宿主机内核实现进程隔离(如使用 Linux 的 namespace 和 cgroups)。与虚拟机相比,容器更轻量、启动更快、资源占用更少,因为它不需要为每个实例运行完整的操作系统。

容器化工具

容器引擎(负责运行容器)

Docker
最流行的容器平台,提供完整的镜像构建、分发和运行能力,生态成熟,学习成本低,是容器化入门的主流选择。

Podman
无守护进程(daemonless)架构,支持 Rootless 模式,更安全。命令与 Docker 高度兼容,常用于企业 Linux 环境。

containerd
轻量级容器运行时,是 Docker 的核心组件之一,也被 Kubernetes 直接使用,偏底层。

CRI-O
专为 Kubernetes 设计的轻量运行时,实现 Kubernetes CRI 接口。

容器编排工具(负责管理大规模容器)

Kubernetes(K8s)
当前最主流的容器编排平台,支持自动部署、扩缩容、滚动更新和自愈能力。

Docker Swarm
Docker 官方的集群管理工具,简单易用,但生态规模不及 Kubernetes。

OpenShift
基于 Kubernetes 的企业级平台,增强安全和管理能力。

Podman vs Docker

Docker 依赖一个持续运行的后台服务;Podman 没有守护进程,容器直接作为子进程运行,更接近 Linux 原生模型。

如果使用 RHEL/Fedora 系统建议使用 Podman

常用 Podman 思路

我们考虑将容器合并为一个总网关

Nginx Proxy Manager

然后由 Nginx Proxy Manager 负责引导各个容器

Podman 换源

/etc/containers/registry.conf

[[registry]]
prefix = "docker.io"
location = "docker.io"

[[registry.mirror]]
location = "docker.m.ixdev.cn"

[[registry.mirror]]
location = "docker.m.daocloud.io"

[[registry.mirror]]
location = "dockerproxy.net"

[[registry.mirror]]
location = "xdark.top"

[[registry]]
prefix = "ghcr.io"
location = "ghcr.io"

[[registry.mirror]]
location = "ghcr.nju.edu.cn"

[[registry]]
prefix = "quay.io"
location = "quay.io"

Podman 网络

创建 podman network 使用方案:

podman network create core --interface-name core --ipv6

sudo sysctl -w net.ipv6.conf.all.forwarding=1

sudo nano /etc/firewalld/firewalld.conf IPv6_rpfilter=loose

Pod 管理

Pod 是 Kubernetes 中最小的部署单元(smallest deployable unit)。它表示一组共享网络和存储资源的容器集合

Quadlet

在 Linux 服务器环境中,长期运行的服务通常由 systemd 管理(如 nginx.service)。

传统方式运行容器:

podman run -d nginx

这种方式:

  • 不方便开机自启

  • 服务依赖关系难管理

  • 不易统一纳入 systemd 生态

Quadlet 解决了这个问题,使容器:

  • 支持开机自动启动

  • 支持 systemctl 管理

  • 支持依赖顺序控制

  • 与系统服务统一管理

创建文件:

~/.config/containers/systemd/nginx.container

内容:

[Unit]
Description=Nginx Container

[Container]
Image=docker.io/library/nginx:latest
PublishPort=8080:80

[Install]
WantedBy=default.target

重新加载:

systemctl --user daemon-reload
systemctl --user start nginx

现在 nginx 就作为 systemd 服务运行了。

容器化哲学思路

容器化运营不仅是一种技术选择,更是一种工程哲学。它强调“环境即产品”的理念,即应用程序不再依赖外部不可控的系统环境,而是将运行所需的一切依赖、配置与约束一并封装。这种思路改变了传统“代码交付”的方式,转向“运行单元交付”,从而实现真正的可移植性与一致性。开发、测试、生产之间的边界被统一,减少了环境差异带来的不确定性。

容器化的核心理念之一是不可变基础设施(Immutable Infrastructure)。在容器化运营中,系统不鼓励直接修改线上环境,而是通过重新构建镜像、替换容器来完成升级与修复。每一次发布都是一次全量替换,而不是在旧系统上打补丁。

另一个重要理念是声明式管理(Declarative Management)。无论是 Dockerfile、Kubernetes YAML,还是基于 systemd 的容器配置,本质上都在描述“系统应该处于什么状态”,而不是“执行哪些步骤”。系统通过调度与控制循环自动逼近期望状态。

容器化运营还强调隔离与最小化原则。每个服务独立封装,最小依赖,最小权限运行(如 rootless 模式)。这不仅提高了安全性,也增强了系统的模块化程度。服务之间通过明确的接口通信,而不是共享环境变量或系统资源,从而提升整体架构的可维护性。

从更宏观的角度看,容器化体现的是一种“以变应变”的思维方式。它接受系统会频繁变化这一事实,通过标准化封装、自动化编排与弹性伸缩来应对不确定性。应用可以快速部署、快速扩展、快速回滚,使技术体系更加敏捷。

因此,容器化运营的本质,不只是运行容器,而是通过标准化、不可变性、声明式控制与最小化原则,构建一个可复制、可扩展、可演进的现代软件运行环境。


Comment