Docker之RUN、COMMAND、ENTRYPOINT辨析

这篇具有很好参考价值的文章主要介绍了Docker之RUN、COMMAND、ENTRYPOINT辨析。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一  回顾docker一些命令

①  run create start 的辨析

docker 'run'   '等价'  docker 'create' && docker 'start'

容器(动态) = 镜像(静态) '+' 读写层

1) create 命令为'指定的镜像(image)'添加了一个'可读写层',构成了一个'新'的容器

  注意:这个容器并'没有'运行

2) start命令为'容器文件系统'创建了一个'进程'隔离空间

  注意:每一个容器'只能够有一个'进程隔离空间

3) run 命令'先是'利用镜像创建了一个容器,然后'运行'这个容器

  注意:这个命令'隐藏了'两个'create、start'命令的细节

②  获取容器在宿主机的PID

docker inspect -f '{{ .State.Pid }}' container_name

备注: 在容器内表现为'pid=1'

tail /proc/${Pid}/cmdline;echo  --> 查看'进程信息'

docker inspect --format详解 

③  容器资源使用

1)直接  --> 使用docker stats命令来'显示'容器使用的'系统资源'

  --no-stream :展示'当前状态'就直接退出了,不再实时更新

  --no-trunc  :'不截断'输出,会'动态'刷新

 现象: 默认情况下,stats 命令会'每隔 1 秒钟'刷新一次输出的内容直到你按下 'ctrl + c'

 常用: docker stats --no-trunc container_id --> 可以查看'指定'container

2)间接  -->  核心是获取'容器'所对应所在宿主机'PID',就可以使用'top、pmap、ps'等命令

④  查看容器的完整命令

docker ps --no-trunc               --> 显示容器内'服务启动''完整'的命令

docker ps -q                       --> '静默'模式,只显示'容器编号'

docker ps -s                       --> 查看容器所占的'磁盘'大小

docker rm ${docker ps -q -a}       --> 删除全部'非运行态'的容器

Docker之RUN、COMMAND、ENTRYPOINT辨析 

Docker之RUN、COMMAND、ENTRYPOINT辨析 

悬浮镜像dangling image 产生的原因和处理方法

+++++++++++++++  "悬空镜像的特征"  +++++++++++++++

1)* 没有被其他镜像'引用'
	
2) * 在'docker images'的输出中,列'TAG'为'<none>'值

3) * 在'docker images'的输出中,列''REPOSITORY''为可能有值

Docker之RUN、COMMAND、ENTRYPOINT辨析 

④  save 和 load

docker save -o (--output) *.tar   镜像名  --> 一般将'镜像'打成'tar'包  

备注: 也可以通过 '>' 重定向保存

docker load -i (--input) images.tar     --> 将'tar'加载成镜像

备注: 也可以通过 '<' 读取tar文件

⑤⑥⑦⑧⑨⑩ 

二   Dockerfile指令的回顾

官网Dockerfile参考

①  Dockerfile指令之RUN

Docker之RUN、COMMAND、ENTRYPOINT辨析 

+++++++++++++++++ "重点" +++++++++++++++++

1)RUN 执行的命令不是'宿主机的',而是'基镜像'带的

2)Dockerfile中可以有许'多个RUN命令',避免镜像'过多'分层,一般使用一个RUN通过'&&'连接

   说明: 每执行一次'RUN',镜像就'增加'一层

3)场景: 一般做一些'初始化'或'安装'软件的动作

4)两种'执行'模式

  RUN <command>                          --> 'shell 模式(常用)'

  RUN ["executable", "param1", "param2"] --> 'exec' 模式 -->"json数组"、"双引号"

Docker之RUN、COMMAND、ENTRYPOINT辨析 

②  Dockerfile指令之CMD

备注: 容器'启动'后执行的'默认'命令

Docker之RUN、COMMAND、ENTRYPOINT辨析

1)以"exec"模式运行一个'可执行'的文件并提供参数

2)作为'ENTRYPOINT'指定参数

3)以"shell form",也即以"/bin/sh -c"的方法执行命令

Docker之RUN、COMMAND、ENTRYPOINT辨析 

+++++++++++++ "如何改变容器启动命令的默认行为"  +++++++++++++

1)通过 docker run 传递 '命令或参数'

③  Dockerfile指令之ENTRYPOINT

Docker之RUN、COMMAND、ENTRYPOINT辨析

+++++++++++++++  'ENTRYPOINT和CMD'的'异同'点  +++++++++++++++

1)ENTRYPOINT 指令与 CMD 指令几乎一样,都是在容器启动时自动执行的指令,且只有'最后'一个有效

2)而 ENTRYPINT 与 CMD 的'不同', 主要体现在'两'方面: 

 [1]、一是'ENTRYPOINT执行的命令'不易被覆盖,但是可以通过'--entrypoint覆盖'

 [2]、 二是用于'用户传参'

  (1) docker run 中有[COMMAND],会'覆盖'CMD指令,追加作为'ENTRYPOINT 指令'的参数

   场景: 需要'用户传参'进行初始化

  (2) docker run 中'没有'[COMAMND],此时 CMD 指令的内容便会成为ENTRYPOINT的'默认'参数

docker run 官方参考

④  三者辨析

CMD and ENTRYPOINT的辨析

Docker之RUN、COMMAND、ENTRYPOINT辨析

Docker之RUN、COMMAND、ENTRYPOINT辨析

⑤  k8s的command和args文章来源地址https://www.toymoban.com/news/detail-460326.html

重点: 理解为'docker run'传递的参数即可,但是有'细小'的差异

1)当用户'同时写了command和args'的时候可以'覆盖'Dockerfile的命令行和参数

 说明: 同时覆盖'CMD和ENTRYPOINT',推荐这种'dynamic'方式

2)如果command和args'均没有写',那么用Dockerfile'默认'的配置

3)如果command写了,但'args没有写',仅执行.yml文件'不带任何参数的'的command

 说明: 同时覆盖Dockerfile中的'CMD和ENTRYPOINT'

4)如果'command没写',但'args写了',Docker'默认'配置的ENTRYPOINT的命令行会'被执行'

 说明: 'args'追加为'ENTRYPOINT'的参数

重点: 要了解'Dockerfile'的内容,才能用k8s的'comamnd和args'更好的编排

到了这里,关于Docker之RUN、COMMAND、ENTRYPOINT辨析的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • docker: CMD和ENTRYPOINT的区别

    ENTRYPOINT: 容器的执行命令(属于正统命令) 可以使用 --build-arg ENVIROMENT=integration 参数覆盖 ocker build --build-arg ENVIROMENT=integration 两者同时存在时 CMD 作为 ENTRYPOINT 的默认参数使用 外部提供参数会覆盖 CMD 提供的参数。 CMD单独存在时 CMD 替代 ENTRYPOINT 作为容器的执行命令 外部命

    2024年02月14日
    浏览(57)
  • Docker中,CMD 和 ENTRYPOINT 的区别,简单!明了!

    目录 CMD 和 ENTRYPOINT的区别:结论篇 CMD 和 ENTRYPOINT的其他细节结论 测试篇 一、 CMD的两种格式完全等效,但是ENTRYPOINT两种格式是有区别的 二、 docker run 命令替代了dockerfile的CMD命令 三、 docker run 命令在ENTRYPOINT的键值对格式下,是作为ENTRYPOINT命令的参数,docker run wx-centos ls -

    2024年02月05日
    浏览(43)
  • Docker 制作 MySQL 镜像并使用 `/docker-entrypoint-initdb.d/` 机制初始化数据

    制作一个 MySQL Docker 镜像并初始化数据库信息 win 11 Docker-Desktop 4.14.0 (91374) 启动一个MySQL容器很容易。如何初始化数据呢? 大概我们会尝试很多操作,比如百度常见到 使用 CMD 命令调用shell脚本,通过shell脚本处理初始化数据等等,经过实践,这些都不太方便。 其实,MySQL 官方提

    2024年01月18日
    浏览(143)
  • Docker、Kubernetes(K8s)和KVM辨析

    Docker、Kubernetes(K8s)和KVM都是虚拟化技术,但它们各自的应用场景和功能有所不同。 Docker是一种轻量级的虚拟化技术,它允许开发者将应用程序及其依赖项打包到一个可移植的容器中,然后在任何运行Docker的服务器上部署。与传统的虚拟机相比,Docker容器提供了一种轻量级

    2024年02月21日
    浏览(66)
  • docker 系列之 Dockerfile 文件里 cmd命令与entrypoint命令区别

    cmd给出的是一个容器的默认的可执行体。也就是容器启动以后,默认的执行的命令。重点就是这个“默认”。意味着,如果docker run没有指定任何的执行命令或者dockerfile里面也没有entrypoint,那么,就会使用cmd指定的默认的执行命令执行。同时也从侧面说明了entrypoint的含义,它

    2024年02月05日
    浏览(56)
  • 使用docker-compose启动docker镜像报错exec ./docker-entrypoint.sh: no such file or directory

    报错原因:exec ./docker-entrypoint.sh: no such file or directory 我们可以在linux下通过cat -v命令查看.sh文件   例: cat -v Dockerfile         WORKDIR /tools/*******/^M         RUN chmod a+x /tools/*********/docker-entrypoint.sh^M         ENTRYPOINT [\\\"./docker-********.sh\\\"]^M 这种后缀有^M的即为编码错误造成的

    2024年02月15日
    浏览(42)
  • docker容器日志报错:/docker-entrypoint.sh: exec: line 10: /bin/bash: not found(去掉/bin/bash)

    这个错误提示表明eclipse-mosquitto镜像生成的容器内部找不到 /bin/bash 这个命令,可能是由于在容器镜像中没有安装 Bash 或在执行脚本时路径不正确导致的。如果你使用的是官方的 eclipse-mosquitto 镜像,那么这个问题一般不会出现。 如果你在 Dockerfile 中指定了自己的 ENTRYPOINT 或

    2024年02月09日
    浏览(43)
  • 【Docker】docker run 命令详解

    Docker运行命令是在Docker中启动容器的主要方式之一。它是Docker CLI(命令行界面)中的基本命令之一,用于启动容器。 在这个语法中,“OPTIONS”包含了一些参数,用于配置和控制容器的各种方面。“IMAGE”是要使用的Docker镜像。“COMMAND”是在容器内执行的命令,“ARG”是该命

    2024年02月16日
    浏览(39)
  • docker run 与 docker start区别

    说明, docker run 和docker start 都是运行一个docker容器, 区别在于 1. docker run (使用镜像image) 2. docker start (使用容器ID或是容器NAMES)

    2024年02月14日
    浏览(49)
  • docker pull、docker load、docker run使用方法

    docker pull是从网络上下载镜像。对于镜像来说,如果不显式地指定tag,则默认会选择latest标签,即下载仓库中最新版本的镜像。 这里以下载nvidiadocker为例: 执行上方命令就可以下载这个连接中的镜像了 下载后可以使用 命令查看本机所有镜像,上方下载的镜像也会显示出来。

    2023年04月13日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包