Docker教程小白实操入门(14)

您所在的位置:网站首页 cmd怎么停止命令执行 Docker教程小白实操入门(14)

Docker教程小白实操入门(14)

2024-02-07 06:37| 来源: 网络整理| 查看: 265

一、需求

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

 

二、CMD指令指定容器启动时运行的命令 # (shell格式) CMD # 或 (exec格式,推荐格式) CMD [“executable”,”param1”,”param2”] # 或 (为ENTRYPOINT指令提供参数) CMD[”param1”,”param2”]

例如:

# 等同于CMD echo $HOME CMD [ "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" > Dockerfile echo "RUN yum install curl" >> Dockerfile # 注意双引号需要转义,其它不需要 echo "CMD [\"curl\",\"-s\",\"http://cip.cc\"]" >> Dockerfile #使用该Dockerfile构建一个名为myip的镜像,注意这个小数点 docker build -t myip . # 创建容器 docker run myip

 

 

 

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

# 错误 docker run myip -i # 正确 docker run myip curl -s http://ip.cn –i

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

 

2. 使用ENTRYPOINT固定命令 #先创建一个新的空文件夹 mkdir newdir #进入这个新文件夹中 cd newdir #创建一个Dockerfile文件 touch Dockerfile # 补全Dockerfile的内容(为了方便展示,这里用的是echo向Dockerfile中输入内容) # linux中>表示覆盖原文件内容,>>表示追加内容。 echo "FROM centos" > Dockerfile echo "RUN yum install curl" >> Dockerfile # 注意双引号需要转义,其它不需要 echo "ENTRYPOINT [\"curl\",\"-s\",\"http://cip.cc\"]" >> 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' > Dockerfile echo 'ENTRYPOINT ["df"]'>> Dockerfile echo 'CMD ["-Th"]'>> Dockerfile #使用该Dockerfile构建一个名为myip的镜像,注意这个小数点 docker build -t mydisk . # 创建容器 docker run mydisk # 带参数 docker run mydisk -i

 

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



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3