Project Icon

qemu-docker

基于QEMU的Docker虚拟机解决方案

qemu-docker是基于QEMU的Docker容器,用于运行虚拟机。它提供Web查看器,支持多种磁盘格式,具备KVM加速和内核模式网络等高性能特性。用户可通过简单配置启动各种操作系统,自定义存储位置、磁盘大小、CPU和RAM等资源。该项目适合在容器环境中快速部署和管理虚拟机的开发者及系统管理员使用。

QEMU

Build Version Size Package Pulls

Docker container for running virtual machines using QEMU.

Features ✨

  • Web-based viewer to control the machine directly from your browser

  • Supports .iso, .img, .qcow2, .vhd, .vhdx, .vdi, .vmdk and .raw disk formats

  • High-performance options (like KVM acceleration, kernel-mode networking, IO threading, etc.) to achieve near-native speed

Usage 🐳

Via Docker Compose:

services:
  qemu:
    container_name: qemu
    image: qemux/qemu-docker
    environment:
      BOOT: "https://dl-cdn.alpinelinux.org/alpine/v3.19/releases/x86_64/alpine-virt-3.19.1-x86_64.iso"
    devices:
      - /dev/kvm
    cap_add:
      - NET_ADMIN
    ports:
      - 8006:8006
    stop_grace_period: 2m

Via Docker CLI:

docker run -it --rm -e "BOOT=http://example.com/image.iso" -p 8006:8006 --device=/dev/kvm --cap-add NET_ADMIN qemux/qemu-docker

Via Kubernetes:

kubectl apply -f kubernetes.yml

FAQ 💬

How do I use it?

Very simple! These are the steps:

  • Set the BOOT environment variable to the URL of any disk image you want to install.

  • Start the container and connect to port 8006 using your web browser.

  • You will see the screen and can now install the OS of your choice using your keyboard and mouse.

Enjoy your brand new machine, and don't forget to star this repo!

How do I change the storage location?

To change the storage location, include the following bind mount in your compose file:

volumes:
  - /var/qemu:/storage

Replace the example path /var/qemu with the desired storage folder.

How do I change the size of the disk?

To expand the default size of 16 GB, add the DISK_SIZE setting to your compose file and set it to your preferred capacity:

environment:
  DISK_SIZE: "128G"

[!TIP] This can also be used to resize the existing disk to a larger capacity without any data loss.

How do I boot a local image?

You can use a local image file directly, and skip the download altogether, by binding it in your compose file:

volumes:
  - /home/user/example.iso:/boot.iso

This way you can supply a boot.iso, boot.img or boot.qcow2 file.

[!NOTE] The URL of the BOOT variable will be ignored in this case.

How do I boot ARM images?

You can use qemu-arm to run ARM64-based images.

How do I boot Windows?

Use dockur/windows instead, as it includes all the drivers required during installation, amongst many other features.

How do I boot macOS?

Use dockur/macos instead, as it uses all the right settings and automaticly downloads the installation files.

How do I boot without VirtIO drivers?

By default, the machine makes use of virtio-scsi drives for performance reasons, and even though most Linux kernels bundle the necessary driver for this device, that may not always be the case for other operating systems.

If your machine fails to detect the hard drive, you can modify your compose file to use virtio-blk instead:

environment:
  DISK_TYPE: "blk"

[!TIP] If it still fails to boot, you can set the value to ide to emulate a IDE drive, which is slow but requires no drivers and is compatible with almost every system.

How do I change the amount of CPU or RAM?

By default, the container will be allowed to use a maximum of 1 CPU core and 1 GB of RAM.

If you want to adjust this, you can specify the desired amount using the following environment variables:

environment:
  RAM_SIZE: "4G"
  CPU_CORES: "4"

How do I verify if my system supports KVM?

To verify that your system supports KVM, run the following commands:

sudo apt install cpu-checker
sudo kvm-ok

If you receive an error from kvm-ok indicating that KVM acceleration can't be used, please check whether:

  • the virtualization extensions (Intel VT-x or AMD SVM) are enabled in your BIOS.

  • you are running an operating system that supports them, like Linux or Windows 11 (macOS and Windows 10 do not unfortunately).

  • you enabled "nested virtualization" if you are running the container inside a virtual machine.

  • you are not using a cloud provider, as most of them do not allow nested virtualization for their VPS's.

If you didn't receive any error from kvm-ok at all, but the container still complains that /dev/kvm is missing, it might help to add privileged: true to your compose file (or --privileged to your run command), to rule out any permission issue.

How do I assign an individual IP address to the container?

By default, the container uses bridge networking, which shares the IP address with the host.

If you want to assign an individual IP address to the container, you can create a macvlan network as follows:

docker network create -d macvlan \
    --subnet=192.168.0.0/24 \
    --gateway=192.168.0.1 \
    --ip-range=192.168.0.100/28 \
    -o parent=eth0 vlan

Be sure to modify these values to match your local subnet.

Once you have created the network, change your compose file to look as follows:

services:
  qemu:
    container_name: qemu
    ..<snip>..
    networks:
      vlan:
        ipv4_address: 192.168.0.100

networks:
  vlan:
    external: true

An added benefit of this approach is that you won't have to perform any port mapping anymore, since all ports will be exposed by default.

[!IMPORTANT] This IP address won't be accessible from the Docker host due to the design of macvlan, which doesn't permit communication between the two. If this is a concern, you need to create a second macvlan as a workaround.

How can the VM acquire an IP address from my router?

After configuring the container for macvlan, it is possible for the VM to become part of your home network by requesting an IP from your router, just like a real PC.

To enable this mode, add the following lines to your compose file:

environment:
  DHCP: "Y"
devices:
  - /dev/vhost-net
device_cgroup_rules:
  - 'c *:* rwm'

[!NOTE] In this mode, the container and the VM will each have their own separate IPs.

How do I add multiple disks?

To create additional disks, modify your compose file like this:

environment:
  DISK2_SIZE: "32G"
  DISK3_SIZE: "64G"
volumes:
  - /home/example:/storage2
  - /mnt/data/example:/storage3

How do I pass-through a disk?

It is possible to pass-through disk devices directly by adding them to your compose file in this way:

devices:
  - /dev/sdb:/disk1
  - /dev/sdc:/disk2

Use /disk1 if you want it to become your main drive, and use /disk2 and higher to add them as secondary drives.

How do I pass-through a USB device?

To pass-through a USB device, first lookup its vendor and product id via the lsusb command, then add them to your compose file like this:

environment:
  ARGUMENTS: "-device usb-host,vendorid=0x1234,productid=0x1234"
devices:
  - /dev/bus/usb

How can I provide custom arguments to QEMU?

You can create the ARGUMENTS environment variable to provide additional arguments to QEMU at runtime:

environment:
  ARGUMENTS: "-device usb-tablet"

What image formats are supported?

The BOOT URL accepts files in any of the following formats:

ExtensionFormat
.imgRaw
.rawRaw
.isoOptical
.qcow2QEMU
.vmdkVMware
.vhdVirtualPC
.vhdxHyper-V
.vdiVirtualBox

[!TIP] It will also accept .img.gz, .qcow2.xz, .iso.zip and many more, as it automaticly extracts compressed files.

Stars 🌟

Stars

项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

吐司

探索Tensor.Art平台的独特AI模型,免费访问各种图像生成与AI训练工具,从Stable Diffusion等基础模型开始,轻松实现创新图像生成。体验前沿的AI技术,推动个人和企业的创新发展。

Project Cover

SubCat字幕猫

SubCat字幕猫APP是一款创新的视频播放器,它将改变您观看视频的方式!SubCat结合了先进的人工智能技术,为您提供即时视频字幕翻译,无论是本地视频还是网络流媒体,让您轻松享受各种语言的内容。

Project Cover

美间AI

美间AI创意设计平台,利用前沿AI技术,为设计师和营销人员提供一站式设计解决方案。从智能海报到3D效果图,再到文案生成,美间让创意设计更简单、更高效。

Project Cover

稿定AI

稿定设计 是一个多功能的在线设计和创意平台,提供广泛的设计工具和资源,以满足不同用户的需求。从专业的图形设计师到普通用户,无论是进行图片处理、智能抠图、H5页面制作还是视频剪辑,稿定设计都能提供简单、高效的解决方案。该平台以其用户友好的界面和强大的功能集合,帮助用户轻松实现创意设计。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号