Docker教程小白实操入门(14)--如何使用CMD和ENTRYPOINT指令指定容器启动时要运行的命令

网友投稿 257 2022-10-22

Docker教程小白实操入门(14)--如何使用CMD和ENTRYPOINT指令指定容器启动时要运行的命令

一、需求

为容器启动时指定需要运行的命令

二、CMD指令指定容器启动时运行的命令

# (shell格式)CMD # 或 (exec格式,推荐格式)CMD [“executable”,”param1”,”param2”]# 或 (为ENTRYPOINT指令提供参数)CMD[”param1”,”param2”]

例如:

# 等同于CMD echo $HOMECMD [ "sh", "-c", "echo $HOME" ]

#先创建一个新的空文件夹mkdir newdir#进入这个新文件夹中cd newdir#创建一个Dockerfile文件touch Dockerfile# 补全Dockerfile的内容(为了方便展示,这里用的是echo向Dockerfile中输入内容)# linux中>表示覆盖原文件内容,>>表示追加内容。echo "FROM ubuntu" > Dockerfile# 注意双引号需要转义,其它不需要echo "CMD [\"sh\", \"-c\", \"echo $HOME\"]" >> Dockerfile#使用该Dockerfile构建一个名为myubuntu的镜像,注意这个小数点docker build -t myubuntu .# 创建容器docker run myubuntu

​​CMD​​​指令提供容器启动时运行的默认命令,例如​​ubuntu​​​镜像默认的​​CMD​​​是​​/bin/bash​​​,因此我们可以直接使用 ​​docker run -it ubuntu​​​进入​​bash​​

# 将Dockerfile中CMD设置的默认启动命令覆盖,也就是说:cat /etc/os-release命令会替代成为容器的启动命令,所以输出了系统版本信息docker run -it ubuntu cat /etc/os-release

三、ENTRYPOINT指令指定容器启动时运行的命令

# (shell格式)ENTRYPOINT # 或 (exec格式,推荐格式)ENTRYPOINT ["executable","param1","param2"]

四、CMD指令和ENTRYPOINT指令区别

1. 用户在执行​​docker run​​​命令创建并启动容器时,如果指定了启动命令,那么“该启动命令”会覆盖​​CMD​​​指令设置的默认启动命令,但是​​ENTRYPOINT​​设置的启动命令该不能被覆盖。

​​2. CMD​​​命令可以为​​ENTRYPOINT​​指令提供参数

五、实例

1. 使用CMD指令

需要一个得知使用者当前公网​​IP​​的镜像

#先创建一个新的空文件夹mkdir newdir#进入这个新文件夹中cd newdir#创建一个Dockerfile文件touch Dockerfile# 补全Dockerfile的内容(为了方便展示,这里用的是echo向Dockerfile中输入内容)# linux中>表示覆盖原文件内容,>>表示追加内容。echo "FROM centos" > Dockerfileecho "RUN yum install curl" >> Dockerfile# 注意双引号需要转义,其它不需要echo "CMD [\"curl\",\"-s\",\">> Dockerfile#使用该Dockerfile构建一个名为myip的镜像,注意这个小数点docker build -t myip .# 创建容器docker run myip

如果我们要给上面的命令加参数

# 错误docker run myip -i# 正确docker run myip curl -s –i

如果是用ENTRYPOINT就可以解决这个问题

2. 使用ENTRYPOINT固定命令

#先创建一个新的空文件夹mkdir newdir#进入这个新文件夹中cd newdir#创建一个Dockerfile文件touch Dockerfile# 补全Dockerfile的内容(为了方便展示,这里用的是echo向Dockerfile中输入内容)# linux中>表示覆盖原文件内容,>>表示追加内容。echo "FROM centos" > Dockerfileecho "RUN yum install curl" >> Dockerfile# 注意双引号需要转义,其它不需要echo "ENTRYPOINT [\"curl\",\"-s\",\">> Dockerfile#使用该Dockerfile构建一个名为myip的镜像,注意这个小数点docker build -t myip .# 创建容器docker run myip# 可以加参数,docker run命令ENTRYPOINT不会被覆盖。它会作为参数传给ENTRYPOINT,从而达到了我们预期的结果。docker run myip -i

3. 使用ENTRYPOINT固定部分命令,使用CMD允许替换部分命令(参数)

默认情况下,将启动命令设置为​​df -Th​​​。要求​​df​​​命令不能被覆盖,但​​-Th​​​能够被覆盖;(​​df​​命令用来查看磁盘的信息)

#先创建一个新的空文件夹mkdir newdir3#进入这个新文件夹中cd newdir3#创建一个Dockerfile文件touch Dockerfile# 补全Dockerfile的内容(为了方便展示,这里用的是echo向Dockerfile中输入内容)# linux中>表示覆盖原文件内容,>>表示追加内容。echo 'FROM busybox' > Dockerfileecho 'ENTRYPOINT ["df"]'>> Dockerfileecho 'CMD ["-Th"]'>> Dockerfile#使用该Dockerfile构建一个名为myip的镜像,注意这个小数点docker build -t mydisk .# 创建容器docker run mydisk# 带参数docker run mydisk -i

参考:​​https://educoder.net/shixuns/zawfjtnm/challenges​​

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Docker教程小白实操入门(18)--如何挂载和共享数据卷
下一篇:mybatis如何使用truncate清空表
相关文章

 发表评论

暂时没有评论,来抢沙发吧~