
Docker超入門:ENTRYPOINT・ENV・WORKDIRでコンテナの動作を制御する
Dockerfileを作るとき、コンテナの動作を細かく制御するために便利なのが ENTRYPOINT・ENV・WORKDIR の3つの命令です。
これらをうまく組み合わせることで、「コンテナをどう起動するか」「環境変数でどうカスタマイズするか」「作業ディレクトリをどこにするか」を柔軟に設定できます。

ENTRYPOINTで実行コマンドを固定する
ENTRYPOINT命令は、コンテナを起動したときに必ず実行されるデフォルトのコマンドを設定します。
CMDと似ていますが、ENTRYPOINTは「実行するコマンドを固定し、必要なら引数だけ差し替える」イメージで使います。
書式
- Exec形式(推奨)
ENTRYPOINT ["コマンド", "引数1", "引数2", ...]- Shell形式
ENTRYPOINT コマンド 引数1 引数2 ...使用例
ENTRYPOINT ["nginx", "-g", "daemon off;"]この場合、コンテナ起動時に必ずnginxが実行され、バックグラウンドで動作します。
Exec形式が推奨される理由
Exec形式はJSON配列で記述されるため、シェルを介さずに直接実行されます。
これにより、OSシグナル(例: SIGTERM)をプロセスが正しく受け取れるため、プロセス制御や停止処理が安全に行えるというメリットがあります。
一方でShell形式だと、シェルを経由するためシグナルが正しく伝わらず、コンテナ停止時に予期しない挙動をすることがあります。
ENVで環境変数を設定する
ENV命令は、コンテナ内で使える環境変数をあらかじめ設定できます。
アプリケーションの設定値や接続情報を柔軟に変えたいときにとても便利です。
書式
ENV [key] [value]
ENV [key]=[value]使用例
ENV name "John"
ENV addr="New York"コンテナ内で echo $name を実行すると John が出力されます。
設定ファイルを書き換えなくても、環境変数を使って動作を切り替えられるのが大きなポイントです。
WORKDIRで作業ディレクトリを指定する
WORKDIR命令は、その後に続く命令(RUN、CMD、ENTRYPOINT、COPYなど)が実行されるディレクトリを指定します。
毎回 cd コマンドを打たなくてもよいので、とても便利です。
書式
WORKDIR [作業ディレクトリのパス]使用例
WORKDIR /workdirectoryこの指定以降の処理はすべて /workdirectory を基準に実行されます。
例えば COPY app.py . と書けば /workdirectory/app.py にコピーされます。
3つの命令の比較表
| 命令 | 役割 | 主な用途 | 書式例 |
|---|---|---|---|
| ENTRYPOINT | コンテナ起動時に必ず実行するコマンドを設定 | Webサーバーやアプリの起動 | ENTRYPOINT ["nginx", "-g", "daemon off;"] |
| ENV | 環境変数を設定 | 接続情報やアプリの設定値を動的に管理 | ENV MODE=production |
| WORKDIR | 作業ディレクトリを指定 | アプリの配置や実行場所を統一 | WORKDIR /app |
まとめ
- ENTRYPOINT は「コンテナ起動時に実行するコマンド」を固定する
- ENV は「環境変数を設定して、動作を柔軟に変えられる」
- WORKDIR は「作業ディレクトリを指定して効率よくファイルを扱える」
この3つを活用すれば、コンテナの動作を思い通りにコントロールできます。
特に ENTRYPOINTはExec形式を使うのがベストプラクティス なので、ぜひ覚えておきましょう。
