Dockerfileでカスタマイズしたイメージを作成

Dockerfileとは

Dockerfileとは作成するコンテナに環境設定や構築するコマンドをあらかじめ、イメージ作成時に設定ができるファイルです。
Dockerfileによってイメージの作成を自動化できます。
レポジトリにあるイメージをカスタマイズしたイメージを作成するときに使用します。

実際にDockerfileを使ってみる

簡単なDockerfileの書き方と実行方法を紹介します。
今回は環境設定とApacheをインストールしてみます。

まずはDockerfileを任意のディレクトリに作成します。
プロキシ設定は今回は使用しませんので、コメントアウトしています。

Dockerfileからイメージを作成します。
Dockerfileに記述したコマンドの標準出力が出力されます。

systemdを利用するコンテナとして起動します。
systemdを起動する場合、–privilegedオプションが必要です。
またコンテナの起動に指定するコマンドは/sbin/initを指定します。
-dオプションでバックグラウンドで起動します。

起動したコンテナへ/bin/bashを指定して接続します。
httpdが正常に稼働していることを確認します。

コンテナのIPアドレスを確認します。

起動したコンテナのwebサーバへ接続します。

もしくは

コンテナ起動時にスクリプトを実行するイメージを作成

簡単なスクリプトを作成します。

Dockerfileへスクリプトを実行するコマンドを追加します。

Dockerfileからイメージを作成します。

イメージから起動させます。
起動時にスクリプトに記述したコマンドが実行されます。

Dockerfileに使えるコマンド

FROM

FROMはイメージを指定します。Dockerfileの先頭行に記述する必要があります。

MAINTAINER

イメージ作成者のフィールドを指定します。

RUN

イメージをビルドする際に実行したいコマンドを指定します。
デフォルトでは/bin/shから実行されますので、bashを使う場合、別途指定する必要があります。
デフォルトのシェルを変更する場合、後述のSHELLコマンドで変更できます。

CMD

RUN同様コマンドを実行します。
RUNとの違いはイメージをビルドする時ではなく、イメージからコンテナを作成する際に実行される点です。
一番上の実行バイナリを指定する方法が推奨されています。

LABEL

LABELはイメージにメタ情報を付与します。
また、LABELを複数行書くとレイヤーが増えるため、一行のみ書くことが推奨されています。
イメージのラベルはdocker inspectで確認できます。

EXPOSE

EXPOSEはコンテナがLISTENできるポートを指定します。
イメージの実行時には-pオプションでポートを指定する必要があります。

ENV

ENVは環境変数<key>に値<value>を指定します。

ADD

ADDはファイルのコピーを実行します。
コピー元は後述のWORKDIRで指定したディレクトリからの相対パスで指定します。
コピー先は絶対パスで指定します。
[]はパスにスペースがある場合、使用します。
またADDはURLを指定することもできます。
URLに認証がかかっている場合、RUN wgetなどで取得する必要があります。
tarファイルの場合、展開してくれます。

COPY

ADDと同様にファイルのコピーを実行します。
ADDとの違いは、リモートファイルの取得ができないことや、tarファイルの展開を行わないことです。

ADDとCOPYの使い分け
COPYで実現可能なことはCOPYを使用し、tar展開やリモートファイルを使用する場合はADDを使うことが推奨されています。

ENTRYPOINT

スクリプトや実行可能なコマンドを指定します。

ENTRYPOINTとCMDの使い分け
ENTRYPOINTは–entrypointオプションを指定した時のみコマンドを上書きされます。
CMDはコマンドを指定した場合、上書きされます。
上書きできる内容にするかしないか、でコマンドを使い分けます。

VOLUME

docker run -vオプションと同じ効果があります。
CMD mkdirもディレクトリを作成しますが、VOLUMEで指定することで外部からマウント可能なマウントポイントとして使用できます。
コンテナ内のデータを永続化させる特に使用します。

USER

RUN,CMDなどで実行するユーザを指定します。
ホストOSと同一のユーザを指定した場合、プロセスにユーザ名が表示されます。

WORKDIR

ディレクトリを指定します。
上述にあるADD,COPYのコピー元はWORKDIRで指定したディレクトリからの相対パスになります。
Dockerfileはcdコマンドは使わず、WORKDIRでディレクトリを移動しましょう。
cdでは命令実行時に元のディレクトリへ戻ってしまいます。

ARG

指定した値をDockerfile内の変数としてして使用できます。

ARGはコンテナ起動時に上書きすることができます。

ARGとENVの使い分け
ENVはビルド時に環境変数に対して代入する値指定を使用します。
ARGはビルド時の一時変数として使用されます。
ENVは環境変数など変更させない値を指定して、ARGはイメージ作成に臨機応変に変更させたい値を指定するように使い分けます。
環境変数を変更したい場合、ENVの値にARGを指定して使用します。

SHELL

デフォルトでコマンドは/bin/shで実行されます。
これを/bin/bashや/powershell -commandなどで実行します。

終わりに

Dockerfileはレポジトリのイメージにカスタマイズを加えたりするときの作業を自動化してくれます。
実際、インターネットには様々なイメージがありますので、動作させたいアプリケーションに合わせてDokerfileでカスタマイズしましょう。

Dockerイメージの作成はできるようになったので、最後は複数のイメージを連携させることができるDockerComposeを紹介します。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です