
Docker超入門:Dockerfileで覚えておきたい命令(USER・LABEL・ARG)
Dockerfileを書くとき、よく使うのは FROM や RUN ですが、実際にプロジェクトで役立つ命令はそれだけではありません。
ここでは 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 . と実行すると、VERSION が 2.0 に置き換わってビルドされます。
ARGとENVの違い
| コマンド | 有効範囲 | 使いどころ |
|---|---|---|
| ARG | ビルド時のみ有効 | ビルドのバージョン切り替え |
| ENV | コンテナ実行時まで有効 | 実行環境の設定 |
まとめ
- USER → コンテナを安全に実行するため、ユーザー権限を制御する
- LABEL → イメージに作者や説明、バージョン情報をつける
- ARG → ビルド時に変数を渡して柔軟性を持たせる
これらの命令を覚えて使い分ければ、セキュアで管理しやすいDockerfile を作成できます。
