公式には、こんなことが書いてある
- Dockerfile には少なくとも1つの CMD または ENTRYPOINT 命令を含むべきです。
- ENTRYPOINT は実行可能なコンテナとして定義する時に使うべきです。
- コンテナをアドホック(その場その場)で実行するコマンドを ENTRYPOINT にする場合、そのデフォルトの引数の指定として CMD を指定すべきです。
- CMD はコンテナ実行時に引数を指定すると上書します。
Dockerfile リファレンス — Docker-docs-ja 1.11.0 ドキュメント
なので、基本はENTRYPOINT + CMDのコマンドが実行される。docker runのコマンド部分でコマンドを指定しない場合はCMDで記載されているコマンドが実行されるし、指定した場合はそのコマンドがCMDになる。
AWSの人がブログでわざわざENTRYPOINTとCMDの違いについて説明しているっていうことは、理解が難しいのだ。そして、CMDだけ書いてもコンテナは動くし、ENTRYPOINTを上書きできるのも理解するのを難しくしてる理由の一つだと思っている。
Demystifying ENTRYPOINT and CMD in Docker | AWS Open Source Blog