Dockerfile内で利用できる環境変数やコンテナ内での作業ディレクトリを指定できます。
この記事ではこれらを実行する命令について説明します。
環境変数の設定(ENV命令)
Dockerfile内で環境変数を設定したいときはENV命令を使います。ENV命令は以下の2通りの記述方法があります。
1. key value型で指定する場合
構文
ENV [key] [value]
単一の環境変数に1つの値をセットします。最初の空白の前をkeyとして設定すると、以降を全て文字列として扱います。空白やクォーテーションのようなキャラクタを含むものも文字として扱います。
2. key=valueで指定する場合
構文
ENV [key]=[value]
1度に複数の値をセットする場合は、環境変数をkey=valueで指定します。
例
ENV value1=value1 \
value2=value2
変数の前に\
を追加するとエスケープ処理ができます。
作業ディレクトリの指定(WORKDIR命令)
Dockerfileで定義した命令を実行するための作業ディレクトリを指定するには、WORKDIR命令を設定します。
WORKDIR [作業ディレクトリのパス]
WORKDIR命令は、Dockerfileに書かれた次の命令を実行するための作業用ディレクトリを指定します。
- RUN命令
- CMD命令
- ENTRYPOINT命令
- COPY命令
- ADD命令
もし指定したディレクトリが存在しなければ、新たに作成します。また、WORKDIR命令は、Dockerfile内で複数回使用できます。
ユーザーの指定(USER命令)
イメージ実行やDockerfileの次の命令を実行するためのユーザー(rootユーザーや自分で作成したユーザー)を指定するときは、USER命令を使います。
- RUN命令
- CMD命令
- ENTRYPOINT命令
USER命令は以下の書式で記述します。
USER [ユーザー名/UID]
USER命令で指定するユーザーは、あらかじめRUN命令で作成する必要があるため。注意が必要です。
ポートの設定(EXPOSE命令)
コンテナの公開するポート番号を指定するときは、EXPOSE命令を使います。
EXPOSE <ポート番号>
EXPOSE命令は、Dockerに実行中のコンテナがlisten(コンテナからホストへ公開)しているネットワークポートを知らせます。
またdocker container run
コマンドの-p
オプションをしようするときに、どのポートをホストへ公開するかを定義します。
たとえば、8080ポートを公開するためのEXPOSE命令は以下のようになります。
EXPOSE 8080
この記事ではDockerfile内で環境変数や作業ディレクトリ、ポートの設定を行う方法を説明しました。
次の記事ではホストからコンテナ内にファイルをコピーする方法を説明します。