一、DockerFile是什么

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

2、构建三步骤:

手动编写一个dockerfile文件,然后直接docker build命令执行,获得一个自定义的镜像,最后 docker run 创建一个容器实例。

二、centos的DockerFile

FROM scratch          # centos的祖先
MAINTAINER The CentOS Project <cloud-ops@centos.org> # 作者的名字和邮箱
ADD c68-docker.tar.xz / # centos压缩包
LABEL name="CentOS Base Image" \
vendor="CentOS" \
license="GPLv2" \
build-date="2016-06-02" # 默认的命令,所以在启动容器时可加可不加
CMD ["/bin/bash"]

三、DockerFile构建过程解析

1、DockerFile内容基础知识:

(1)每条保留字指令都必须为大写字母且后面要跟随至少一个参数

(2)指令从上到下,顺序执行

(3)#表示注释

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

2、docker执行DockerFile的大致流程:

(1)docker从基础镜像运行一个容器

(2)执行一条指令并同时对容器进行修改

(3)执行类似docker commit的操作提交一个新的镜像层

(4)docker再基于刚提交的镜像运行一个新容器

(5)执行DockerFile中的下一条指令直到所有指令都执行完成

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

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

  DockerFile面向开发,Docker镜像成为交付标准,Docker容器则涉及部署和运维,三者缺一不可。

4、关系:DockerFile----build---->Docker镜像-----run---->Docker容器

四、DockerFile体系结构(保留字指令)

1、FROM  基础镜像,也就是当前新镜像是基于哪个基础镜像的

2、MAINTAINER  镜像作者的姓名和邮箱地址

3、RUN  构建镜像的过程中执行一个具体的命令

4、EXPOSE  当前容器实例对外暴露的端口

5、WORKDIR  制定在创建容器后,终端默认登录的进来工作目录

6、ENV  用来在构建镜像过程中设置环境变量  如:ENV MY_PATH /usr/mytest  变量名为 MY_PATH,变量值为 /usr/mytest

7、ADD  将宿主机目录下的文件拷贝进镜像且ADD命令会自动处理URL和解压tar压缩包

8、COPY  类似ADD,拷贝文件和目录到镜像中。将从构建上下文目录中<原路劲>的文件/目录复制到新的一层的镜像内的<目标路劲>位置  

9、VOLUME  容器数据卷,用于数据保存和持久化工作

10、CMD  指定一个容器启动时要运行的命令,DockerFile中可以有多个CMD指令,但只有最后一个生效。且如果docker run 后面有命令参数,那么CMD的会被docker run后面的替换掉

11、ENTRYPOINT  同CMD类似,也指定一个容器启动时要运行的命令,但不同在于,如果docker run 后面由命令参数,那么不会覆盖,而是追加

12、ONBUILD  当构建一个被继承的DockerFile时运行命令,父镜像在被子镜像继承后,父镜像的ONBUILD被触发。

docker学习笔记-05:DockerFile解析的更多相关文章

  1. Docker学习笔记三 Dockerfile 指令 定制镜像

    本文地址:https://www.cnblogs.com/veinyin/p/10412079.html  镜像是分层存储的,每一层都是独立存在的,修改当前层并不会修改其依赖的上一层,删除某一层也只是 ...

  2. Docker学习笔记之Dockerfile

    Dockerfile的编写格式为<命令><形式参数>,命令不区分大小写,但一般使用大写字母.Docker会依据Dockerfile文件中编写的命令顺序依次执行命令.Docker ...

  3. docker学习笔记-05:Docker安装mysql和redis

    一.安装mysql 1.docker hub 上查找mysql镜像 docker search mysql 2.从docker hub (使用阿里云加速器)拉取mysql镜像到本地标签为5.6 doc ...

  4. Docker学习笔记总结

    Docker学习笔记 https://yeasy.gitbooks.io/docker_practice/content/   一 环境搭建 Ubuntu安装 .添加软件源的GPG密钥 curl -f ...

  5. docker学习笔记(3)- 镜像

    简介 在docker学习笔记(1)- 架构概述一节中可以看到镜像是docker三大组件之一,可以将Docker镜像类比为虚拟机的模版. 镜像由多个层组成,每层叠加之后从外部看就像一个独立的对象,镜像的 ...

  6. docker学习笔记1 -- 安装和配置

    技术资料 docker中文官网:http://www.docker.org.cn/ 中文入门课程:http://www.docker.org.cn/book/docker.html docker学习笔 ...

  7. docker~学习笔记索引

    回到占占推荐博客索引 使用docker也有段时间了,写了不少文章与总结,下面把它整理个目录出来,方便大家去学习与检索! docker~学习笔记索引 docker~linux下的部署和基本命令(2017 ...

  8. 机器学习实战(Machine Learning in Action)学习笔记————05.Logistic回归

    机器学习实战(Machine Learning in Action)学习笔记————05.Logistic回归 关键字:Logistic回归.python.源码解析.测试作者:米仓山下时间:2018- ...

  9. Docker学习笔记 — Docker私有仓库搭建

    Docker学习笔记 — Docker私有仓库搭建   目录(?)[-] 环境准备 搭建私有仓库 测试 管理仓库中的镜像 查询 删除 Registry V2   和Mavan的管理一样,Dockers ...

随机推荐

  1. laravel 创建授权策略

    用户只能编辑自己的资料 在完成对未登录用户的限制之后,接下来我们要限制的是已登录用户的操作,当 id 为 1 的用户去尝试更新 id 为 2 的用户信息时,我们应该返回一个 403 禁止访问的异常.在 ...

  2. Perl 笔记

    目录 Perl 学习 常用记录 基础 1. 运行perl 2. 字符串 3. 变量 4. 条件 5. 循环 6. 运算符 7. 时间日期 8. 子程序(函数) 9. 引用 10. 格式化输出 11. ...

  3. 吴裕雄--天生自然Numpy库学习笔记:NumPy 排序、条件刷选函数

    numpy.sort() 函数返回输入数组的排序副本.函数格式如下: numpy.sort(a, axis, kind, order) 参数说明: a: 要排序的数组 axis: 沿着它排序数组的轴, ...

  4. Nexus-配置vPC 实验二

    实验一中介绍的是单面的vPC,本实验配置的是dual site(双面vPC),这样的情况将上下的Port-channel都配置在了同一vPC下面. 实验拓扑如下: N5K-1配置:N5K-1(conf ...

  5. AngularJS学习:第一个demo

    1. 引入angular.js 相应版本下载地址: https://code.angularjs.org/ 2. 编写html <!DOCTYPE html> <html> & ...

  6. I/O-<文件读写、输出>

    读写 FileInputStream fis=null; fis=new FileInputStream("D://2016.txt");//初始文件位置 int i=0; byt ...

  7. 一个高级PHP工程师所应该具备的(转自元如枫博客)

    初次接触PHP,就为他的美所折服,于是一发不可收拾. 很多面试,很多人员能力要求都有“PHP高级工程师的字眼”,如果您真心喜欢PHP,并且您刚起步,那么我简单说说一个PHP高级工程师所应该具备的,希望 ...

  8. OS(操作系统)结构

    1.整体式: 模块设计(独立的) 调用自由 用全局变量来通信 缺点:信息不安全,维护更新比较难 2.层次结构(典型的如TCP/IP协议): 所有的模块排成若干层,相邻的互相依赖调用 按调用次序来安排 ...

  9. kubernetes从入门到放弃(二)

    kubernetes对象之pod 1.pod的认识 Pod直译是豆荚,可以把容器想像成豆荚里的豆子,把一个或多个关系紧密的豆子包在一起就是豆荚(一个Pod).在Kubernetes中我们不会直接操作容 ...

  10. 第九届蓝桥杯B组决赛 调手表(完全背包)

    问题描述 M78 星云的一个小时有 n 分钟. 大家都知道,手表只有一个按钮可以把当前的数加一.在调分钟的时候,如果当前显示的数是 0 ,那么按一下按钮就会变成 1,再按一次变成 2 .如果当前的数是 ...