みんな大好きfedora rawhideの何もインストールしていない超軽量Dockerイメージを作成します。
root構成ファイルを作成する
Dockerホストを起動する
お好きな手順でDockerホストを起動します。
Google Compute EngineでCoreOSを利用する例です。
gcutil addinstance \
--image=projects/coreos-cloud/global/images/coreos-alpha-324-1-0-v20140522 \
--zone=us-central1-a --machine_type=g1-small \
coreos
起動できたら、ログインしておきます。
gcutil ssh --ssh_user=core coreos
Dockerコンテナを起動する
rootイメージの作成には、fedoraパッケージで配布されるアプライアンス作成ツールのsuperminを利用します。
superminは、current OSのシステム構成をベースに、rootイメージを作成します。
信頼できるOS上でrootイメージを作成するのが懸命でしょう。
また、ディストリビューションのバージョンもcurrent OSのものと同一になります。
作成したいディストリビューションは、この時点で選択します。
この例では、fedora projectが管理する fedora:rawhide をcurrent OSに利用します。
docker run -i -t fedora:rawhide bash
superminをインストールする
Dockerコンテナにsuperminパッケージをインストールします。
yum install -y supermin
supermin
コマンドは、内部的にxargs
,find
コマンドに依存していますが、パッケージの依存関係には明示されていません。xargs
,find
コマンドが含まれるfindutils
パッケージが必須です。(この問題はsupermin-5.1.8-9
で修正されます。bugzilla:1113029)
yum install -y findutils
構成ファイルを生成する
superminは、--prepare
, --build
の2回に分けて実行します。
まず、supermin --prepare
でインストールしたいパッケージ名を指定します。
この例では、fedoraパッケージ管理ツールのyum
のみを指定しています。
supermin --prepare yum -o supermin.d
次に、supermin --build
でrootイメージの構成を生成します。
--format
にはchroot
を指定します。
supermin --build --format chroot supermin.d -o appliance.d
appliance.d
以下にrootイメージの構成が生成されています。
構成ファイルを調整する
構成ファイルを調整する場合には、ここで実行します。
localeファイルを圧縮するには、つぎのように実行します。
この調整は、Docker imageのVertual sizeを40MB程度削減します。
cd /appliance.d
mv usr/share/locale/en usr/share/locale/en_US tmp
rm -rf usr/share/locale/*
mv tmp/en tmp/en_US usr/share/locale/
mv usr/share/i18n/locales/en_US tmp
rm -rf usr/share/i18n/locales/*
mv tmp/en_US usr/share/i18n/locales/
構成ファイル圧縮する
rootイメージの構成ファイルをxz形式で圧縮します。
cd /appliance.d; tar --create . |xz --best > /fedora-zero.tar.xz
xzコマンドは、実行の際にデフォルトで実メモリを600MB程度必要とします。
物理メモリに制限がある場合は、メモリ使用量を調整します。
この例は、--memlimit-compress
で実メモリの70%を使用するように指定しています。
tar --create . |xz --best --memlimit-compress=70% > /fedora-zero.tar.xz
Google Compute Engineでf1-microを指定した場合には、物理メモリが足りずにxzコマンドが実行できないでしょうから、この--memlimit-compress
の指定が必要になります。
Dockerコンテナを終了する
ここまででDockerコンテナ上での操作は終了です。
Dockerコンテナを終了しておきます。
exit
root構成ファイルを作成する簡単な方法
ここまでの操作は、つぎのコマンドで代替することができます。
docker run michilu/fedora-supermin
rootイメージを取り出す
さきほど、Dockerコンテナ上に生成した、構成ファイルの圧縮済みファイル(この例では)fedora-zero.tar.xz
をDockerホストへコピーします。
まず、DockerコンテナのIDを控えておきます。
docker ps -a
Dockerホストへコピーします。
docker cp <CONTAINER ID>:/fedora-zero.tar.xz .
Dockerイメージを作成する
docker import
でrootイメージをimportします。
cat fedora-zero.tar.xz | docker import -
作成が終わったらdocker images
にリストされるのが確認できます。
docker images
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
<none> <none> c4e626cd398a 0 seconds ago 120.5 MB
Dockerfileで利用する
または、Dockerfile
で利用するには、つぎのような内容のファイルを作成し、docker build
を実行します。
FROM scratch
ADD fedora-zero.tar.xz /
docker build .
michilu/fedora-zero
この手順で作成した、yum
のみインストールされたfedora rawhideの最小構成Docker imageをmichilu/fedora-zero
で配布しています。Virtual sizeはおよそ120MBです。
MiCHiLU 35歳定年記念 ―― Hikkaduwa, Sri Lankaより