動機
以下のような流れで、docker上のKVMで、Xubuntuを動かそうと試みました。
- docker上で動くxfce環境を構築しようとする
- gauthierc/dockerspicexfce4などを試すも、恒常的に使うのは辛そう 1
- やっぱりデスクトップは仮想マシンにするか!
- 失敗してもいいように、docker上でKVMを試そう
仮想デバイスを準備する
まず仮想マシンで利用する仮想ディスクを ホストに作成します。サイズは100GBです。
$ dd if=/dev/zero of=/mnt/vm/xubuntu/primary.raw bs=10M count=10k
$ ll -h /mnt/vm/xubuntu/primary.raw
-rw-rw-r-- 1 foo bar 100G Feb 14 20:16 /mnt/vm/xubuntu/primary.raw
次に、Xubuntuのインストールイメージをダウンロードして 仮想ディスクと同じディレクトリに置きます。
$ wget http://ubuntutym2.u-toyama.ac.jp/xubuntu/14.04/release/xubuntu-14.04.3-desktop-amd64.iso
$ mv xubuntu-14.04.3-desktop-amd64.iso /mnt/vm/xubuntu/
docker-compose.yml を記述する
Docker Hubにて既存イメージを探したところ、ianblenke/kvm が良さそうでしたのでこれを使わせてもらうことにします。
- コンテナを作成するだけでKVMの実行環境が整い、
- コンテナ作成時にパラメータを渡すと それがKVMのパラメータとして実行され、仮想マシンが作成される
という代物です。ありがたい。
必要なパラメータが多いので、docker run ではなく 最初からdocker-composeを使います。
xubuntu:
image: ianblenke/kvm
container_name: xubuntu
tty: true
privileged: true
mem_limit: 600000000
ports:
- "5900:5900"
volumes:
- /mnt/vm/xubuntu:/mnt/vm/xubuntu
command: "/run.sh \
-name xubuntu -smp 2 -m 512 \
-vnc :0 \
-k ja \
-cdrom /mnt/vm/xubuntu/xubuntu-14.04.3-desktop-amd64.iso \
/mnt/vm/xubuntu/primary.raw"
コンテナが /dev/kvm
と /dev/net/tun
にアクセスするため、特権モード(privileged)を有効にします。また、仮想マシンはVNCを使って操作するため、5900番ポートを開けます。
run.sh のパラメータが そのままqemu-kvm のパラメータとして渡ります。各パラメータの意味はこちらが参考になります。
コンテナを作成し、仮想マシンにxubuntuをインストールする
docker-compose up
でコンテナ作成し、結果を確認します。
$ docker-compose up -d xubuntu
Creating xubuntu
$ docker-compose ps xubuntu
Name Command State Ports
-------------------------------------------------------------------------
xubuntu /run.sh -name Up 3389/tcp, 0.0.0.
xubuntu -smp ... 0:5900->5900/tcp
コンテナが作成されました。同時に仮想マシンも立ち上がっているはずなので、別のホストからVNCで繋いでみます。VNCの接続先として指定するのはホストのIPアドレスです。
Xubuntuのインストールイメージで仮想マシンが起動しています! このまま仮想ディスクにXubuntuをインストールします。
無事Xubuntuが起動するようになりました。Docker、KVM、Xubuntuのうちどれが寄与しているのかわかりませんが、とにかく起動が早いです。
Xubuntuをシャットダウンするとコンテナも停止します。Xubuntuをリブートしたときはコンテナは動作したままです。
仮想マシンの構成を変更する
インストールイメージがマウントされたままなので、これを仮想マシンの構成から外します。また、(個人的に)WAN越しにデスクトップを使うことが多いため、VNCでなくSPICEで仮想マシンを操作できるようにします。
xubuntu:
image: ianblenke/kvm
container_name: xubuntu
tty: true
privileged: true
mem_limit: 600000000
ports:
- "5900:5900"
volumes:
- /mnt/vm/xubuntu:/mnt/vm/xubuntu
command: "/run.sh \
-name xubuntu -smp 2 -m 512 \
-spice port=5900,disable-ticketing \
-vga qxl \
-k ja \
/mnt/vm/xubuntu/primary.raw"
-vncオプションを-spiceに変更し、-cdromオプションを削除しました。
また、-vgaオプションをデフォルトのstdからqxlに変更しています。2
一旦コンテナを停止し、docker-compose up -d xubuntu
で再起動するとSPICEで接続できるようになりました。
以上
-
そもそも "恒常的に使う" "デスクトップ"を docker上で動かすのが少しズレてるんだと解釈しています。 ↩
-
stdのままだと、WindowsのSPICEクライアント(virt-viewer)でマウスカーソルが表示されなかったため qxlに変更しました ↩