一起学Docker:CMD与ENTRYPOINT的区别

CMD

CMD指令为启动的容器指定默认要运行的程序,程序运行结束,容器也就结束。CMD 指令指定的程序可被 docker run 命令行参数中指定要运行的程序所覆盖。
类似于 RUN 指令,用于运行程序,但二者运行的时间点不同:CMD 在docker run 时运行,RUN 是在 docker build时运行。
注意:如果 Dockerfile 中如果存在多个 CMD 指令,仅最后一个生效。

ENTRYPOINT

类似于 CMD 指令,但其不会被 docker run 的命令行参数指定的指令所覆盖,而且这些命令行参数会被当作参数送给 ENTRYPOINT 指令指定的程序。

但是, 如果运行 docker run 时使用了 --entrypoint 选项,将覆盖 ENTRYPOINT 指令指定的程序。
优点:在执行 docker run 的时候可以指定 ENTRYPOINT 运行所需的参数。
注意:如果 Dockerfile 中如果存在多个 ENTRYPOINT 指令,仅最后一个生效。

CMD测试

建一个简单的dockerfile文件.内容为下面的2行内容

FROM centos
CMD ["ls","-s"]

使用如下的命令,建造一个镜像并使用镜像建一个容器

docker build .
docker run 7f59a95bfe72

一起学Docker:CMD与ENTRYPOINT的区别_第1张图片

可以看到,容器运行起来后直接运行了CMD中的命令。

覆盖CMD的命令

使用下面的命令运行一个容器,可以看到已经覆盖了CMD设置的命令

docker run 7f59a95bfe72 ls -sl

一起学Docker:CMD与ENTRYPOINT的区别_第2张图片

ENTRYPOINT测试

建一个简单的dockerfile文件.内容为下面的2行内容

FROM centos
ENTRYPOINT ["ls","-s"]

建造一个镜像并使用镜像建一个容器

docker build .
docker run 178be5e4e3f4

运行后和默认的和CMD是一样的

一起学Docker:CMD与ENTRYPOINT的区别_第3张图片

在ENTRYPOINT设置的指令后面追加指令

使用 docker run **** -l看到-l已经追加到dockerfile设置的指令后面

一起学Docker:CMD与ENTRYPOINT的区别_第4张图片

总结:CMD设置的指令在镜像运行时自动运行,无法追加指令,只能把指令全部覆盖
ENTRYPOINT设置的指令在镜像运行时与CMD一样,可以在新建镜像时设置的指令后追加新的指令,也可以使用 --entrypoint 覆盖指令。

一起学Docker:CMD与ENTRYPOINT的区别_第5张图片

你可能感兴趣的:(Docker,docker,容器,运维)