最近話題に上ることも多い Docker ですが、UZABASE でもチームによっては積極的に使っています。
(現在は主に開発用途。)
他のコンテナ型仮想化技術と比較した場合の Docker の良さとして、
- Docker Hub など、レジストリに登録されているイメージを利用できる
- Dockerfile を使用したイメージ構築の自動化
Docker Hub をざっと見渡しただけでも、Ubuntu や CentOS など環境だけを提供するものから redis や MySQL などそのままアプリケーションが実行できるものまで様々なイメージを見つけることができ、その良さを垣間見ることができます。
さて、その便利な Docker のイメージですが、実体がどのようになっているかご存知でしょうか。
Ubuntu や CentOS が丸ごと入っているくらいだからさぞかし難解なものだろうと思われる方もいらっしゃるかもしれませんが、作成の手順はとても単純です。
ということで、試しに作ってみることにしました。
とりあえず簡単なものということで、
- フルスクラッチから作る
- busybox を動かすだけの最小のイメージ
イメージの作り方にも色々な方法があるのですが、今回はイメージのファイル構成を含んだアーカイブを作成して docker import するというやり方でいきます。
アーカイブの最終的なファイル構成は次のようになります。
bin/ bin/busybox (※busybox-x86_64 へのシンボリックリンク) bin/busybox-x86_64話がややこしくならないように、busybox はスタティックリンク版を利用します。
(ダイナミックリンクしているバイナリを実行するためにはライブラリの配置や /etc/ld.so.conf の設定などが必要です。)
以下手順です。
環境:
Docker 1.3.2 / Debian sid (Linux 3.16.0-4-amd64 #1 SMP Debian 3.16.7-2 (2014-11-06) x86_64 GNU/Linux)
$ mkdir -p busybox-static/bin $ cd busybox-static/bin $ wget -P . http://www.busybox.net/downloads/binaries/latest/busybox-x86_64 $ chmod +x busybox-x86_64 $ ln -s busybox-x86_64 busybox $ cd .. $ tar zcf busybox-static.tar.gz binこれで、busybox を含んだ bin ディレクトリだけの最小の Docker イメージができました。
作成したアーカイブを docker import します。
$ cat busybox-static.tar.gz | docker import - busybox-staticうまくいったようです。
REPOSITORY TAG IMAGE ID CREATED VIRTUAL SIZE busybox-static latest 85e373c46d80 27 seconds ago 973.2 kBでは、run してみます。
$ docker run busybox-static /bin/busybox ls -a . .. .dockerenv .dockerinit bin dev etc proc sysこれも成功です。目標達成!
ところで、アーカイブには bin ディレクトリしか含まれていなかったはずですが、いくつかファイルやディレクトリが追加されています。
これらは、デバイスなどホストのリソースを利用できるように、Docker が勝手に作ってコンテナに追加してくれているものです。
このような感じで、単純なイメージであれば非常に簡単に作ることができます。
Docker コンテナ内でプログラムを実行するには何が必要であるか、コンテナからホストのリソースはどのように見えているかなど勉強になることも多いので、一度スクラッチからのイメージ作成をやってみても面白いかと思います。
0 件のコメント:
コメントを投稿