CMD和ENTRYPOINT

复制代码
CMD特性:
 1)启动容器默认执行的命令
 2)如果docker run指定了其他命令,cmd命令会被忽略
 3)如果定义了多个cmd,只有最后一个会执行
案例:
[root@master dockerfile]# cat Dockerfile
FROM alpine
LABEL mainter='test dockerfile'
LABEL auth="zhouzhiguo"
ENV name Docker
CMD echo $name
[root@master dockerfile]# docker build -t alpine:cmd-shell .
# 启动容器时,执行默认的命令,即 echo $name 输出Docker
[root@master dockerfile]# docker run -it --rm alpine:cmd-shell
Docker
# 启动容器时指定了其他命令ls,此时echo $name会被忽略,执行ls命令
[root@master dockerfile]# docker run -it --rm alpine:cmd-shell ls
bin    etc    lib    mnt    proc   run    srv    tmp    var
dev    home   media  opt    root   sbin   sys    usr

案例: 当定义多个cmd时,只有最后一个会执行,即 echo "hello $name"会被执行 ,输出结果 hello Docker
[root@master dockerfile]# cat Dockerfile
FROM alpine
LABEL mainter='test dockerfile'
LABEL auth="zhouzhiguo"
ENV name Docker
CMD echo $name
CMD echo "hello $name"
[root@master dockerfile]# docker build -t alpine:cmd-shell-new .
[root@master dockerfile]# docker run -it --rm alpine:cmd-shell-new
hello Docker




ENTRYPOINT:启动容器正在执行的命令
1)让容器以应用或者服务的形式运行
2)不会被忽略,一定会执行
3)最佳实践,写一个shell脚本作为entrypoint
如果dockerfile中也有CMD指令,CMD中的参数会被附加到ENTRYPOINT 指令的后面。 如果这时docker run命令带了参数,这个参数会覆盖掉CMD指令的参数,并也会附加到ENTRYPOINT 指令的后面。
案例:
[root@master dockerfile]# cat Dockerfile
FROM alpine
LABEL mainter='test dockerfile'
LABEL auth="zhouzhiguo"
ENV name Docker
CMD ["Docker"]
ENTRYPOINT ["echo"]
[root@master dockerfile]# docker build -t alpine:entrypoint .
# docker run未指定参数,相当于执行 echo Docker,即输出Docker [root@master dockerfile]# docker run
-it --rm alpine:entrypoint Docker
# dockr run指定参数,python会覆盖cmd指定参数Docker,并附追加到entrypoint指令后面,即执行echo python,输出python [root@master dockerfile]# docker run
-it --rm alpine:entrypoint python python
复制代码

 

posted @   Linux_Boy  阅读(176)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示