Dockerfile の CMD と ENTRYPOINT を掻い摘んで理解する

この記事のまとめ:
  • Dockerfile の CMD と ENTRYPOINT 命令を掻い摘んで説明します。
背景

これまで Dockerfile を書いてくるにあたって、 CMD 命令と ENTRYPOINT 命令をなんとなく理解していたようでよく理解できていませんでした。ちゃんと理解しようと思って、調べた内容を掻い摘んでシンプルに説明します。

Docker イメージの起動時の実行プロセス

CMDENTRYPOINT はいずれも起動時に何かのプロセスを実行するコンテナーとして Docker イメージを作成するための命令です。

これらの記載がない Docker イメージは up コマンドでコンテナーを起動しても何も実行しません。

起動プロセスの指定

起動プロセスの実行優先順位

  1. ENTRYPOINT 命令
  2. docker run の後にコマンドを記述
    • docker run --entrypoint オプションで ENTRYPOINT 命令を書き換え可能
  3. CMD 命令
CMD 命令の役割

CMD 命令には2つの役割があります。

  • ENTRYPOINT が記述されていないときにおいて docker run でコマンドを記述しなかったときのデフォルトで実行されるコマンド
  • ENTRYPOINT が記述されているときにおいて、 ENTRYPOINT の引数
コマンドの配列としての記述

Dockerfile に CMDENTRYPOINT 命令でコマンドを記述する際には、コマンドをカギ括弧 [<command>] で囲って配列として記述するべきです。

カギ括弧に囲わなくてもコマンドを入力することはできます。ただし、カギ括弧を使わない場合には、docker stop でコンテナーを終了したとき、アプリケーションは SIGTERM のシグナルを受信できないようです。


今回は以上です。 最後まで読んでいただき、ありがとうございます。

参考記事


コメント

このブログの人気の投稿

LinuxでのnVidia GPUのオーバークロック・電力チューニング方法