虚拟化与母鸡

Proxmox VE LXC 容器教程:下载模板、创建容器、分配 IP 与限制 CPU/内存/磁盘/带宽

7 个步骤 8 分钟阅读 8 次阅读 0
本文目录

并不是所有业务都需要一台完整的虚拟机。Proxmox VE 中的 LXC 容器与宿主机共享内核,一两秒即可启动,占用的内存和磁盘也远少于 KVM 虚拟机,非常适合在独立服务器或宿主机(母鸡)上运行网站、数据库、监控、代理和内部工具。本文介绍如何下载容器模板、通过 Web 界面和 pct 命令创建容器、为容器分配公网或内网 IP、限制 CPU、内存、磁盘和带宽、在容器中运行 Docker,以及备份。

LXC 容器只能运行 Linux,并且与宿主机共享内核:无法在容器内加载自己的内核模块,也无法修改大部分内核参数。如需运行 Windows、自定义内核,或者要出售给不受信任的客户,请使用 KVM 虚拟机。

LXC 容器还是 KVM 虚拟机?

LXC 容器KVM 虚拟机
操作系统仅支持 LinuxLinux、Windows、BSD
资源开销极低,数秒内启动较高,需要完整启动操作系统
隔离性共享内核完全隔离
内核调优与模块受限完全可控
典型用途自用服务、大量小型网站客户 VPS、Windows、Docker 宿主机

步骤 1:下载容器模板

模板是预先制作好的根文件系统,提供 Debian、Ubuntu、Rocky Linux、AlmaLinux、Alpine 等系统。在 Web 界面中打开 local → CT Templates → Templates,或者在宿主机上使用命令行。模板文件名包含版本号,请从列表中复制准确的名称。

pveam update
pveam available --section system | grep -E 'debian-12|ubuntu-24.04|rockylinux-9|alpine'
pveam download local debian-12-standard_12.7-1_amd64.tar.zst   # use the exact name from the list
pveam list local

步骤 2:创建容器

在 Web 界面中点击 Create CT,按向导依次填写:主机名和 root 密码(或 SSH 公钥)、模板、磁盘大小、CPU 核心数、内存和网络。保持勾选 Unprivileged container(非特权容器);它会把容器内的 root 映射为宿主机上的非特权用户,安全性高得多。用命令行创建同样的容器:

pct create 101 local:vztmpl/debian-12-standard_12.7-1_amd64.tar.zst \
  --hostname web01 \
  --unprivileged 1 \
  --cores 2 --memory 2048 --swap 512 \
  --rootfs local-lvm:20 \
  --net0 name=eth0,bridge=vmbr0,ip=203.0.113.11/24,gw=203.0.113.1 \
  --nameserver 1.1.1.1 \
  --ssh-public-keys /root/.ssh/authorized_keys \
  --features nesting=1 \
  --onboot 1

pct start 101
pct enter 101          # open a root shell inside the container
pct list

步骤 3:网络配置:公网 IP 或内网 NAT

公网 IP:将容器接入承载公网的网桥(通常是 vmbr0),并为其分配一个附加 IP 以及该子网的网关,方法与虚拟机完全相同(参见为 Proxmox 虚拟机分配公网 IP)。如果附加 IP 是路由到指定 MAC 地址的,请在 net0 选项中用 hwaddr= 设置该 MAC。

内网 NAT:如需让多个容器共用宿主机的单个 IP,可以将它们接入 vmbr1 这样的内网网桥,再转发所需端口,具体方法参见 Proxmox VE NAT 网络配置:

pct set 102 --net0 name=eth0,bridge=vmbr1,ip=10.10.10.12/24,gw=10.10.10.1
pct reboot 102

步骤 4:限制 CPU、内存、磁盘和带宽

所有限制都可以在容器运行时修改,大部分会立即生效。

# CPU: 2 visible cores, but at most 1.5 cores of total CPU time
pct set 101 --cores 2 --cpulimit 1.5

# Memory and swap (MB)
pct set 101 --memory 1024 --swap 256

# Grow the root disk by 10 GB (disks can grow online but not shrink)
pct resize 101 rootfs +10G

# Bandwidth: rate is in MB/s, so 12.5 is roughly 100 Mbps
pct set 101 --net0 name=eth0,bridge=vmbr0,ip=203.0.113.11/24,gw=203.0.113.1,rate=12.5

pct config 101

步骤 5:在容器中运行 Docker

启用嵌套(nesting)后,Docker 可以在非特权容器中运行。部分镜像还需要 keyctl 特性。

pct set 101 --features nesting=1,keyctl=1
pct reboot 101
pct enter 101
# inside the container, install Docker as usual (see our Docker guide)

对于生产环境的 Docker 宿主机,尤其是运行大量容器或使用特殊存储驱动的场景,KVM 虚拟机仍然是更稳妥的选择。

步骤 6:备份、快照与克隆

# Snapshot before risky changes (requires LVM-thin, ZFS or Ceph storage)
pct snapshot 101 before-upgrade
pct rollback 101 before-upgrade

# Full backup with compression (see our Proxmox backup guide for schedules)
vzdump 101 --mode snapshot --storage local --compress zstd

# Clone a container you have prepared as a base
pct clone 101 105 --hostname web05 --full 1

关于定时备份和恢复,请参见 Proxmox VE 备份与快照教程。

常见问题

容器无法访问外网?

检查 pct config 中的 IP、前缀长度和网关,确认网桥正确,并检查容器内 /etc/resolv.conf 中的 DNS 设置。在容器内先测试 ping -c3 1.1.1.1,再测试 ping -c3 google.com,以区分是路由问题还是 DNS 问题。同时确认 Proxmox 防火墙没有拦截该容器。

以后可以把容器转换成虚拟机吗?

不能直接转换。需要新建一台虚拟机,再迁移数据或应用,例如使用 rsync(参见服务器迁移教程)。

一台服务器能运行多少个容器?

这取决于业务负载,而不是 Proxmox 本身。由于容器开销很小,一台 64 GB 内存的服务器可以轻松承载几十个小型网站或服务。请留意宿主机的内存、磁盘 I/O 和 CPU steal,并为高峰预留余量。

如果按以上步骤操作后问题仍未解决,请提交工单联系 IMIDC 7×24 技术支持,并附上服务器 IP、Proxmox VE 版本、容器 ID 及其配置(pct config ID)和完整报错信息,方便工程师快速定位。

这篇文章有帮助吗?

相关教程