Docker超入門:Dockerfileで覚えておきたい命令(USER・LABEL・ARG)

 Dockerfileを書くとき、よく使うのは FROMRUN ですが、実際にプロジェクトで役立つ命令はそれだけではありません。
 ここでは USER・LABEL・ARG の3つに注目して解説します。これらを理解しておくと、セキュリティを強化したり、イメージに情報を付加したり、ビルドを柔軟にしたりできる ようになります。

USERコマンド:実行ユーザーを指定する

 USERコマンドは、コンテナ内で実行する命令(RUN、CMD、ENTRYPOINTなど)を どのユーザー権限で動かすか を指定します。

 Dockerはデフォルトでは rootユーザー で実行されますが、常にrootで動かすのはセキュリティリスクがあります。
そこでUSERコマンドを使って、権限を制限したユーザーに切り替えることが推奨されます。

書式

USER [ユーザー名またはUID]

使用例

USER appuser

この場合、以降の命令はすべて appuser の権限で実行されます。

USERコマンドのメリット

  • root実行を避けることでセキュリティを高められる。
  • アプリごとに専用ユーザーを用意することで環境が整理される。

LABELコマンド:イメージにメタデータを追加する

LABELコマンドは、Dockerイメージに 付加情報(メタデータ) を加えるために使います。

 例えば作者名、バージョン、説明などを記録しておくと、後から誰が作ったイメージか、どんな用途かが分かりやすくなります。
 また、CI/CDやイメージ管理ツールで自動的に参照されることもあるため、実務では積極的に活用されます。

書式

LABEL <キー>=<値>

使用例

LABEL maintainer="docker@example.com"
LABEL version="1.0"
LABEL description="This is a sample web application"

LABELの用途

  • イメージの説明文をつける。
  • 開発者や管理者の情報を記録する。
  • バージョン管理の補助

ARGコマンド:ビルド時に変数を指定する

ARGコマンドは、ビルド時にだけ使える変数 を定義する命令です。
例えば「バージョン番号」や「環境ごとの設定」を柔軟に変えたいときに便利です。

ENVとの違いは、ARGはビルド時だけ有効で、コンテナ実行時には参照できない 点です。

書式

ARG <変数名>[=デフォルト値]

使用例

ARG VERSION=1.0
RUN echo "Building version $VERSION"

 この場合、docker build --build-arg VERSION=2.0 . と実行すると、VERSION2.0 に置き換わってビルドされます。

ARGとENVの違い

コマンド有効範囲使いどころ
ARGビルド時のみ有効ビルドのバージョン切り替え
ENVコンテナ実行時まで有効実行環境の設定

まとめ

  • USER → コンテナを安全に実行するため、ユーザー権限を制御する
  • LABEL → イメージに作者や説明、バージョン情報をつける
  • ARG → ビルド時に変数を渡して柔軟性を持たせる

これらの命令を覚えて使い分ければ、セキュアで管理しやすいDockerfile を作成できます。