5.DockerFile 解析

什么是 Dockerfile

  • Dockerfile 是用来构建 Docker 镜像的文本文件,是由一条条构建镜像所需的指令和参数构成的脚本。
  • 官网:https://docs.docker.com/engine/reference/builder/
  • 构建三步骤:编写 Dockerfile 文件-->docker build 命令构建镜像-->docker run 依镜像运行容器实例

DockerFile 构建过程解析

bash
docker build -t 机构/镜像名<:tags> Dockerfile目录
  • Dockerfile 内容基础知识
  • 1:每条保留字指令都必须为大写字母且后面要跟随至少一个参数
  • 2:指令按照从上到下,顺序执行
  • 3:#表示注释
  • 4:每条指令都会创建一个新的镜像层并对镜像进行提交

Docker执行 Dockerfile 的大致流程

  • 1)docker 从基础镜像运行一个容器
  • 2)执行一条指令并对容器作出修改
  • 3)执行类似 docker commit 的操作提交一个新的镜像层
  • 4)docker 再基于刚提交的镜像运行一个新容器
  • 5)执行 dockerfile 中的下一条指令直到所有指令都执行完成

DockerFile 常用保留字指令

  • FROM:基础镜像,当前新镜像是基于哪个镜像的,指定一个已经存在的镜像作为模板,第一条必须是 from
  • MAINTAINER:镜像维护者的姓名和邮箱地址
  • RUN:容器构建时需要运行的命令
  • EXPOSE:当前容器对外暴露出的端口
  • WORKDIR:指定在创建容器后,终端默认登陆的进来工作目录,一个落脚点
  • USER:指定该镜像以什么样的用户去执行,如果都不指定,默认是 root
  • ENV:用来在构建镜像过程中设置环境变量
  • ADD:将宿主机目录下的文件拷贝进镜像且会自动处理 URL 和解压 tar 压缩包
  • COPY:类似 ADD,拷贝文件和目录到镜像中。 将从构建上下文目录中 <源路径>的文件/目录复制到新的一层的镜像内的 <目标路径> 位置
  • VOLUME:容器数据卷,用于数据保存和持久化工作
  • CMD:指定容器启动后的要干的事情
  • ENTRYPOINT:也是用来指定一个容器启动时要运行的命令。类似于 CMD 指令,但是 ENTRYPOINT 不会被 docker run 后面的命令覆盖,而且这些命令行参数会被当作参数送给 ENTRYPOINT 指令指定的程序

执行命令

运行命令的方式

Shell 命令方式

bash
bash
RUN yum install -y vim
  • 使用 Shell 执行时,当前 shell 是父进程,生一个子 shell 进程
  • 在子 shell 中执行脚本,执行完毕后,退出子 shell,回到当前 shell
  • 子 shell 退出后,不会对父进程产生影响

Exec 命令方式

bash
bash
RUN ["yum", "install", "-y", "vim"]
  • 会用 Exec 进程替换当前进程,并保持 pid 不变
  • 执行完毕后,直接退出,并不会退回到之前的进程环境
  • 推荐使用 Exec 方式来执行命令

镜像创建时执行的命令

run

  • 在 build 构建时执行命令
  • 在构建镜像时执行的命令
  • 对镜像内部的文件或者资源进行调整,一旦镜像被创建以后,就不可以再被修改

容器创建时执行的命令

cmd

  • 容器启动后,执行默认的参数或命令
  • 用于设置默认执行的命令
  • Dockfile 中出现 多个cmd,只有 最后一个 才会被执行
  • 如果容器启动时,在启动后添加了命令,则 Dockfile 中添加的 cmd 指定会被忽略
  • 写在 Dockfile 中的 cmd 命令不一定会被执行
dockerfile
dockerfile
CMD ["ps", "-ef"]

entrypoint

  • 容器启动时执行的命令
  • Dockerfile 中只有最后一个 ENTRYPOINT 会被执行
  • ENTRYPOINT 一定会被执行,如果有多个只会执行最后一个
dockerfile
dockerfile
ENTRYPOINT ["ps"]

posted @ 2022-05-14 22:26  鱼檬檬  阅读(54)  评论(0编辑  收藏  举报
  1. 1 缓缓 杜宣达
  2. 2 乌梅子酱 李荣浩
  3. 3 Plain Jane(Remix 13z) 鱼幼微
  4. 4 放空 大籽/Lil E/A1 TRIP
  5. 5 银河与星斗 yihuik苡慧
  6. 6 坏女孩 徐良/小凌
  7. 7 假面舞会 很美味
  8. 8 你画的彩虹 姜洋
  9. 9 不再犹豫 Beyond
  10. 10 童话 光良
  11. 11 不可撤销乐队
  12. 12 山楂树之恋 程佳佳
  13. 13 夏天的风 火羊瞌睡了
  14. 14 老人与海 苗田雨
  15. 15 爸爸妈妈 李荣浩
  16. 16 樱花草 (翻自 sweety) 苏白睡醒啦
  17. 17 是想你的声音啊 傲七爷(江偌绮)
  18. 18 Love Story Taylor Swift
  19. 19 晚风 7opy/BT07
  20. 20 错位时空 艾辰
  21. 21 千千万万 深海鱼子酱
  22. 22 给你呀(又名:for ya) 蒋小呢
  23. 23 把回忆拼好给你 王贰浪
  24. 24 万有引力 F*yy
  25. 25 沉醉的青丝 (想你 念你dj版) 曲甲
  26. 26 太多 阿冗
  27. 27 7710 好乐无荒/尹露浠
  28. 28 恋爱画板 锦零
  29. 29 My Cookie Can Ayi
  30. 30 日不落(温柔版)
My Cookie Can - Ayi
00:00 / 00:00
An audio error has occurred, player will skip forward in 2 seconds.

Loading