一 回顾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} --> 删除全部'非运行态'的容器
悬浮镜像dangling image 产生的原因和处理方法
+++++++++++++++ "悬空镜像的特征" +++++++++++++++
1)* 没有被其他镜像'引用'
2) * 在'docker images'的输出中,列'TAG'为'<none>'值
3) * 在'docker images'的输出中,列''REPOSITORY''为可能有值
④ save 和 load
docker save -o (--output) *.tar 镜像名 --> 一般将'镜像'打成'tar'包
备注: 也可以通过 '>' 重定向保存
docker load -i (--input) images.tar --> 将'tar'加载成镜像
备注: 也可以通过 '<' 读取tar文件
⑤⑥⑦⑧⑨⑩
二 Dockerfile指令的回顾
官网Dockerfile参考
① Dockerfile指令之RUN
+++++++++++++++++ "重点" +++++++++++++++++
1)RUN 执行的命令不是'宿主机的',而是'基镜像'带的
2)Dockerfile中可以有许'多个RUN命令',避免镜像'过多'分层,一般使用一个RUN通过'&&'连接
说明: 每执行一次'RUN',镜像就'增加'一层
3)场景: 一般做一些'初始化'或'安装'软件的动作
4)两种'执行'模式
RUN <command> --> 'shell 模式(常用)'
RUN ["executable", "param1", "param2"] --> 'exec' 模式 -->"json数组"、"双引号"
② Dockerfile指令之CMD
备注: 容器'启动'后执行的'默认'命令
1)以"exec"模式运行一个'可执行'的文件并提供参数
2)作为'ENTRYPOINT'指定参数
3)以"shell form",也即以"/bin/sh -c"的方法执行命令
+++++++++++++ "如何改变容器启动命令的默认行为" +++++++++++++
1)通过 docker run 传递 '命令或参数'
③ Dockerfile指令之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的辨析
文章来源:https://www.toymoban.com/news/detail-460326.html
⑤ 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模板网!