Dockerとコンテナ技術 その9:Dockerfileによるカスタムイメージの作成①

Dockerコンテナはレジストリから用途に合ったイメージを取得して作成する方法の他に、自分でカスタムしたイメージから作成することもできます。
実務においては、レジストリ上のイメージのみではほとんど対応できないため、自分の要件に合ったイメージを作成する必要があります。
今回は2つの記事に分けて、Dockerfileと呼ばれるイメージを定義するファイルを利用してカスタムイメージを作成する方法についてまとめていきます。

Dockerfileによるカスタムイメージ

Dockerfileとは、イメージを定義する時に利用されるファイルです。
最低限の機能が備わっているイメージをレジストリから取得し、必要な機能を追加していくのがカスタムイメージを作成する一般的な方法となっています。
Dockerfileでカスタムイメージをテンプレート化することによって、そのDokcerfileを共有するだけで同じイメージを簡単に作成することができるようになるのです。

Dockerfileからイメージを作成

docker image build

Dockerfileからイメージを作成する場合、dockerコマンドを利用します。

docker image build [ディレクトリパス]

ディレクトリパスにはDockerfileが保存されているディレクトリのパスを指定します。
このコマンドで指定したディレクトリにあるDockerfileの情報を元にイメージが作成されていきます。

Dockerfileから実際にイメージを作成してみる

では、実際にDockerfileからイメージを作成してみましょう。
任意のフォルダにDockerfileという名前のファイルを作成してください。

任意のフォルダ上で
> touch Dockerfile

作成後、エディタで開きファイルを編集していきましょう。
1行目に以下のように記述します。

FROM ubuntu:20.04

Dockerfileは多くの場合、1行目はFROMから始まります。
FROMコマンドはパラメータで自分が作るイメージのベースとなるイメージを指定します。
この例の場合、ubuntuのイメージをベースイメージとすることを表しています。
では、このDockerfileから先ほど紹介したコマンドを利用してイメージを作成してみましょう。

Dockerfileを作成したフォルダ上で
docker image build .

ターミナル上で以下のように表示されればイメージのビルドが成功しています。

実際に作成されたイメージをdocker image lsコマンドで見てみましょう。
以下のように、REPOSITORYTAG<none>となっているイメージがビルドされていると思います。

これが、先ほどのDockerfileからビルドしたイメージとなります。

カスタムイメージに名前をつける

上記の例ではイメージ名やタグが<none>になってしまっていたので、こちらに任意のものを指定する方法を最後にご紹介します。
先ほど実行したコマンドに以下のようにオプションをつけることで、任意のイメージ名やタグをつけることが可能になります。

docker image build -t [イメージ名]:[タグ名] [ディレクトリパス]

先ほどの例で試してみましょう。
以下のように任意のイメージ名とタグ名を付けてコマンド実行してみてください。

docker image build -t my-image:v1 .

以下のように表示されれば成功です。

こちらもdocker image lsコマンドで作成されたイメージを確認してみましょう。

先ほどと違い、REPOSITORYTAGにオプションで指定したものが入っているのが確認できます。

まとめ

今回は、カスタムイメージを定義するDockerfileについて説明し、実際に簡単なイメージの作成までを行いました。
実際にはDockerfile内にもっと多くの情報を記述していくことで、独自のカスタムイメージを作成していくことができます。
次回はDockerfileのより詳細な記述方法についてまとめていきたいと思います。
ここまで読んでいただきありがとうございました。
それでは、また。