Docker ENTRYPOINT 笔记

1 Overview

Docker 中 ENTRYPOINT 一直是个容易混淆的概念,今天浏览了一下官网,简单总结一下。官网的参考链接如下。

https://docs.docker.com/search/?q=entrypoint

image_1dg93lijh8v59ueu337fbfgop.png-240.8kB

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值