找回密码
立即注册
搜索
热搜: Java Python Linux Go
发回帖 发新帖

532

积分

0

好友

70

主题
发表于 19 小时前 | 查看: 2| 回复: 0

众所周知,Proxmox VE(以下简称PVE)长期以来都无法原生运行Docker容器。常见的解决方案要么是部署一个虚拟机并在其中安装Docker,要么是在LXC容器内运行Docker,但这些都属于“套娃”方案,会带来额外的性能开销。如今,PVE已能直接通过OCI标准运行Docker镜像,无需再“套娃”,从而减少性能损失。

一、OCI、Docker与LXC的关系

OCI(Open Container Initiative)是一套开放的容器标准,而Docker是最流行的OCI实现之一。技术细节较为复杂,但核心要点是:Docker镜像基于OCI标准构建,因此我们可以通过兼容OCI的运行环境来运行它。

需要特别注意:这里讨论的是运行“Docker镜像”,而非“Docker”。Docker是一整套完整的容器运行时和管理工具,可以在其上运行Docker镜像。但Docker镜像本身,作为遵循OCI标准的打包格式,并不局限于只能在Docker环境中运行。前者是软件/运行时,后者是容器镜像格式。我们通常所说的“运行Docker”,准确说是在Docker引擎上运行Docker镜像。

PVE传统上只支持LXC容器,不支持Docker容器,原本也不直接支持OCI。但在近期的更新中,官方添加了对OCI镜像仓库的支持,能够通过OCI标准来创建LXC容器。通俗来讲,就是可以将Docker镜像通过OCI接口转换成PVE能够识别的LXC容器模板。因此,PVE依然不直接支持Docker引擎,但能够运行Docker镜像,其本质是运行一个由Docker镜像转换而来的LXC容器。

二、更新PVE系统

如上所述,对OCI的支持是新版本特性,因此需要将PVE更新至最新版本。目前最新正式版为9.1.1。如果你的PVE还是8.x版本,需要先升级到9.0。若已是9.x版本,直接在系统内进行常规升级即可。本文演示环境已升级至9.1.1。

图片

三、下载Docker镜像

本文以部署ddns-go的Docker镜像为例。你可以在Docker Hub上找到镜像名称,本例中官方镜像名为jeessy/ddns-go。完整的Docker镜像地址通常为docker.io/jeessy/ddns-go,但由于PVE默认的镜像仓库地址就是docker.io,因此在下载时可以直接搜索jeessy/ddns-go。如果你使用了其他镜像仓库,则需要补全完整的镜像地址。

图片

  1. 进入PVE管理界面,导航到“数据中心” -> “存储” -> 选择你的存储 -> “CT模板”。
  2. 点击“Pull from OCI Registry”按钮。
  3. 在弹出的窗口中,输入jeessy/ddns-go,然后点击旁边的“Query Tags”来查询该镜像的所有标签。
  4. 通常选择latest标签即可,点击“Download”开始下载。
  5. 下载完成后,你将在CT模板列表中看到对应的镜像。

图片

图片

图片

四、创建LXC容器

  1. 点击右上角的“创建CT”。
  2. 常规选项:自定义“CT ID”和“主机名”。下方的“无特权的容器”和“嵌套”选项如无特殊需求保持默认勾选。密码可简单设置,后续基本用不到。
  3. 模板选项:选择我们刚刚下载好的ddns-go Docker镜像。

图片

图片

图片

  1. 磁盘选项:根据实际需要分配磁盘大小。ddns-go这类应用所需空间很小,分配0.5GB也绰绰有余。这里的“磁盘”相当于容器的根文件系统挂载点。类似于Docker,如果不做数据持久化,数据会随容器删除而丢失;而在LXC中,所有数据默认存储在这个分配的磁盘空间中。

图片

  1. CPU内存选项:按需分配。这里与Docker的资源限制模式不同:Docker是限制容器最多能使用多少资源;而PVE的LXC是直接为容器分配固定的资源份额,容器可以自由使用这些资源,不受其他容器或虚拟机影响(除非宿主机资源耗尽)。如果宿主机没有交换分区(swap),可以将“交换”设置为0。

图片

图片

  1. 网络选项:LXC容器拥有独立的IP地址(在路由器上可见),这与Docker默认的NAT网络模式(需要端口映射)不同。根据你的网络环境选择DHCP或配置静态IP(IPv4/IPv6)。

图片

  1. DNS等选项保持默认即可。
  2. 检查所有配置无误后,点击“完成”以创建容器。

图片

图片

五、配置LXC容器

容器创建后,不要立即启动,否则控制台可能会报错无法操作。

图片

  1. 进入该LXC容器的“选项”页面。
  2. 将“控制台”模式从默认的“TTY”改为“Shell”。
  3. 如果需要,可以在“Environment”字段中添加环境变量。本例中ddns-go无需额外变量,故可不填。
  4. 注意“Entrypoint”字段,这相当于容器内部的启动命令。从中可以看到ddns-go默认使用9876端口,后续访问Web界面需要使用此端口。

图片

图片

  1. 如需挂载额外目录或直通硬件设备(如核显),可以在“资源”选项卡下的“挂载点”和“设备直通”中进行配置。

图片

  1. 配置完成后,启动LXC容器。
  2. 现在,你可以通过容器的IP地址加上端口号(本例为http://<容器IP>:9876)直接访问ddns-go的Web管理界面。当然,你也可以通过“控制台”连接到容器内部进行操作。

图片

图片

六、总结与补充

这种方法本质上是LXC容器的部署,只是利用了OCI接口将Docker镜像转换为PVE可用的LXC容器模板。除了镜像获取和初始配置略有不同,其管理、备份和运维方式与普通LXC容器完全一致。

关于备份:既然它现在是一个标准的LXC容器,可以直接使用PVE内置的备份功能来备份整个容器。

对于更广泛的云原生应用部署和管理,这种集成方式为在运维层面统一管理虚拟机和容器提供了新的可能性。




上一篇:CVE-2025-55182 漏洞深度剖析:Next.js Server Actions 的完整利用链与防护方案
下一篇:百度后端实习面试高频问题深度剖析:MySQL索引、Redis缓存与MQ实战
您需要登录后才可以回帖 登录 | 立即注册

手机版|小黑屋|网站地图|云栈社区 ( 苏ICP备2022046150号-2 )

GMT+8, 2025-12-8 23:42 , Processed in 1.002793 second(s), 44 queries , Gzip On.

Powered by Discuz! X3.5

© 2025-2025 云栈社区.

快速回复 返回顶部 返回列表