2020/10/25 Docker, ENTRYPOINTとCMDの違い
ENTRYPOINTとCMD
ENTRYPOINTとCMDはDockerfileに記述される命令の一つ。
コンテナを起動する際に実行される。
例)
code:Dockerfile
FROM centos:latest
RUN yum update -y && yum clean all
RUN yum install -y epel-release && yum clean all
RUN yum install -ynginx && yum clean all
ADD config/default.conf /etc/nginx/conf.d
2つの違い
CMDとENTRYPOINTには違いがある。
CMD
コマンド実行時に省略された場合のデフォルト値のこと。(上書きが可能)
ENTRYPOINT
コマンド実行時に確実に実行される省略部分(上書き不可能)
図で説明する。
https://gyazo.com/26afdd234b1b48fe6deab2749a1ebc23
Dockerfileに
CMD ["ping", "8.8.8.8"]
を記載する。
そうすると、コンテナ実行時にコマンドを省略した場合にCMDが実行される。
=ping 8.8.8.8
コマンド実行時に/bin/bashを指定した場合はpingは実行されない。
https://gyazo.com/a49bd975d74c79b48cd679452b642c8d
Dockerfileに
ENTRYPOINT ["ping"]
CMD ["8.8.8.8"]
を記載する。
そうすると、コンテナ実行時にコマンドを省略した場合、ENTRYPOINT+CMDが実行される。
= ping 8.8.8.8
コマンド実行時に/bin/bashを指定した場合はENTRYPOINTが省略できないためエラーとなる。
= ping /bin/bash
CMD部分は上書き可能であるため、コマンド実行時には引数のみを指定することで便利になる。
# docker container run <container> -c 5 1.1.1.1
=# ping -c 5 1.1.1.1