簡単 FreeBSD Docker イメージの作り方
- Date
- 2016-03-05 20:29
- 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 Wiki や FreeBSDでDockerを試す - Keep It Simle, Stupid に譲るとして FreeBSD 上で FreeBSD の Docker イメージを作ってみました。
Docker といいつつ実態はもちろん jail なので FreeBSD のイメージを作って FreeBSD 上で FreeBSD を動かしてもいいわけです。実際 lexaguskov/freebsd や kazuyoshi/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 とかと組み合わせられる点は割とメリットがあると思います。