
tianon/qemutianon/qemu是一个基于QEMU的容器化镜像,旨在通过Docker环境快速部署和运行QEMU虚拟机。该镜像将QEMU虚拟化功能与Docker容器的便捷性结合,允许用户通过环境变量和命令行参数灵活配置虚拟机参数,无需在宿主机直接安装和配置QEMU。
主要用途:提供轻量级、可定制的虚拟机运行环境,适用于开发测试、系统模拟、操作系统安装调试等场景,尤其适合需要快速搭建隔离环境的用户。
源代码地址:[***]
--device /dev/kvm参数利用宿主机KVM设备,显著提升虚拟机运行性能(需宿主机支持KVM)。QEMU_HDA、QEMU_CPU)简化虚拟机核心参数配置,无需手动编写复杂QEMU命令。QEMU_PORTS自定义映射其他TCP端口。start-qemu <args>命令传递QEMU原生参数,满足高级配置需求(如图形界面、网络调试等)。ovmf包,可通过--bios参数启用UEFI启动模式,支持现代操作系统引导。创建磁盘镜像:在宿主机创建QEMU磁盘文件(qcow2格式),用于虚拟机存储:
console$ touch /home/jsmith/hda.qcow2 # 或使用qemu-img创建指定大小:qemu-img create -f qcow2 /home/jsmith/hda.qcow2 100G
准备安装介质:下载操作系统ISO文件(如Debian、Ubuntu安装镜像),存放于宿主机路径(如/home/jsmith/downloads/debian.iso)。
通过以下命令启动QEMU虚拟机容器(以安装Debian为例):
console$ docker run -it --rm \ --device /dev/kvm \ # 启用KVM加速(需宿主机支持KVM) --name qemu-container \ # 容器名称 -v /home/jsmith/hda.qcow2:/tmp/hda.qcow2 \ # 挂载宿主机磁盘镜像到容器内 -e QEMU_HDA=/tmp/hda.qcow2 \ # 指定虚拟机主磁盘路径(容器内路径) -e QEMU_HDA_SIZE=100G \ # 主磁盘大小(若磁盘文件未初始化,自动创建指定大小) -e QEMU_CPU=4 \ # 分配CPU核心数 -e QEMU_RAM=4096 \ # 分配内存大小(MB) -v /home/jsmith/downloads/debian.iso:/tmp/debian.iso:ro \ # 挂载ISO安装介质(只读) -e QEMU_CDROM=/tmp/debian.iso \ # 指定CDROM设备路径(容器内) -e QEMU_BOOT='order=d' \ # 启动顺序(d: CDROM优先,c: 硬盘优先) -e QEMU_PORTS='2375 2376' \ # 自定义映射端口(空格分隔) tianon/qemu
创建docker-compose.yml文件,实现容器化部署编排:
yamlversion: '3' services: qemu-vm: image: tianon/qemu container_name: qemu-container devices: - /dev/kvm # 启用KVM加速 volumes: - /home/jsmith/hda.qcow2:/tmp/hda.qcow2 # 虚拟机磁盘(宿主机路径:容器内路径) - /home/jsmith/downloads/debian.iso:/tmp/debian.iso:ro # 安装ISO(只读) environment: - QEMU_HDA=/tmp/hda.qcow2 - QEMU_HDA_SIZE=100G - QEMU_CPU=4 - QEMU_RAM=4096 - QEMU_CDROM=/tmp/debian.iso - QEMU_BOOT=order=d - QEMU_PORTS=2375 2376 stdin_open: true # 保持标准输入打开(交互模式) tty: true # 分配伪终端(支持终端交互) restart: unless-stopped # 可选:容器退出后自动重启(除非手动停止)
启动容器:
console$ docker-compose up -d
| 环境变量 | 描述 | 示例值 |
|---|---|---|
QEMU_HDA | 虚拟机主磁盘路径(容器内路径,需通过-v挂载宿主机文件) | /tmp/hda.qcow2 |
QEMU_HDA_SIZE | 主磁盘大小(若磁盘文件未初始化,自动创建qcow2格式文件) | 100G(100GB)、20480M(20GB) |
QEMU_CPU | 分配给虚拟机的CPU核心数 | 4(4核) |
QEMU_RAM | 分配给虚拟机的内存大小(MB) | 4096(4GB) |
QEMU_CDROM | CDROM设备路径(容器内路径,需挂载ISO文件,建议设为只读ro) | /tmp/debian.iso |
QEMU_BOOT | 启动设备顺序(d=CDROM,c=硬盘,a=软盘) | order=d(优先从CDROM启动) |
QEMU_PORTS | 自定义映射的TCP端口(空格分隔,容器内端口映射到宿主机随机端口) | 2375 2376 |
默认端口:无论QEMU_PORTS是否配置,容器自动映射22端口(SSH)到宿主机随机端口,可通过docker port qemu-container查看映射结果:
console$ docker port qemu-container 22/tcp -> 0.0.0.0:49153 # 示例:宿主机49153端口映射到容器22端口
自定义端口:QEMU_PORTS指定的端口将额外映射到宿主机随机端口,例如QEMU_PORTS=2375 2376会映射2375和2376端口。
如需使用QEMU原生参数(如字符界面、网络调试),可通过start-qemu <args>命令传递,例如启用字符界面(-curses):
console$ docker run -it --rm \ --device /dev/kvm \ -v /home/jsmith/hda.qcow2:/tmp/hda.qcow2 \ -e QEMU_HDA=/tmp/hda.qcow2 \ tianon/qemu start-qemu -curses # 传递-curses参数启用字符界面
镜像集成ovmf包(UEFI固件),启用UEFI启动需通过--bios参数指定固件路径:
console$ docker run -it --rm \ --device /dev/kvm \ -v /home/jsmith/hda.qcow2:/tmp/hda.qcow2 \ -e QEMU_HDA=/tmp/hda.qcow2 \ tianon/qemu start-qemu --bios /usr/share/ovmf/OVMF.fd # 使用UEFI固件
默认网络:镜像默认使用QEMU用户模式网络栈(SLIRP),支持虚拟机访问外部网络,但宿主机访问虚拟机需通过端口映射。
ICMP/Ping支持:用户模式网络默认禁用ICMP协议(ping命令),如需启用,需在容器启动时添加sysctl参数:
console$ docker run -it --rm \ --device /dev/kvm \ --sysctl net.ipv4.ping_group_range='0 2147483647' \ # 允许ping操作 ... # 其他参数(如环境变量、挂载) tianon/qemu
KVM依赖:--device /dev/kvm需宿主机支持KVM(检查/dev/kvm是否存在),否则将回退到QEMU纯软件模拟,性能显著下降。
权限要求:容器需有权限访问/dev/kvm设备,建议将宿主机用户添加到kvm组(usermod -aG kvm $USER),避免使用--privileged。
磁盘性能:虚拟机磁盘文件(qcow2)的存储位置影响I/O性能,建议存放于SSD或高性能存储介质。


manifest unknown 错误
TLS 证书验证失败
DNS 解析超时
410 错误:版本过低
402 错误:流量耗尽
身份认证失败错误
429 限流错误
凭证保存错误
来自真实用户的反馈,见证轩辕镜像的优质服务