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

  • 13
    Like
  • 1
    Comment
More than 1 year has 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より