CMD指令为启动的容器指定默认要运行的程序,程序运行结束,容器也就结束。CMD 指令指定的程序可被 docker run 命令行参数中指定要运行的程序所覆盖。
类似于 RUN 指令,用于运行程序,但二者运行的时间点不同:CMD 在docker run 时运行,RUN 是在 docker build时运行。
注意:如果 Dockerfile 中如果存在多个 CMD 指令,仅最后一个生效。
类似于 CMD 指令,但其不会被 docker run 的命令行参数指定的指令所覆盖,而且这些命令行参数会被当作参数送给 ENTRYPOINT 指令指定的程序。
但是, 如果运行 docker run 时使用了 --entrypoint 选项,将覆盖 ENTRYPOINT 指令指定的程序。
优点:在执行 docker run 的时候可以指定 ENTRYPOINT 运行所需的参数。
注意:如果 Dockerfile 中如果存在多个 ENTRYPOINT 指令,仅最后一个生效。
建一个简单的dockerfile文件.内容为下面的2行内容
FROM centos CMD ["ls","-s"]
使用如下的命令,建造一个镜像并使用镜像建一个容器
docker build . docker run 7f59a95bfe72
可以看到,容器运行起来后直接运行了CMD中的命令。
覆盖CMD的命令使用下面的命令运行一个容器,可以看到已经覆盖了CMD设置的命令
docker run 7f59a95bfe72 ls -slENTRYPOINT测试
建一个简单的dockerfile文件.内容为下面的2行内容
FROM centos ENTRYPOINT ["ls","-s"]
建造一个镜像并使用镜像建一个容器
docker build . docker run 178be5e4e3f4
运行后和默认的和CMD是一样的
在ENTRYPOINT设置的指令后面追加指令使用 docker run **** -l看到-l已经追加到dockerfile设置的指令后面
总结:CMD设置的指令在镜像运行时自动运行,无法追加指令,只能把指令全部覆盖
ENTRYPOINT设置的指令在镜像运行时与CMD一样,可以在新建镜像时设置的指令后追加新的指令,也可以使用 --entrypoint 覆盖指令。



