ADD,COPY,ENTRYPOINT和cmd

Dockerfile中有关信息:

ADD与COPY区别

add:1、对压缩包进行解压2、可以在后面直接跟文件地址
copy:把本地的文件copy到容器里面


ENTRYPOINT与CMD区别
1、第一种解释(借鉴别人):

CMD指定的命令可以被docker run传递的命令覆盖,例如,如果用CMD指定:CMD ["echo"]
然后运行docker run CONTAINER_NAME echo foo,
那么CMD里指定的echo会被新指定的echo覆盖,所以最终相当于运行echo foo,所以最终打印出的结果就是:foo

而ENTRYPOINT会把容器名后面的所有内容都当成参数传递给其指定的命令(不会对命令覆盖),比如:ENTRYPOINT ["echo"]
然后运行docker run CONTAINER_NAME echo foo,则CONTAINER_NAME后面的echo foo都作为参数传递给ENTRYPOING里指定的echo命令了,所以相当于执行了
echo "echo foo"
最终打印出的结果就是:
echo foo

另外,在Dockerfile中,ENTRYPOINT指定的参数比运行docker run时指定的参数更靠前,比如:ENTRYPOINT ["echo", "foo"]
执行docker run CONTAINER_NAME bar,相当于执行了:echo foo bar
打印出的结果就是:foo bar

Dockerfile中只能指定一个ENTRYPOINT,如果指定了很多,只有最后一个有效。
执行docker run命令时,也可以添加-entrypoint参数,会把指定的参数继续传递给ENTRYPOINT,例如:
ENTRYPOINT ["echo","foo"]然后执行:docker run CONTAINER_NAME bar #注意没有echo
那么,就相当于执行了echo foo bar,最终结果就是foo bar

执行ENTRYPOINT时,需要下载docker-entrypoint.sh文件
https://github.com/docker-library/mysql/tree/c207cc19a272a6bfe1916c964ed8df47f18479e7/5.7

2、第二种解释

CMD:
Dockerfile中内容:
CMD["/bin/echo","this is test CMD"]
docker build -t csphere/cmd:0.1 .
如果运行docker run -it cdphere/cmd:0.1
结果是:this is test CMD
如果运行docker run -it csphere/cmd:0.1 /bin/bash
结果是:/bin/bash会把/bin/echo覆盖,进入容器内部

ENTRYPOINT:
ENTRYPOINT["/bin/echo","this is test ENTRYPOINT"]
docker build -t csphere/entrypoint:0.1 .
如果运行docker run -it csphere/entrypoint:0.1
结果是:this is test ENTRYPOINT
如果运行docker run -it csphere/entrypoint:0.1 /bin/bash
结果是:this is test ENTRYPOINT /bin/bash
/bin/bash是不能把/bin/echo给覆盖掉的

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值