Edited at

fedoraのDockerイメージを作成する

More than 5 years have passed since last update.

みんな大好きfedora rawhideの何もインストールしていない超軽量Dockerイメージを作成します。


root構成ファイルを作成する


Dockerホストを起動する

お好きな手順でDockerホストを起動します。

Google Compute EngineでCoreOSを利用する例です。


Docker host shell

gcutil addinstance \

--image=projects/coreos-cloud/global/images/coreos-alpha-324-1-0-v20140522 \
--zone=us-central1-a --machine_type=g1-small \
coreos

起動できたら、ログインしておきます。


Docker host shell

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 host shell

docker run -i -t fedora:rawhide bash



superminをインストールする

Dockerコンテナにsuperminパッケージをインストールします。


Docker container shell

yum install -y supermin


superminコマンドは、内部的にxargs,findコマンドに依存していますが、パッケージの依存関係には明示されていません。xargs,findコマンドが含まれるfindutilsパッケージが必須です。(この問題はsupermin-5.1.8-9で修正されます。bugzilla:1113029


Docker container shell

yum install -y findutils



構成ファイルを生成する

superminは、--prepare, --buildの2回に分けて実行します。

まず、supermin --prepareでインストールしたいパッケージ名を指定します。

この例では、fedoraパッケージ管理ツールのyumのみを指定しています。


Docker container shell

supermin --prepare yum -o supermin.d


次に、supermin --buildでrootイメージの構成を生成します。

--formatにはchrootを指定します。


Docker container shell

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形式で圧縮します。


Docker container shell

cd /appliance.d; tar --create . |xz --best > /fedora-zero.tar.xz


xzコマンドは、実行の際にデフォルトで実メモリを600MB程度必要とします。

物理メモリに制限がある場合は、メモリ使用量を調整します。

この例は、--memlimit-compressで実メモリの70%を使用するように指定しています。


Docker container shell

tar --create . |xz --best --memlimit-compress=70% > /fedora-zero.tar.xz


Google Compute Engineでf1-microを指定した場合には、物理メモリが足りずにxzコマンドが実行できないでしょうから、この--memlimit-compressの指定が必要になります。


Dockerコンテナを終了する

ここまででDockerコンテナ上での操作は終了です。

Dockerコンテナを終了しておきます。


Docker container shell

exit



root構成ファイルを作成する簡単な方法

ここまでの操作は、つぎのコマンドで代替することができます。


Docker host shell

docker run michilu/fedora-supermin



rootイメージを取り出す

さきほど、Dockerコンテナ上に生成した、構成ファイルの圧縮済みファイル(この例では)fedora-zero.tar.xzをDockerホストへコピーします。

まず、DockerコンテナのIDを控えておきます。


Docker host shell

docker ps -a


Dockerホストへコピーします。


Docker host shell

docker cp <CONTAINER ID>:/fedora-zero.tar.xz .



Dockerイメージを作成する

docker importでrootイメージをimportします。


Docker host shell

cat fedora-zero.tar.xz | docker import -


作成が終わったらdocker imagesにリストされるのが確認できます。


Docker host shell

docker images

REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE
<none> <none> c4e626cd398a 0 seconds ago 120.5 MB



Dockerfileで利用する

または、Dockerfileで利用するには、つぎのような内容のファイルを作成し、docker buildを実行します。


Dockerfile

FROM scratch

ADD fedora-zero.tar.xz /


Docker host shell

docker build .



michilu/fedora-zero

この手順で作成した、yumのみインストールされたfedora rawhideの最小構成Docker imageをmichilu/fedora-zeroで配布しています。Virtual sizeはおよそ120MBです。

https://registry.hub.docker.com/u/michilu/fedora-zero/

MiCHiLU 35歳定年記念 ―― Hikkaduwa, Sri Lankaより