Docker ENTRYPOINT 笔记
文章目录1 Overview2 ENTRYPOINT3 Summary1 OverviewDocker 中 ENTRYPOINT 一直是个容易混淆的概念,今天浏览了一下官网,简单总结一下。官网的参考链接如下。https://docs.docker.com/search/?q=entrypoint2 ENTRYPOINT在 Dockerfile 中,ENTRYPOINT 是作为容器运...
1 Overview
Docker 中 ENTRYPOINT
一直是个容易混淆的概念,今天浏览了一下官网,简单总结一下。官网的参考链接如下。
2 ENTRYPOINT
在 Dockerfile 中,ENTRYPOINT
是作为容器运行的命令存在的,但是他是非必须的,原因是除了可以在 Dockerfile 中填写 ENTRYPOINT
,你还可以写 CMD
,甚至同时使用两者。
如果指定了 ENTRYPOINT
,大部分的 Docker 镜像都定义了 ENTRYPOINT
,即使不写,你依然可以从你的 base 镜像中获取到 ENTRYPOINT
,前提当然是 base 镜像有定义。另外,就算你的 Dockerfile 定义了 ENTRYPOINT
,你还可以通过命令行的模式,在启动容器的时候提供 --entrypoint
选项来覆盖。下面的例子的含义是,通过 --entrypoint
来覆盖 Dockerfile 里定义的 ENTRYPOINT
,然后给 CMD
命令传入 -l /tmp
的命令。
$ docker run --entrypoint=/bin/ls ubuntu -l /tmp
---结果---
total 0
以上例子,你可以想象成你定义的 Dockerfile 是这样的。
FROM ubuntu
ENTRYPOINT ["/bin/ls"]
CMD ["-l", "/tmp"]
3 Summary
实践中,ENTRYPOINT
并不会经常被覆盖,但是如果镜像文件中指定了 ENTRYPOINT
,那么一定程度上,会让你的镜像更 flexible,或者说更容易使用。
举个 Spark 官方提供的 Dockerfile 为例,最后也是使用了 ENTRYPOINT
,那么他的灵活性体现在哪里呢?
我运行镜像的时候,可以通过 --entrypoint
来覆盖默认的 ENTRYPOINT
命令,比如我想看看镜像里的文件的时候,可以这么干。
$ docker run --entrypoint=/bin/ls spark:tenc-spark -l /opt/spark
---结果---
total 40
-rw-r--r-- 1 root root 0 Jul 21 01:57 RELEASE
drwxr-xr-x 2 root root 4096 Jul 21 01:57 bin
drwxr-xr-x 2 root root 4096 Jul 21 01:57 conf
drwxr-xr-x 5 root root 4096 Jul 21 01:57 data
drwxr-xr-x 4 root root 4096 Jul 21 01:57 examples
drwxr-xr-x 2 root root 12288 Jul 21 01:57 jars
drwxr-xr-x 2 root root 4096 Jul 21 01:57 sbin
drwxr-xr-x 2 root root 4096 Jul 21 01:57 tests
drwxr-xr-x 2 root root 4096 Jul 21 01:57 work-dir
更多推荐
所有评论(0)