簡単 FreeBSD Docker イメージの作り方

Date
2016-03-05 20:29
Author

Akihiro Uchida

tags

freebsd docker

category

memo

slug

simple-freebsd-docker-image

lang

ja

FreeBSD が Docker の Experimental support をサポートしていることに気づいたので試してみました。 jail + ZFS + 64bit Linux compatibility layer を使って、既存の Linux イメージなどを動かせるようです。

2015年6月の 11-CURRENT ぐらいからサポートされてた模様。

FreeBSD 上で動かす方法は Docker on FreeBSD - FreeBSD WikiFreeBSDでDockerを試す - Keep It Simle, Stupid に譲るとして FreeBSD 上で FreeBSD の Docker イメージを作ってみました。

Docker といいつつ実態はもちろん jail なので FreeBSD のイメージを作って FreeBSD 上で FreeBSD を動かしてもいいわけです。実際 lexaguskov/freebsdkazuyoshi/freebsd-minimal といったイメージが Docker Hub 上に既に上がっています。ただ、これらのイメージ作成方法を探しても見つからなかったので、用意してみました。

基本的には jail なので kernel は不要で FreeBSD でのユーザランド相当、 base.txz や lib32.txz とかがあれば動きそうなので、これらを展開して (展開までに bsdinstall jail とか使う方法とかもあります) tar で固め直して docker import したら動くイメージが作れるようになりました。

$ mkdir docker-freebsd-10.2
$ fetch http://ftp.freebsd.org/pub/FreeBSD/releases/amd64/10.2-RELEASE/base.txz
$ tar xf base.txz -C docker-freebsd-10.2
$ fetch http://ftp.freebsd.org/pub/FreeBSD/releases/amd64/10.2-RELEASE/lib32.txz
$ tar xf lib32.txz -C docker-freebsd-10.2
$ tar -C docker-freebsd-10.2 -czpf docker-freebsd-10.2.tgz .
$ cat docker-freebsd-10.2.tgz | docker import - freebsd
$ docker run -it freebsd /bin/sh
% freebsd-version
10.2-RELEASE

ただ、この方法は展開したファイルに schg フラグがついていたりして削除が面倒だったり、 Automated build もできない。ということで公式イメージとかがよく使う手 (tar を ADD して展開させる方法) を使って Dockerfile 化。

$ fetch http://ftp.freebsd.org/pub/FreeBSD/releases/amd64/10.2-RELEASE/base.txz
$ fetch http://ftp.freebsd.org/pub/FreeBSD/releases/amd64/10.2-RELEASE/lib32.txz
$ cat Dockerfile
FROM scratch
ADD base.txz /
ADD lib32.txz /
CMD ["/bin/sh"]
$ docker build -t freebsd .
$ docker run -it freebsd /bin/sh
# freebsd-version
10.2-RELEASE

この方法で Dockerfile を github に公開して uchida/docker-freebsd Docker Hub にも auchida/freebsd で上げてみました。

ただ kazuyoshi/freebsd-minimal はサイズ 4MB 程度なので、もっと中身を削ってサイズは縮められそう。

FreeBSD 上で FreeBSD 動かすなら jail でいいのではという気がしたりしますが、 docker-compose や docker-swarm とかと組み合わせられる点は割とメリットがあると思います。