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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?