Dockerfile运行指令

1.RUN

在build构建时执行命令。

举例:安装vim

Shell命令格式

RUN yum install -y vim

Exec命令格式

RUN ["yum","install","-y","vim"]

2.CMD

用于设置容器启动时默认执行的命令或参数。

如果Dockerfile中有多个CMD,只有最后一个CMD会被执行。

如果容器启动时附加执行,则CMD被忽略。

推荐使用Exec格式执行命令,例如:CMD ["ps","-ef"]

3.ENTRYPOINT

ENTRYPOINT(入口点)用于在容器启动时执行命令。

Dockerfile中只有最后一个ENTRYPOINT会被执行。

推荐使用Exec格式执行命令,例如:ENTRYPOINT ["ps"]

三个执行命令的区别示意图:

使用案例

下面用用例子来说明命令的用法,新建Dockerfile文件,文件中内容为:

FROM centos
RUN echo "image building!!"
CMD ["echo","container starting...."]

将Dockerfile文件放入到/usr/local目录中,然后命令窗口切换到/usr/local路径下,执行创建镜像的命令:

docker build -t shell .

创建名为shell的镜像

 从执行结果可以看出,CMD命令对应的container starting....没有被输出。

运行镜像,创建容器:

docker run shell

此时CMD命令被执行。

接着把Dockerfile文件中的内容进行修改,写两个CMD命令

FROM centos
RUN echo "image building!!"
CMD ["echo","container starting...."]
CMD ["echo","容器正在启动...."]

重新构建镜像

docker build -t shell .

运行镜像,生成容器

docker run shell

输出的CMD命令,只有最后一个。

CMD可以被命令行的内容覆盖,也就是说命令行的优先级更高。

下面看看ENTRYPOINT的用法,把Dockerfile文件中的CMD改为ENTRYPOINT。

FROM centos
RUN echo "image building!!"
ENTRYPOINT ["echo","我是ENTRYPOINT输出信息1"]
ENTRYPOINT ["echo","我是ENTRYPOINT输出信息2"]

重新构建镜像

docker build -t shell .

运行镜像,生成容器

docker run shell

从上面信息可以看到,ENTRYPOINT同CMD一样,多个ENTRYPOINT时,只有最后一个命令会被执行,前面的不会执行。

这么看好像ENTRYPOINT同CMD一样,没有区别,两个都是在容器创建时被执行,且都是只有最后一个被执行。

这只是它们的相同点,它们的应用场景其实不同。ENTRYPOINT用来编写固定的命令,CMD用来写默认命令。比如现在要执行 ps -ef命令,查看所有进程的详细信息。

Dockerfile文件中的内容进行如下:

FROM centos
RUN echo "image building!!"
ENTRYPOINT ["ps"]
CMD ["-ef"]

重新构建镜像

docker build -t shell .

运行镜像,生成容器

docker run shell

可以看到 ps -ef命令被执行,也就是说CMD的特点是用来作为默认值。

CMD还允许被动态修改,比如把 -ef 改为 -aux

也就是说在运行命令时,如果不添加参数,那就用CMD的值,如果添加了参数,那么CMD的值将被动态修改为新的值。

在大多数情况下,ENTRYPOINT后面跟的是固定命令,CMD后面写的是可以灵活变化的参数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值