虛擬化與母雞

Proxmox VE LXC 容器教程:下載模板、建立容器、分配 IP 與限制 CPU/記憶體/磁碟/頻寬

7 個步驟 8 分鐘閱讀 11 次閱讀 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)和完整報錯資訊,方便工程師快速定位。

這篇文章有幫助嗎?

相關教程