Docker(LXC) でのアプリケーションアイソレーションやアプリケーションサンドボクシングの検証として aobench を動かしてみましょう.
Docker ですでに提供されている busybox イメージでは外部コンパイルされたバイナリがうまく動かなかったので, buildroot を利用して busybox 環境をまずは構築するところから始めます.
buildroot-2013.11.tar.bz2
をダウンロードして展開,
$ make menuconfig
として
- x86_64 ターゲットを利用
- glibc ランタイムを利用
- gcc 4.8.x ツールチェイン(optional)
にして save -> exit
して
make
をすると output/images に rootfs.tar というイメージが出来ます.
ただ, これだと docker ではそのまま動かせる環境になっていないようなので,
を参考にして image の fixup を行い, dietfs としてイメージを import しておきます.
aobench のビルド
コンテナの外(今回は git clone https://github.com/dotcloud/docker.git で手に入る ubuntu 12.04 環境)で aobench をコンパイルします.
(より確実には buildroot で生成されるツールチェインを使ったほうがいいでしょう)
$ gcc -O3 -o ao ao.c -lm
$ mkdir /home/vagrant/in
$ cp ao /home/vagrant/in/
/home/vagrant/in を persistent volume としてマウントして, 生成した dietfs イメージを起動します.
$ sudo docker run -i -v /home/vagrant/in:/in:ro -t dietfs /bin/sh
# /in/ao
Output ao.ppm
コンテナプロセスの中で aobench が実行できましたね!
aobench イメージ
aobench の入ったイメージを Docker index に上げました.
まとめ
数値計算指向のアプリも docker でバッチリ動きます.
busybox(buildroot)を利用することでディスクのオーバヘッドは 5~6 MB と, とても lightweight に保つことができました.
これでどこでも aobench が出来ますね! Happy aobench!
参考文献
- Docker で lightweight なイメージを作成: http://blog.docker.io/2013/06/create-light-weight-docker-containers-buildroot/