在线精品99_中国九九盗摄偷拍偷看_91免费版在线观看_91.app_91高清视频在线_99热最新网站

Linux中CMD指令怎么用

115次阅读
没有评论

共计 2360 个字符,预计需要花费 6 分钟才能阅读完成。

这篇文章主要为大家展示了“Linux 中 CMD 指令怎么用”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让丸趣 TV 小编带领大家一起研究并学习一下“Linux 中 CMD 指令怎么用”这篇文章吧。

Dockerfile 中只能有一条 CMD 指令。如果列出多个,CMD 则只有最后一个 CMD 会生效。CMD 主要目的是为运行容器时提供默认值。

Docker 不是虚拟机,容器就是进程,CMD 指令就是用于指定默认的容器主进程的启动命令的。在启动 (运行) 一个容器时可以指定新的命令来替代镜像设置中的这个默认命令。

可以包含可执行文件,当然也可以省略。CMD 指令的格式和 RUN 相似,也是两种格式:

shell 格式:CMD 命令 exec 格式:CMD [可执行文件 , 参数 1 , 参数 2 …]参数列表格式:CMD [参数 1 , 参数 2 …]。在指定了 ENTRYPOINT 指令后,用 CMD 指定具体的参数。

注意:不要混淆 RUN 和 CMD。RUN 实际上运行一个命令并提交结果; CMD 在构建时不执行任何操作,但指定镜像的默认命令。

Linux 中 CMD 指令怎么用

插个小消息,也方便想学习的同学,在文章下方留言即可试听课程外加领取千锋 HTML5、UI 交互设计、PHP、Java+ 云数据、大数据开发、VR/AR/Unity 游戏开发、Python 人工智能、Linux 云计算、全栈软件测试、网络安全等全部的视频学习教程。

Docker 不是虚拟机,容器内没有后台服务的概念。不要期望这样启动一个程序到后台:

CMD systemctl start nginx

这行被 Docker 理解为:

CMD [sh -c systemctl start nginx]

对于容器而言,其启动程序就是容器的应用进程,容器就是为了主进程而存在的,主进程退出,容器就失去了存在的意义,从而退出,其它辅助进程不是它需要关心的东西。

就像上面的示例中,主进程是 sh , 那么当 service nginx start 命令结束后,sh 也就结束了,sh 作为主进程退出了,自然就会使容器退出。

Linux 中 CMD 指令怎么用

正确的做法是直接执行 nginx 这个可执行文件,并且关闭后台守护的方式,使程序在前台运行。

CMD [nginx , -g , daemon off;]

ENTRYPOINT 指令

ENTRYPOINT 的目的和 CMD 一样,都是在指定容器的启动程序及参数。

ENTRYPOINT 在运行时也可以被替代,不过比 CMD 要略显繁琐,需要通过 docker run 的参数 –entrypoint 来指定。

ENTRYPOINT 的格式和 RUN 指令格式一样,也分为 exec 格式和 shell 格式。

当指定了 ENTRYPOINT 后,CMD 的含义就发生了改变,不再是直接的运行其命令,而是将 CMD 的内容作为参数传给 ENTRYPOINT 指令,也就是实际执行时,将变为:

ENTRYPOINT CMD

有了 CMD 后,为什么还要有 ENTRYPOINT 呢?

这种 ENTRYPOINT CMD 给我们带来了什么好处么?

让我们来看几个场景。

场景一:让镜像变成像命令一样使用

CMD 方式

FROM centos

RUN yum update \

yum install -y curl

CMD [curl , -s , http://ip.cn]

构建镜像后, 运行容器

# docker run –rm centos-echo-ip-cmd

执行下面命令会报错

# docker run –rm centos-echo-ip-cmd -i

我们可以看到报错,executable file not found。之前我们说过,跟在镜像名后面的是 command,运行时会替换 CMD 的默认值。因此这里的 -i 并不是添加在原来的 curl -s http://ip.cn 后面。而是替换了原来的 CMD,变成了 CMD [-i],而 -i 根本不是命令,所以报了可执行文件找不到。

所以应该使用 ENTRYPOINT 方式

FROM centos

RUN yum install -y curl

ENTRYPOINT [curl , -s , http://ip.cn]

再次构建镜像后, 运行容器

# docker run –rm centos-echo-ip-entrypoint

# docker run –rm centos-echo-ip-entrypoint -i

这样的话, 最终的指令就变成 ENTRYPOINT [curl , -s , http://ip.cn , -i]

场景二:应用运行前的准备工作

启动容器就是启动主进程,但有些时候,启动主进程前,需要一些准备工作。

官方镜像 redis 中的示例:

FROM alpine:3.4

RUN addgroup -S redis adduser -S -G redis redis

ENTRYPOINT [docker-entrypoint.sh]

EXPOSE 6379

CMD [redis-server]

可以看到其中为 redis 服务创建了 redis 用户,并在最后指定了 ENTRYPOINT 为 docker-entrypoint.sh 脚本。

#!/bin/sh

# allow the container to be started with `–user`

if [$1 = redis-server -a $(id -u) = 0 then

chown -R redis .

exec gosu redis $0 $@

fi

exec $@

该脚本的内容就是根据 CMD 的内容来判断,如果是 redis-server 的话,则切换到 redis 用户身份启动服务器,否则依旧使用 root 身份执行。比如:

$ docker run -it redis id

uid=0(root) gid=0(root) groups=0(root)

还有 ENTRYPOINT 指令不会被 RUN 指令覆盖,而 CMD 指令会被 RUN 指令覆盖。

以上是“Linux 中 CMD 指令怎么用”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注丸趣 TV 行业资讯频道!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-08-25发表,共计2360字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)
主站蜘蛛池模板: 236宅宅理论片免费 24小时日本在线www免费的 | 草逼综合| 久久精品免视着国产成人 | 亚洲综合无码无在线观看 | 欧性猛交ⅹxxx乱大交 | 永久免费毛片 | 国产特黄1级毛片 | 热综合一本伊人久久精品 | 一级毛片直接看 | 一级毛片免费毛片一级毛片免费 | 熟妇人妻中文字幕无码老熟妇 | 欧美裸体xxxx极品少妇 | 精产国品一二三产品蜜桃 | 人妻无码熟妇乱又伦精品视频 | 亚洲欧洲国产综合 | 亚洲国产爱 | 草草视频手机在线观看视频 | 四虎4hu永久免费视频大全 | 国产精品亚洲精品 | 亚洲男人天堂色 | 性色做爰片在线观看ww | 中文字幕中文有码在线 | 无码国产精品一区二区免费式影视 | 另类专区 亚洲 | 亚洲亚洲人成综合网络 | 性色av一区二区三区夜夜嗨 | 日韩欧美一区二区三区中文精品 | 免费久草视频 | 国产区成人综合色在线 | 亚洲国产精品一区二区不卡 | 国产成人综合在线视频 | 久久99这里只有精品 | 精品国产精品a | 午放福利视频在线播放 | 麻豆视频一区二区三区 | 欧美xxxx黑人又粗又长精品 | 国产精品久久久久久 | 一本一道av无码中文字幕﹣百度 | 日本爽快片毛片 | 最近免费中文字幕mv在线视频3 | 九九综合九色综合网站 |