Dockerfile の CMD命令

dockerfile の CMD命令

コンテナの起動時に指定された命令を実行します。 docker runの起動時に実行されるコマンドを指定することが可能です。

親記事

Docker入門 関連記事

dockerfile の CMD:コンテナ起動時のコマンドを設定する

コンテナの起動時に指定された命令を実行します。 RUNコマンドはビルド時に命令が実行されますが、CMDはコンテナの起動時(docker run時)であることに注意してください

例えば、docker run -it -p 80:80 -v ./code:/code flaskでflaskサーバーを起動したい場合、

# install python lib 
RUN pip install -r requirements.txt

# flaskサーバーを起動する
CMD ["python", "index.py"]

のように、pythonでindex.pyを実行してくれるように設定することができます。

その性質上、Dockerfileの末尾に書かれることが多いです。

CMDはオーバーライドされる。

CMDにはいくつか注意点があります。

CMD命令はイメージ名の後に実行されるdockerへの引数によってオーバーライドされます。CMD命令は重複されることはない特徴があり、以前のCMD命令はすべてオーバーライドされます(ベースイメージのものを含む)。

# 以下はオーバーライドされる。ので実行されない。
CMD ["npm", "run", "build"]

# 最後に宣言された以下のスクリプトが実行される。
CMD ["npm", "run", "start"]

Dockerfile ENTRYPOINT 命令の引数としての CMD 命令

ENTRYPOINT命令は実行時に特定のシェルスクリプトを指定できますが、 ENTRYPOINT命令と併用してCMD命令を使用した場合、ENTRYPOINT命令のオプションとして実行できます。

ENTRYPOINT ["my-app"]
CMD ["--option", "value"]