Dcoker之Dockerfile
Dockerfile
1、Dockerfile简介
Dockerfile是由一行行指令语句构成的
Dockerfile是一个创建docker镜像的配置文件
Dockerfile是由三个部分组成:基础镜像(必须的)、运行指令、容器默认执行命令
Docker 以从上到下的顺序运行 Dockerfile 的指令。为了指定基本映像,第一条指令必须是 FROM
一个声明以#字符开头则被视为注释
2、dockerfile常用指令释义
2.1、FROM
#指定基础镜像,必须为第一个命令
#格式:
FROM <image>
FROM <image>:<tag>
FROM <image>@<digest>
#实例
FROM centos:7
2.2、MAINTAINER
#维护者信息
#格式
MAINTAINER <name>
#实例
MAINTAINER ddff xxx 你说啥???
2.3、RUN
#构建镜像时执行的命令
#基于FROM指定的docker镜像运行一个指令,将结果反映到新生成的镜像。RUN指令后面执行的命令必须是镜像中已经存在了的命令。
#RUN 用于在镜像容器中执行命令,其有以下两种命令执行方式:
#shell 执行
#格式:
RUN <command>
#exec 执行
#格式:
RUN ["executable", "param1", "param2"]
#实例
RUN echo "你可真是个小可爱"
RUN apk update
#PS:RUN 指令创建的中间镜像会被缓存,并会在下次构建中使用。如果不想使用这些缓存镜像,可以在构建时指定--no-cache 参数,如:docker build --no-cache
2.4、CMD
#指定容器运行的默认命令
#构建容器后调用,也就是在容器启动时才进行调用
#格式:
CMD ["executable","param1","param2"] (执行可执行文件,优先)
CMD ["param1","param2"] (设置了 ENTRYPOINT,则直接调用 ENTRYPOINT 添加参数)
CMD command param1 param2 (执行 shell 内部命令)
#实例
CMD ["nginx" "-g" "daemon"]
2.5、COPY
#将本地文件添加到容器中
#格式:
COPY < src>… < dest>|[“< src>”,… “< dest>”]
#实例
COPY nginx.conf /etc/nginx/
2.6、ADD
#功能类似于COPY,且更加强大
#ADD 的源路径可以是一个URL,Docker引擎会试图去下载这个链接的文件放到<目标路径>去
#ADD 会自动解压tar类型的文件,但来自于网络的压缩资源则不会被解压
#格式
ADD <src>... <dest>
ADD ["<src>",... "<dest>"] 用于支持包含空格的路径
#实例
ADD nginx.conf /etc/nginx/
2.7、ENV
#设置一个容器的环境变量
#格式
ENV <key> <value>
#<key>之后的所有内容均会被视为其<value>的组成部分,因此,一次只能设置 一个变量
ENV <key>=<value> ...
#可以设置多个变量,每个变量为一个"<key>=<value>"的键值对,如果 <key>中包含空格,可以使用\来进行转义,也可以通过""来进行标示;另外,反斜线也可以用于续行
#实例
ENV name=ddff
2.8、EXPOSE
#指定于外界交互的端口
#指定容器需要向外界暴露的端口,实际上没有暴露,只有指定了EXPOSE才能够使用-P, 可以指定多个端口
#格式
EXPOSE <port> [<port>...]
#实例
EXPOSE 80 443
2.9、ARG
#用于指定传递给构建运行时的变量
#格式:
ARG <name>[=<default value>]
#在构建时使用--build-arg=<name>=<default value>以自定义变量值
#实例
ARG ssdd=xxxx
2.10、VOLUME
#用于指定持久化目录
#提示需要挂载的目录,本身并不会实现自动挂载
#格式
VOLUME ["/path/to/dir"]
#实例
VOLUME ["/data"]
2.11、WORKDIR
#工作目录
#是程序运行的开始目录
#是进入容器的最初目录
#格式
WORKDIR /path/to/workdir
#实例
WORKDIR /etc/nginx
2.12、ONBUILD
#用于设置镜像触发器
#ONBUILD 后面跟的是Dockerfile指令不是linux命令。当有新的Dockerfile以此镜像为基础镜像时,在新的Dockerfile构建时首先执行本指令
#格式
ONBUILD [INSTRUCTION]
#实例
ONBUILD RUN echo "就是你小子想要用我的镜像???"
2.13、LABEL
#用于为镜像添加元数据
#格式:
LABEL <key>=<value> <key>=<value> <key>=<value> ...
#实例
LABEL version="1.0" description="这是一个 Web 服务器" by="IT 笔录"
#PS:
使用 LABEL 指定元数据时,一条 LABEL 指定可以指定一或多条元数据,指定多条元数据时不同元数据之间 通过空格分隔。推荐将所有的元数据通过一条 LABEL 指令指定,以免生成过多的中间镜像。