Docker学习之Dockerfile

首先介绍下dockerfile:Dockerfile是一份文本文档,描述了组装镜像的步骤,也就是说,只要把Dockerfile写好,然后build一下,我们的镜像就做好了。Dockerfile由指令构成,一个指令一行,build时,指令由上到下依次执行,一次执行一条,执行完后生成一个镜像层,然后下一条指令会在该基础上执行,从而产生新的镜像层。于是一层一层叠起来,我们的目标镜像就这样诞生了。

#comment
Instruction arguments

#号为注释符,有效行由两部分组成,一是指令名称,二是参数

常用指令:

  • FROM指令:Dockerfile的第一条指令,它指定了构建镜像的基础镜像
FROM
举例:FROM responsity-url/xxxx:1.2.18
  • MAINTAINER指令:指定镜像的作者
MAINTAINER
举例:MAINTAINER  clarkhu  clarkhu@qq.com
  • RUN指令:使用前一条指令创建的镜像生产容器,并在容器中执行命令,执行结束后会自动提交成为新的镜像。
    格式:RUN (shell格式 /bin/sh -c执行) 或者RUN[“executable”, “param1”, “param2”]
RUN
举例:RUN chmod +x /start
  • CMD指令:为容器提供运行的默认值,作为容器启动的默认第一条指令。在Dockerfile只能有一条,有多条的话,以最后一条为准
举例:CMD echo "Hello world"
  • EXPOSE指令:声明容器在运行时将会监听的特定端口,即对外暴露的端口。但是一般端口映射在docker run的时候用p参数指定
docker run -it -v /tmp/share:/tmp/share -p 8888:8888 --name="test" test/nginx:v3 /bin/bash
  • ENV指令:设置环境变量,作用于Dockerfile后续的所有指令。而且还会作用于生成镜像所创建出来的容器中。
举例:ENV name value
  • ADD指令:复制文件到镜像中,可以是文件,目录,甚至是url,可以是绝对路径,也可以是相对路径(相对于workdir)
举例:ADD xxxx yyy
  • COPY指令:复制文件到镜像中,和ADD的区别,COPY只能复制本地文件
举例:COPY Dockerstart  /start
  • ENTRYPOINT指令:为容器提供运行时的默认值,不同于cmd的是ENTRYPOINT只能传入指令,而CMD还可以传入参数
ENTRYPOINT ["executable", "param1", "param2"]
举例:ENTRYPOINT ["/start"]
  • WORKDIR指令:指定工作目录,设置相对路径,接下来该目录用于RUN, CMD, ENTRYPOINT, COPY和ADD指令
WORKDIR /data/www/

利用dockerfile构建镜像:

docker build -t xxx/yyy:zzz .

docker build 构建镜像的原理:以FROM指定镜像为基础。然后针对Dockerfile第一条有实际操作的指令,执行以下流程:将当前已构建的层合并起来作为镜像创建容器,执行操作,提交产生新的layer。当build完成时,我们就能得到很多layer,将它们堆叠起来,才是我们最终所产生的镜像。

  • 构建三步骤

1.编写dockerfile
2.docker build
3.docker run

  • Dockerfile指令总结
Dockerfile 过程解析
Dockerfile指令