LoginSignup
40
37

More than 5 years have passed since last update.

超軽量 Docker Image true (125 bytes) と sleeping-beauty (129 bytes)

Last updated at Posted at 2016-04-12

Docker の軽量なイメージを探していたら tianon/sleeping-beauty を見つけたので記事に。
せっかくなので tianon/true も含めて説明。

scratch

Docker で最も軽量なのは scratch で、これはイメージというよりも『何も入っていない』全く空の状態のイメージを指すキーワード。

一切のバイナリが含まれていないため、

docker run scratch
Unable to find image 'scratch:latest' locally
docker: Error response from daemon: 'scratch' is a reserved name.
See 'docker run --help'.

と実行しても起動することができない。

全く新しい Docker Image を作るときには scratch を元に作ると軽量なイメージになる。

FROM scratch
ADD somefile /
CMD /somefile

(この例の somefile の場合、単一バイナリで起動できるように静的リンクにビルドする必要がある。)
Golang では簡単に単一バイナリのプログラムが作れるので、いろいろと試してみると楽しそう。

tianon/true

Unix コマンドの true のように、実行して終了コード 0 で終了 (成功) するだけのエントリポイントが設定されたイメージ。

Docker Hub によると perfect for volume-only containers と書いてある。

FROM tianon/true
VOLUME /path/to/somedata

のように volume だけを持つ空のコンテナが欲しい時に使うと良い。

ちなみにアセンブラで書いてあり、バイナリはわずか 125 bytes のサイズしかない。

ソースはこちら

驚くほどシンプルな NASM のコードなので、勉強のために読んで見るのも良いと思う。

ところが

このコンテナは docker rm コマンドを使用した場合に、やすやすと消されてしまう。
既に終了してしまっているからだ。

「Docker のいらないイメージを削除する」 Docker イメージがあるって で書いた docker-gc でも無慈悲に削除されてしまう。

tianon/sleeping-beauty

tianon/true は、起動した直後に終了してしまうが、 sleeping-beauty はそうではない。

例えて言うなれば sleep 無限 を実行するような Docker イメージである。
起動してさえいれば docker-gc で消されることもない。

こちらもわずか 129 bytes のサイズだ。

ソースはこちら

こちらのソースも単純明快だ。

ちなみに英語で Sleeping Beauty といえば、『眠れる森の美女』のこと。オシャレなネーミングだ。

まとめ

名前 サイズ 向いている用途 (私の主観)
scratch - 新しい軽量コンテナを作りたい
tianon/true 125 B Volume だけのコンテナを作りたい (起動してなくていい)
tianon/sleeping-beauty 129 B Volume だけのコンテナを作りたい (起動している必要あり)
busybox 1.113 MB BusyBox のコマンド さえ使えればいい時
gliderlabs/alpine 4.798 MB 多種多様なパッケージ が要る時

※ サイズは 2016 年 4 月 12 日現在のもの。

40
37
0

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
40
37