CentOSのdockerベースイメージ自作はCentOS6だとよく見かけるのですがCentOS5では見かけないのでチャレンジしてみました。
febootstrapのインストール
CentOS5ではepelからじゃないとfebootstrapをインストール出来ないので、yumリポジトリにepelを追加し、febootstrapをインストールします。
ブートストラップの作成
インストールしたfebootstrapはVer.3.x系なので、CentOS6(febootstrap Ver.2.x系)の場合と勝手が違います。
$ febootstrap --names yum bash coreutils -o bootstrap
--names
で必要なパッケージを列挙します。多分bash
とかcoreutils
はいらないかもしれません(試していない)。
-o
で出力先のディレクトリを指定します。
febootstrap 2.xであればこの時点でbootstrapの中身をtar.xzにしてやることでdockerにimportさせられるのですが、febootstrap 3.xでは違う形式のため、まだまだ続きます。
作成後のディレクトリには以下の2ファイルがあります。
$ ls bootstrap
base.img hostfiles
base.img
はスケルトン状態のファイルシステムを内包したcpio形式のファイル、hostfiles
はホストからコピーされるファイルの一覧のテキストで、superminでは最低でもこれら2つのファイルを使ってイメージを構築するそうですよ。(詳しくはfebootstrap3のmanで)
febootstrap-supermin-helperでベースイメージを構築する
Fedoraな方ですと以下の様感じでsuperminコマンドを使用すれば良いようです。
$ supermin --build --format chroot bootstrap -o appliance.d
が、CentOS5ではsuperminが使えないっぽいので、febootstrap-supermin-helperを使用します。
febootstrap-supermin-helperではフォーマットがcpio
かext2
しかなく、chroot
が選べません。なのでext2
を指定してディスクイメージを作成し、マウントさせて中身をいただくという手段を取ります。
$ sudo febootstrap-supermin-helper -u root -g root -f ext2 bootstrap/ i686 appliance/kernel appliance/initrd appliance/root
64bit環境の場合、i686
のところをx86_64
にしてください
作成したディスクイメージをマウントさせ、中身をアーカイブする
febootstrap-supermin-helperを実行した結果、appliance
ディレクトリには以下のファイルがあります。
$ ls appliance
initrd kernel root
この内、root
が目的のディスクイメージです。マウントして中身をアーカイブします。
$ sudo mount -t ext2 -o loop appliance/root mnt/
$ sudo tar cf centos5.tar -C mnt/ .
$ suto xz -v centos5.tar
あとはdockerを使っている環境にファイルを持って行き、importすればOKです。
$ cat centos5.tar.xz | docker import - local/centos:5
これで一応dockerイメージを作れましたが、もっと良い方法があるんじゃないかと思うほど面倒な手順なので、ひょっとしたら気づいてないだけでみんなもっと簡単に作っているのではないかと思っています。