docker学习笔记-05:DockerFile解析

一、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被触发。

 

 

 

posted @ 2019-09-09 20:45  Luv_GEM  阅读(270)  评论(0编辑  收藏  举报