Dockerfile中ENTRYPOINT 和 CMD的区别
一、dockerfile中的 CMD
1、每个dockerfile中只能有一个CMD如果有多个那么只执行最后一个。
2、CMD 相当于启动docker时候后面添加的参数看,举个简单例子:
docker run -itd --name 名字 镜像名称 /bin/bash -c
a、镜像名称后面跟了一个/bin/bash -c ,其实等价于在dockerfile中的CMD ["/bin/bash","-c"]
b、如果dockerfile中的CMD中有了CMD["/bin/bash","-c"],那么就不用在执行的时候再添加了,如果添加了参数的话那么就相当于要执行你添加的参数,默认的CMD中的参数就无效了。
二、dockerfile中的ENTRYPOINT
1、一个dockerfile中ENTRYPOINT也只能存在一个,若存在多个那么只执行最后一个,你可以理解为开机启动的意思,和CMD有点像,不过还是有区别。
2、举个例子:
a、dockerfile中有ENTRYPOINT ["tail","-f","/usr/local/aaa"],当启动的时候镜像就执行了里面的内容,如果你像上面带参数的话就相当于在这个执行的内容后面再加入参数
b、再来举个例子:
如果我们的dockerfile中有a中的这句话然后我们启动我们的docker:
docker run -itd --name 名字 镜像名称 /bin/bash -c
此时就相当于我们启动docker的时候执行了:tail -f /usr/local/aaa /bin/bash -c
三、CMD和ENTRYPOINT结合
1、综上写一个正常的CMD与ENTRYPOINT的组合命令
2、dockerfile 内容如下:
FROM daocloud.io/centos:latest
ADD aaa /usr/local/aaa
CMD ["-f","/usr/local/aaa"]
ENTRYPOINT ["tail"]
制作镜像命令:docker build -t my/helloworld
启动命令:docker run -itd --name xiaowangba my/helloworld
3、上面命令启动后就相当于开机执行了tail -f /usr/local/aaa命令