ベース・イメージの作成¶
Dockerfile は普通は親イメージから作り始めます。 イメージ内容を完全にコントロールする場合は、ベース・イメージを作り出すこともあります。 その違いは以下のとおりです。
- 親イメージは基準とするイメージのことです。
Dockerfile 内の
FROM
ディレクティブによって指定されます。 Dockerfile 内のこれに続く定義は、その親イメージを修正指示するものとなります。 Dockerfile は普通は親イメージから作り始め、ベース・イメージから作るのはまれです。 ただしこの用語は混同されて用いられることもあります。
- ベース・イメージは Dockerfile において
FROM
行がないか、あるいはFROM scratch
が記述されます。
ここではベースイメージの生成方法をいくつか示します。 パッケージ化しようとしている Linux ディストリビューションに大きく依存する処理操作もあります。 以下に例をあげていきます。 新たなイメージを提供して頂ける場合は、プルリクエストをあげることをお願いします。
tar を使ったフルイメージの生成¶
通常であれば、作業マシン上に稼動するディストリビューションを使い、これを親イメージとしてビルドしていくことになります。 しかし Debian の Debootstrap のようなツールを使えば作業マシンは不要であり、ここから Ubuntu イメージを作ることもできます。
Ubuntu の親イメージを作るのは、以下のように簡単にできます。
$ sudo debootstrap raring raring > /dev/null
$ sudo tar -C raring -c . | docker import - raring
a29c15f1bf7a
$ docker run raring cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=13.04
DISTRIB_CODENAME=raring
DISTRIB_DESCRIPTION="Ubuntu 13.04"
Docker GitHub レポジトリには、親イメージを生成するスクリプトの例がいろいろとあります。
- BusyBox
- CentOS / Scientific Linux CERN (SLC) ( Debian/Ubuntu 向け または CentOS/RHEL/SLC など向け )
- Debian / Ubuntu
単純な親イメージを一から生成¶
Docker が規定する最小イメージ scratch
は、コンテナを構築するベース・イメージとして利用できます。
scratch
を利用すると「イメージ」は、``Dockerfile` `内の次に実行したいコマンドの構築プロセスに対して、最初のファイルシステムレイヤとなるように指示を出します。
Docker Hub 上の Docker リポジトリとして scratch
が登場したことにより、scratch
という名前を使ったイメージのアップロード、実行、タグづけはできなくなりました。
そのかわり Dockerfile
内での参照のみが可能です。
たとえば scratch
を利用した最小コンテナの生成は以下のようになります。
FROM scratch
ADD hello /
CMD ["/hello"]
Docker GitHub の C ソースコード例 に示されている手順に従って、"hello" 実行モジュールの例を構築するとします。
実行モジュールは -static
フラグをつけてコンパイルします。
Docker イメージは docker build --tag hello .
コマンドによってビルドすることができます。
注釈
Docker Desktop for Mac と Docker Desktop for Windows では Linux VM を利用するため、Mac や Windows の実行バイナリではなく Linux の実行バイナリが必要になります。 Docker コンテナーを使って以下のようにビルドします。
$ docker run --rm -it -v $PWD:/build ubuntu:16.04
container# apt-get update && apt-get install build-essential
container# cd /build
container# gcc -o hello -static -nostartfiles hello.c
そして(Linux、Mac、Windowsにおいて) docker run --rm hello
により実行します。
この例は、チュートリアルにおいて用いられている hello-world イメージを生成します。 これを試してみたい場合は、 イメージ・リポジトリ をクローンすることができます。
更なる詳細について¶
Dockerfile
を書くにあたり、多くの情報が手助けになるでしょう。
Dockerfile
リファレンス・セクションには、 利用可能な命令の全ガイド があります。- 作成した
Dockerfile
を、より綺麗に、読みやすく、メンテナンスしやすいように、 ベスト・プラクティス・ガイド が役立ちます。 - もし自分で新しい公式リポジトリを作成するのが目標であれば、Docker の 公式リポジトリについて をお読みください。
参考
- Create a base image
- https://docs.docker.com/engine/userguide/eng-image/baseimages/