Docker コンテナで QEMU を実行し、ブラウザから操作
qemus/qemuは実運用向けに使える実用的なオープンソース実装で、再利用可能な導入ルートを持つプロジェクトです。
ひと目でわかる
- これは何?
- Docker コンテナで QEMU を動かし、ブラウザで VM を操作。ホストが対応していれば KVM アクセラレーションを使う。
- 誰に向いている?
- README には、特定のユーザー、ベンチマーク、性能結果は掲載されていない。Windows、macOS、ARM64、Proxmox については別のリポジトリを参照し、全設定は docs/environment.md を参照するよう書かれている。
- 商用利用できる?
- できます。MIT は寛容なライセンスで、著作権表示とライセンス表示を残せば、使用・改変・販売が可能です。
- 今もメンテナンスされている?
- されています。最後のコミットは 8 日前です。
- 何の言語で書かれている?
- 主に Shell です(GitHub の言語統計による)。
回答はプロジェクトの GitHub データ(最終同期:2026年9月15日)と当サイトの分析に基づくもので、法的助言ではありません。
オープンソース詳細解説
ブラウザコンソール付きのコンテナ版 QEMU
このリポジトリは QEMU を Docker コンテナにまとめたもの。README によれば、コンテナ内で仮想マシンを実行し、ほぼすべてのディスクとイメージ形式に対応し、Web ベースのビューアで VM を操作できる。KVM アクセラレーションによるネイティブに近い性能、CPU・メモリ・ストレージのカスタマイズ、動的メモリバルーニング、USB パススルー、ホストフォルダ共有、複数のネットワークモード、人気の Linux ディストリビューションの自動ダウンロードを特長として挙げている。イメージは Docker Hub の qemux/qemu として公開されているが、README にバージョン番号やビルド日付はない。 実行日時、版、環境、入力識別子、出力要約、警告を記録し、再現不能な結果は成功例として扱いません。 このリポジトリは QEMU を Docker コンテナにまとめたもの。README によれば、コンテナ内で仮想マシンを実行し、ほぼすべてのディスクとイメージ形式に対応し、Web ベースのビューアで VM を操作できる。KVM アクセラレーションによるネイティブに近い性能、CPU・メモリ・ストレージのカスタマイズ、動的メモリバルーニング、USB パススルー、ホストフォルダ共有、複数のネットワークモード、人気の Linux ディストリビューションの自動ダウンロードを特長として挙げている。イメージは Docker Hub の qemux/qemu として公開されているが、README にバージョン番号やビルド日付はない。 実行日時、版、環境、入力識別子、出力要約、警告を記録し、再現不能な結果は成功例として扱いません。 このリポジトリは QEMU を Docker コンテナにまとめたもの。README によれば、コンテナ内で仮想マシンを実行し、ほぼすべてのディスクとイメージ形式に対応し、Web ベースのビューアで VM を操作できる。KVM アクセラレーションによるネイティブに近い性能、CPU・メモリ・ストレージのカスタマイズ、動的メモリバルーニング、USB パススルー、ホストフォルダ共有、複数のネットワークモード、人気の Linux ディストリビューションの自動ダウンロードを特長として挙げている。イメージは Docker Hub の qemux/qemu として公開されているが、README にバージョン番号やビルド日付はない。 実行日時、版、環境、入力識別子、出力要約、警告を記録し、再現不能な結果は成功例として扱いません。 このリポジトリは QEMU を Docker コンテナにまとめたもの。README によれば、コンテナ内で仮想マシンを実行し、ほぼすべてのディスクとイメージ形式に対応し、Web ベースのビューアで VM を操作できる。KVM アクセラレーションによるネイティブに近い性能、CPU・メモリ・ストレージのカスタマイズ、動的メモリバルーニング、USB パススルー、ホストフォルダ共有、複数のネットワークモード、人気の Linux ディストリビューションの自動ダウンロードを特長として挙げている。イメージは Docker Hub の qemux/qemu として公開されているが、README にバージョン番号やビルド日付はない。 実行日時、版、環境、入力識別子、出力要約、警告を記録し、再現不能な結果は成功例として扱いません。
実行要件と KVM の制約
README は、KVM 対応の Linux ホスト上の Docker または Podman、またはネストされた仮想化を有効にした Windows 11 上の Docker Desktop または Podman Desktop を要求する。また、RAM 2 GB 以上、空きディスク 64 GB 以上が必要。Linux、macOS、Windows 10 の Docker Desktop は現在コンテナに KVM アクセスを提供しておらず、サポートされないと注記されている。KVM を確認するには、cpu-checker をインストールして kvm-ok を実行し、/dev/kvm の存在を確認するよう README は勧めている。kvm-ok が成功してもコンテナが KVM を利用できないと報告する場合、Compose ファイルに privileged: true を一時的に追加してデバイスアクセスの問題を切り分けられる。ライセンスは MIT で、ライセンス文はソフトウェアを「現状のまま」提供し、いかなる保証もないと述べている。サポートやセキュリティ保証については触れていない。 README は、KVM 対応の Linux ホスト上の Docker または Podman、またはネストされた仮想化を有効にした Windows 11 上の Docker Desktop または Podman Desktop を要求する。また、RAM 2 GB 以上、空きディスク 64 GB 以上が必要。Linux、macOS、Windows 10 の Docker Desktop は現在コンテナに KVM アクセスを提供しておらず、サポートされないと注記されている。KVM を確認するには、cpu-checker をインストールして kvm-ok を実行し、/dev/kvm の存在を確認するよう README は勧めている。kvm-ok が成功してもコンテナが KVM を利用できないと報告する場合、Compose ファイルに privileged: true を一時的に追加してデバイスアクセスの問題を切り分けられる。ライセンスは MIT で、ライセンス文はソフトウェアを「現状のまま」提供し、いかなる保証もないと述べている。サポートやセキュリティ保証については触れていない。 README は、KVM 対応の Linux ホスト上の Docker または Podman、またはネストされた仮想化を有効にした Windows 11 上の Docker Desktop または Podman Desktop を要求する。また、RAM 2 GB 以上、空きディスク 64 GB 以上が必要。Linux、macOS、Windows 10 の Docker Desktop は現在コンテナに KVM アクセスを提供しておらず、サポートされないと注記されている。KVM を確認するには、cpu-checker をインストールして kvm-ok を実行し、/dev/kvm の存在を確認するよう README は勧めている。kvm-ok が成功してもコンテナが KVM を利用できないと報告する場合、Compose ファイルに privileged: true を一時的に追加してデバイスアクセスの問題を切り分けられる。ライセンスは MIT で、ライセンス文はソフトウェアを「現状のまま」提供し、いかなる保証もないと述べている。サポートやセキュリティ保証については触れていない。 README は、KVM 対応の Linux ホスト上の Docker または Podman、またはネストされた仮想化を有効にした Windows 11 上の Docker Desktop または Podman Desktop を要求する。また、RAM 2 GB 以上、空きディスク 64 GB 以上が必要。Linux、macOS、Windows 10 の Docker Desktop は現在コンテナに KVM アクセスを提供しておらず、サポートされないと注記されている。KVM を確認するには、cpu-checker をインストールして kvm-ok を実行し、/dev/kvm の存在を確認するよう README は勧めている。kvm-ok が成功してもコンテナが KVM を利用できないと報告する場合、Compose ファイルに privileged: true を一時的に追加してデバイスアクセスの問題を切り分けられる。ライセンスは MIT で、ライセンス文はソフトウェアを「現状のまま」提供し、いかなる保証もないと述べている。サポートやセキュリティ保証については触れていない。
コンテナの起動
README は 3 つの実行方法を示す。Docker Compose の例では、BOOT を mint に設定し、/dev/kvm と /dev/net/tun をデバイスとして追加し、NET_ADMIN を付与し、ポート 8006 を公開し、./qemu を /storage にマウントする。Docker CLI の同等コマンドは -e、--device、--cap-add、-p、-v で同じオプションを渡す。Kubernetes 向けには kubernetes.yml ファイルへの kubectl apply URL が提供されている。GitHub Codespaces もオプションとして挙げられているが、説明はない。Web ビューアはポート 8006 で提供され、README はブラウザでゲスト OS のインストールを完了するよう指示している。 README は 3 つの実行方法を示す。Docker Compose の例では、BOOT を mint に設定し、/dev/kvm と /dev/net/tun をデバイスとして追加し、NET_ADMIN を付与し、ポート 8006 を公開し、./qemu を /storage にマウントする。Docker CLI の同等コマンドは -e、--device、--cap-add、-p、-v で同じオプションを渡す。Kubernetes 向けには kubernetes.yml ファイルへの kubectl apply URL が提供されている。GitHub Codespaces もオプションとして挙げられているが、説明はない。Web ビューアはポート 8006 で提供され、README はブラウザでゲスト OS のインストールを完了するよう指示している。 README は 3 つの実行方法を示す。Docker Compose の例では、BOOT を mint に設定し、/dev/kvm と /dev/net/tun をデバイスとして追加し、NET_ADMIN を付与し、ポート 8006 を公開し、./qemu を /storage にマウントする。Docker CLI の同等コマンドは -e、--device、--cap-add、-p、-v で同じオプションを渡す。Kubernetes 向けには kubernetes.yml ファイルへの kubectl apply URL が提供されている。GitHub Codespaces もオプションとして挙げられているが、説明はない。Web ビューアはポート 8006 で提供され、README はブラウザでゲスト OS のインストールを完了するよう指示している。 README は 3 つの実行方法を示す。Docker Compose の例では、BOOT を mint に設定し、/dev/kvm と /dev/net/tun をデバイスとして追加し、NET_ADMIN を付与し、ポート 8006 を公開し、./qemu を /storage にマウントする。Docker CLI の同等コマンドは -e、--device、--cap-add、-p、-v で同じオプションを渡す。Kubernetes 向けには kubernetes.yml ファイルへの kubectl apply URL が提供されている。GitHub Codespaces もオプションとして挙げられているが、説明はない。Web ビューアはポート 8006 で提供され、README はブラウザでゲスト OS のインストールを完了するよう指示している。
オペレーティングシステムの選択
BOOT 環境変数でゲストを選ぶ。README には 23 個の値の表があり、alma や alpine から ubuntu、xubuntu、zima、zorin まで、それぞれイメージサイズ付きで列挙されている。プリセットの代わりに、BOOT に .img、.raw、.iso、.qcow2、.vmdk、.vhd、.vhdx、.vdi ファイルの URL を設定できる。.img.gz や .qcow2.xz のような圧縮形式は自動的に展開される。ローカルイメージは /boot.iso、/boot.img、または /boot.qcow2 にバインドマウントでき、その場合 BOOT は無視される。 BOOT 環境変数でゲストを選ぶ。README には 23 個の値の表があり、alma や alpine から ubuntu、xubuntu、zima、zorin まで、それぞれイメージサイズ付きで列挙されている。プリセットの代わりに、BOOT に .img、.raw、.iso、.qcow2、.vmdk、.vhd、.vhdx、.vdi ファイルの URL を設定できる。.img.gz や .qcow2.xz のような圧縮形式は自動的に展開される。ローカルイメージは /boot.iso、/boot.img、または /boot.qcow2 にバインドマウントでき、その場合 BOOT は無視される。 BOOT 環境変数でゲストを選ぶ。README には 23 個の値の表があり、alma や alpine から ubuntu、xubuntu、zima、zorin まで、それぞれイメージサイズ付きで列挙されている。プリセットの代わりに、BOOT に .img、.raw、.iso、.qcow2、.vmdk、.vhd、.vhdx、.vdi ファイルの URL を設定できる。.img.gz や .qcow2.xz のような圧縮形式は自動的に展開される。ローカルイメージは /boot.iso、/boot.img、または /boot.qcow2 にバインドマウントでき、その場合 BOOT は無視される。 BOOT 環境変数でゲストを選ぶ。README には 23 個の値の表があり、alma や alpine から ubuntu、xubuntu、zima、zorin まで、それぞれイメージサイズ付きで列挙されている。プリセットの代わりに、BOOT に .img、.raw、.iso、.qcow2、.vmdk、.vhd、.vhdx、.vdi ファイルの URL を設定できる。.img.gz や .qcow2.xz のような圧縮形式は自動的に展開される。ローカルイメージは /boot.iso、/boot.img、または /boot.qcow2 にバインドマウントでき、その場合 BOOT は無視される。
CPU、メモリ、ストレージの設定
デフォルトは CPU 2 コア、RAM 2 GB、ディスク 64 GB。RAM_SIZE と CPU_CORES でメモリとコア数を調整し、DISK_SIZE でディスク容量を変更する。既存ディスクの拡張にも使えるが、README によると追加分は未割り当てとして表示され、ゲスト内でパーティションを手動で拡張する必要がある。ストレージの場所は /storage にボリュームをマウントして制御する。追加ディスクは DISK2_SIZE と DISK3_SIZE、および別のボリュームマウントで追加できる。起動モードはデフォルトで UEFI で、BOOT_MODE=legacy で切り替える。デフォルトのディスクコントローラは virtio-scsi。DISK_TYPE=blk で virtio-blk に、DISK_TYPE=ide で IDE ドライブをエミュレートして互換性を確保する。メモリバルーニングは利用できるが、別ファイルに記載されている。 デフォルトは CPU 2 コア、RAM 2 GB、ディスク 64 GB。RAM_SIZE と CPU_CORES でメモリとコア数を調整し、DISK_SIZE でディスク容量を変更する。既存ディスクの拡張にも使えるが、README によると追加分は未割り当てとして表示され、ゲスト内でパーティションを手動で拡張する必要がある。ストレージの場所は /storage にボリュームをマウントして制御する。追加ディスクは DISK2_SIZE と DISK3_SIZE、および別のボリュームマウントで追加できる。起動モードはデフォルトで UEFI で、BOOT_MODE=legacy で切り替える。デフォルトのディスクコントローラは virtio-scsi。DISK_TYPE=blk で virtio-blk に、DISK_TYPE=ide で IDE ドライブをエミュレートして互換性を確保する。メモリバルーニングは利用できるが、別ファイルに記載されている。 デフォルトは CPU 2 コア、RAM 2 GB、ディスク 64 GB。RAM_SIZE と CPU_CORES でメモリとコア数を調整し、DISK_SIZE でディスク容量を変更する。既存ディスクの拡張にも使えるが、README によると追加分は未割り当てとして表示され、ゲスト内でパーティションを手動で拡張する必要がある。ストレージの場所は /storage にボリュームをマウントして制御する。追加ディスクは DISK2_SIZE と DISK3_SIZE、および別のボリュームマウントで追加できる。起動モードはデフォルトで UEFI で、BOOT_MODE=legacy で切り替える。デフォルトのディスクコントローラは virtio-scsi。DISK_TYPE=blk で virtio-blk に、DISK_TYPE=ide で IDE ドライブをエミュレートして互換性を確保する。メモリバルーニングは利用できるが、別ファイルに記載されている。 デフォルトは CPU 2 コア、RAM 2 GB、ディスク 64 GB。RAM_SIZE と CPU_CORES でメモリとコア数を調整し、DISK_SIZE でディスク容量を変更する。既存ディスクの拡張にも使えるが、README によると追加分は未割り当てとして表示され、ゲスト内でパーティションを手動で拡張する必要がある。ストレージの場所は /storage にボリュームをマウントして制御する。追加ディスクは DISK2_SIZE と DISK3_SIZE、および別のボリュームマウントで追加できる。起動モードはデフォルトで UEFI で、BOOT_MODE=legacy で切り替える。デフォルトのディスクコントローラは virtio-scsi。DISK_TYPE=blk で virtio-blk に、DISK_TYPE=ide で IDE ドライブをエミュレートして互換性を確保する。メモリバルーニングは利用できるが、別ファイルに記載されている。
ネットワークモード
デフォルトはブリッジネットワークで、ホストの IP を共有する。ポートは Compose のポートマッピングで公開する。ユーザーモードネットワーク(Podman など)では、ポートを USER_PORTS にもリストする必要がある。macvlan ネットワークを使うとコンテナに独自の IP アドレスを割り当てられ、その場合すべてのポートがマッピングなしで公開される。README は、macvlan の設計上ホストからそのアドレスには到達できないと警告し、回避策として 2 つ目の macvlan を提案している。DHCP を Y に設定し、/dev/vhost-net とデバイス cgroup ルールを追加すると、VM がルーターから直接 IP を要求できる。 デフォルトはブリッジネットワークで、ホストの IP を共有する。ポートは Compose のポートマッピングで公開する。ユーザーモードネットワーク(Podman など)では、ポートを USER_PORTS にもリストする必要がある。macvlan ネットワークを使うとコンテナに独自の IP アドレスを割り当てられ、その場合すべてのポートがマッピングなしで公開される。README は、macvlan の設計上ホストからそのアドレスには到達できないと警告し、回避策として 2 つ目の macvlan を提案している。DHCP を Y に設定し、/dev/vhost-net とデバイス cgroup ルールを追加すると、VM がルーターから直接 IP を要求できる。 デフォルトはブリッジネットワークで、ホストの IP を共有する。ポートは Compose のポートマッピングで公開する。ユーザーモードネットワーク(Podman など)では、ポートを USER_PORTS にもリストする必要がある。macvlan ネットワークを使うとコンテナに独自の IP アドレスを割り当てられ、その場合すべてのポートがマッピングなしで公開される。README は、macvlan の設計上ホストからそのアドレスには到達できないと警告し、回避策として 2 つ目の macvlan を提案している。DHCP を Y に設定し、/dev/vhost-net とデバイス cgroup ルールを追加すると、VM がルーターから直接 IP を要求できる。 デフォルトはブリッジネットワークで、ホストの IP を共有する。ポートは Compose のポートマッピングで公開する。ユーザーモードネットワーク(Podman など)では、ポートを USER_PORTS にもリストする必要がある。macvlan ネットワークを使うとコンテナに独自の IP アドレスを割り当てられ、その場合すべてのポートがマッピングなしで公開される。README は、macvlan の設計上ホストからそのアドレスには到達できないと警告し、回避策として 2 つ目の macvlan を提案している。DHCP を Y に設定し、/dev/vhost-net とデバイス cgroup ルールを追加すると、VM がルーターから直接 IP を要求できる。
デバイスアクセスとファイル共有
USB デバイスは、ベンダー ID とプロダクト ID を ARGUMENTS に指定し、/dev/bus/usb をマウントしてパススルーする。物理ディスクやパーティションは /disk1、/disk2 などにマッピングできる。ホストフォルダ共有にはゲスト側で 9pfs のサポートが必要。コンテナではボリュームを /shared にマウントし、ゲストで 'mount -t 9p -o trans=virtio shared /mnt/example' を実行する。音声はデフォルトで無効。AUDIO=Y を設定し、ビューアの Settings > Advanced で Audio を有効にすると、ブラウザに音声がストリーミングされる。README はこれらの機能を検証する方法をこれらの例以上には説明していない。 USB デバイスは、ベンダー ID とプロダクト ID を ARGUMENTS に指定し、/dev/bus/usb をマウントしてパススルーする。物理ディスクやパーティションは /disk1、/disk2 などにマッピングできる。ホストフォルダ共有にはゲスト側で 9pfs のサポートが必要。コンテナではボリュームを /shared にマウントし、ゲストで 'mount -t 9p -o trans=virtio shared /mnt/example' を実行する。音声はデフォルトで無効。AUDIO=Y を設定し、ビューアの Settings > Advanced で Audio を有効にすると、ブラウザに音声がストリーミングされる。README はこれらの機能を検証する方法をこれらの例以上には説明していない。 USB デバイスは、ベンダー ID とプロダクト ID を ARGUMENTS に指定し、/dev/bus/usb をマウントしてパススルーする。物理ディスクやパーティションは /disk1、/disk2 などにマッピングできる。ホストフォルダ共有にはゲスト側で 9pfs のサポートが必要。コンテナではボリュームを /shared にマウントし、ゲストで 'mount -t 9p -o trans=virtio shared /mnt/example' を実行する。音声はデフォルトで無効。AUDIO=Y を設定し、ビューアの Settings > Advanced で Audio を有効にすると、ブラウザに音声がストリーミングされる。README はこれらの機能を検証する方法をこれらの例以上には説明していない。 USB デバイスは、ベンダー ID とプロダクト ID を ARGUMENTS に指定し、/dev/bus/usb をマウントしてパススルーする。物理ディスクやパーティションは /disk1、/disk2 などにマッピングできる。ホストフォルダ共有にはゲスト側で 9pfs のサポートが必要。コンテナではボリュームを /shared にマウントし、ゲストで 'mount -t 9p -o trans=virtio shared /mnt/example' を実行する。音声はデフォルトで無効。AUDIO=Y を設定し、ビューアの Settings > Advanced で Audio を有効にすると、ブラウザに音声がストリーミングされる。README はこれらの機能を検証する方法をこれらの例以上には説明していない。
編集部の結論
README には、特定のユーザー、ベンチマーク、性能結果は掲載されていない。Windows、macOS、ARM64、Proxmox については別のリポジトリを参照し、全設定は docs/environment.md を参照するよう書かれている。このリポジトリが提供するのは QEMU の薄いラッパーであり、ブラウザから仮想マシンにアクセスできるようにするものだ。それ以外はホストの KVM サポートとゲストのドライバに依存する。
コミュニティノート