LoginSignup
14
12

More than 5 years have passed since last update.

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

Last updated at Posted at 2014-06-25

みんな大好き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です。

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

14
12
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
12