云镜像,虚拟机镜像怎么转换成容器镜像

为什么要格式转换?

云镜像是云服务器 / 虚拟机的系统磁盘镜像,包含完整的操作系统、预装软件等,用于快速创建云主机 / 虚拟机。

常见格式及场景:

  • QCOW2:KVM/Kubevirt、OpenStack 等开源虚拟化环境的主流格式(轻量级、支持写时复制);
  • RAW:原始磁盘镜像格式(无压缩,性能高,体积大);
  • VMDK:VMware 虚拟化环境的专用格式;
  • VHD/VHDX:微软 Hyper-V 虚拟化环境的格式;
  • AMI:AWS 云服务器的专用镜像格式;
  • 国内云厂商格式:阿里云 / 腾讯云等会基于上述格式做适配(如阿里云的镜像支持导出为 RAW/QCOW2/VHD 等)。

容器镜像是轻量级的应用运行环境镜像 ,仅包含应用、依赖库和基础运行时(无完整操作系统内核),用于容器(Docker、K8s)部署。主流格式是 OCI 标准格式(Open Container Initiative,容器镜像的通用标准):

  • 实际存储形式:由「镜像清单(manifest)+ 分层文件系统(layer)+ 配置文件」组成,分层存储(复用层以节省空间);
  • 导出 / 分发格式:通常打包为 tar 压缩包 (比如 docker save 导出的镜像为 tar 包);
  • 兼容工具:Docker、Podman、Containerd 等容器工具均支持 OCI 格式。

虽然都是镜像但格式不同用于不同的场景,不管是虚机还是容器读取镜像都有自己的标准,只能读取符合自己标准格式的数据,所以如果格式不对报错无法启动。

系统镜像转换为容器镜像

img,qcow2这种格式的系统镜像是不能被容器读取的,标准流程为系统镜像数据导出-->制作容器镜像-->容器启动测验。

先安装工具

复制代码
sudo apt update && sudo apt install -y libguestfs-tools

会用到的是guestfish,guestfishlibguestfs 工具集的组件(用于操作虚拟机镜像,如 QCOW2、RAW 等云镜像格式)

根据情况选择要转换的镜像,提前创建好数据存放的目录,我的是/tmp/cloud-rootfs,一开始忘记创建了

复制代码
guestfish -a jammy-server-cloudimg-arm64-bak.img   #指定要操作的镜像
run    #激活镜像
mount /dev/sda1 /  #挂载镜像内的根分区到工具的虚拟目录
copy-out / /tmp/cloud-rootfs   #从镜像内复制文件到本地系统

查看数据是否存在

复制代码
ls /tmp/cloud-rootfs/

提取出来之后接着重新制作镜像,这个根据自己的需求是否要调整Dockerfile,我这里直接完全复刻就行。

在数据导出的目录创建Dockerfile,使用以下构建即可

复制代码
root@kubevirt1910b:~# cat /tmp/cloud-rootfs/Dockerfile
FROM scratch

COPY . /

CMD ["/bin/bash"]

执行构建操作

复制代码
docker build -t ubuntu20_04:v2 .

查看做好的镜像

复制代码
docker images | grep ubuntu20_04

接着把docker的镜像导入到containerd

复制代码
sudo docker save -o /tmp/ubuntu20_04_v2.tar ubuntu20_04:v2
sudo ctr -n k8s.io images import /tmp/ubuntu20_04_v2.tar docker.io/library/ubuntu20_04:v2
sudo ctr -n k8s.io images list | grep ubuntu20_04
复制代码
sudo ctr -n k8s.io images list | grep ubuntu20_04

完成之后就可以使用容器或者k8s进行调用了。

相关推荐
王六米。4 分钟前
RAG知识库建设 文档解析 切分与索引如何衔接
服务器·前端·网络·企业数字化转型·智钳智能盒子
.冰块.25 分钟前
Docker 镜像深度学习:分层 Copy‑on‑Write、Dockerfile 语法、Harbor 私有仓库实操
docker·容器·harbor·镜像·dockerfile·images
szephyr36 分钟前
Docker 镜像瘦身实战:从 1.2GB 压到 85MB 的完整过程
docker·容器·部署·多阶段构建·镜像优化
小马同学-42 分钟前
Containerd入门:架构原理与安装部署
容器·containerd
wuyk5551 小时前
【Socket 进阶之路】第 7 章 IO 多路复用 select & poll 完整实战|多 fd 监听、超时等待、优缺点横向对比
服务器·开发语言·网络·数据库·物联网
人工智能培训1 小时前
大语言模型:从语言理解到通用智能的跃迁
linux·服务器·前端·人工智能
东方护航数据恢复(深圳)1 小时前
本地小算力设备数据恢复经典案例实操全解_东方护航数据恢复深圳店
大数据·服务器·算法·ai·gpu算力
阿明62 小时前
Linux进程【Linux】
linux·运维·服务器
Android系统攻城狮2 小时前
Linux Gstreamer深度解析之gst_audio_resampler_update调用流程与实战(三十)
linux·运维·服务器·gstreamer音视频·音视频进阶
溪语流沙3 小时前
Django + Vue电商项目第001讲:开篇|注册登录加增删改查,那不是电商
redis·python·mysql·docker·typescript·django·vue