1、什么是Dockerfile

Dockerfile是用来构建Docker镜像的构建文件,是由一系列命令和参数构成的脚本。

2、Dockerfile解析过程

前提认知:

  1. 每条保留字指令都必须为大写字母且后面要跟随至少一个参数
  2. 指令按照从上到下,顺序执行
  3. 表示注释

  4. 每条指令都会创建一个新的镜像层,并对镜像进行提交

解析流程:

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

从应用软件的角度来看,Dockerfile、Docker镜像与Docker容器分别代表软件的三个不同阶段,

  • Dockerfile是软件的原材料
  • Docker镜像是软件的交付品
  • Docker容器则可以认为是软件的运行态。

    Dockerfile面向开发,Docker镜像成为交付标准,Docker容器则涉及部署与运维,三者缺一不可,合力充当Docker体系的基石。

3、DockerFile体系结构

  • FROM 基础镜像,当前新镜像是基于哪个镜像的
  • MAINTAINER 镜像维护者的姓名和邮箱地址
  • RUN 容器构建时需要运行的命令
  • EXPOSE 当前容器对外暴露出的端口
  • WORKDIR 指定在创建容器后,终端默认登陆的进来工作目录,一个落脚点
  • ENV 用来在构建镜像过程中设置环境变量
  • ADD 将宿主机目录下的文件拷贝进镜像且ADD命令会自动处理URL和解压tar压缩包
  • COPY 类似ADD,拷贝文件和目录到镜像中。

    将从构建上下文目录中 <源路径> 的文件/目录复制到新的一层的镜像内的 <目标路径> 位置
  • VOLUME 容器数据卷,用于数据保存和持久化工作
  • CMD 指定一个容器启动时要运行的命令 ,Dockerfile 中可以有多个 CMD 指令,但只有最后一个生效,CMD 会被 docker run 之后的参数替换
  • ENTRYPOINT 指定一个容器启动时要运行的命令,ENTRYPOINT 的目的和 CMD 一样,都是在指定容器启动程序及参数
  • ONBUILD 当构建一个被继承的Dockerfile时运行命令,父镜像在被子继承后父镜像的onbuild被触发

最新文章

  1. 安装ClouderaManager以及使用ClouderaManager安装分布式集群的若干细节
  2. IOS开发之学习《AV Foundation 开发秘籍》
  3. vue2.0 开发实践总结之入门篇
  4. Ajax跨域的几种方法以及每种方法的原理
  5. asp.net 网站访问变慢
  6. 线程本地存储TLS(Thread Local Storage)的原理和实现&mdash;&mdash;分类和原理
  7. HDU 1171 Big Event in HDU 多重背包二进制优化
  8. 【javascript】html5中使用canvas编写头像上传截取功能
  9. Inside of Jemalloc
  10. hadoop 任务执行优化
  11. POJ1789 Truck History(prim)
  12. 阐述 QUEST CENTRAL FOR DB2 八罪
  13. Kafka官方文档翻译——设计
  14. 关于thinkphp控制器引用model里的方法的一点收获
  15. [Swift]LeetCode242. 有效的字母异位词 | Valid Anagram
  16. webstorm快捷键大全(亲自整理)
  17. 理解call及apply
  18. Struts2学习第三天——保存登陆信息及数据校验
  19. 那些年用过的Redis集群架构
  20. 如果datanode连接不上namenode,导致datanode无法启动。

热门文章

  1. 学了这么多年C语言,你真的知道全局变量,局部变量,静态变量,本地函数,外部函数是如何区分标识的吗?
  2. Spring表达式
  3. 反射应用和获取Class对象的三种方式
  4. Vue组件传值(三)之 深层嵌套组件传值 - $attrs 和 $listeners
  5. Excel中怎么快速选中区域
  6. find命令查找某一个时间点以后创建或者修改的文件
  7. pycharm 增删改查 mysql数据库
  8. spring入门2-aop和集成测试
  9. Github新手入门
  10. python编码问题:UnicodeDecodeError: &#39;gbk&#39; codec can&#39;t decode