Dockerfile常用指令

FROM

FROM指令是最重要的一个并且必须为Dockerfile文件开篇的第一个非注释行,用于为镜像文件构建过程指定基础镜像,后续的指令运行于此基础镜像提供的运行环境,这个基础镜像可以是任何可用镜像,默认情况下
docker build会从本地仓库找指定的镜像文件,如果不存在就会从Docker Hub上拉取

MAINTAINER

Dockerfile的制作者提供的本人详细信息
Dockerfile不限制MAINTAINER出现的位置,但是推荐放到FROM指令之后

LABEL

给镜像指定各种元数据

一个Dockerfile可以写多个LABEL,但是不推荐这么做,Dockerfile每一条指令都会生成一层镜像,如果LABEL太长可 以使用\符号换行。构建的镜像会继承基础镜像的LABEL,并且会去掉重复的,但如果值不同,
则后面的值会覆盖前 面的值

COPY

用于从宿主机复制文件到创建的新镜像文件

COPY <src>...<dest>
COPY ["<src>",..."<dest>"]
# <src>:要复制的源文件或者目录,可以使用通配符
# <dest>:目标路径,即正在创建的image的文件系统路径;建议<dest>使用绝对路径,否则COPY指令则以WORKDIR为
其起始路径

ADD

基本用法和COPY指令一样,ADD支持使用TAR文件和URL路径

COPY和ADD的使用方式是一样的,区别在于:COPY对于复制的文件不会解压,ADD会解压复制的文件

WORKDIR

用于为Dockerfile中所有的RUN、CMD、ENTRYPOINT、COPY和ADD指定设定工作目录,只会影响当前WORKDIR之后的指令

VOLUME

用来创建挂载点,可以挂载宿主机上的卷或者其他容器上的卷

EXPOSE

用于给容器打开指定要监听的端口以实现和外部通信,EXPOSE可以一次性指定多个端口

ENV

第一种格式中, <key> 之后的所有内容都会被视为 <value> 的组成部分,所以一次只能设置一个变量
第二种格式可以一次设置多个变量,如果
<value> 当中有空格可以使用\进行转义或者对 <value> 加引号进行标识;另外\也可以用来续行

ARG

用法同ENV

RUN

第一种格式里面的参数一般是一个shell命令,以 /bin/sh -c 来运行它
第二种格式中的参数是一个JSON格式的数组,当中 <executable> 是要运行的命令,后面是传递给命令的选项或者
参数;但是这种格式不会用 /bin/sh -c 来发起,所以常见的shell操作像变量替换和通配符替换不会进行;如果你运
行的命令依赖shell特性,可以替换成类型以下的格式

CMD

容器启动时运行的命令

ENTRYPOINT

类似于CMD指令功能,用于给容器指定默认运行程序
和CMD不同的是ENTRYPOINT启动的程序不会被docker run命令指定的参数所覆盖,而且,这些命令行参数会被当
做参数传递给ENTRYPOINT指定的程序(但是,docker run命令的--entrypoint参数可以覆盖ENTRYPOINT)
docker run命令传入的参数会覆盖CMD指令的内容并且附加到ENTRYPOINT命令最后作为其参数使用
同样,Dockerfile中可以存在多个ENTRYPOINT指令,但是只有最后一个会生效
Dockerfile中如果既有CMD又有ENTRYPOINT,并且CMD是一个完整可执行命令,那么谁在最后谁生效

ONBUILD

用来在Dockerfile中定义一个触发器

Dockerfile用来构建镜像文件,镜像文件也可以当成是基础镜像被另外一个Dockerfile用作FROM指令的参数
在后面这个Dockerfile中的FROM指令在构建过程中被执行的时候,会触发基础镜像里面的ONBUILD指令
ONBUILD不能自我嵌套,ONBUILD不会触发FROM和MAINTAINER指令
在ONBUILD指令中使用ADD和COPY要小心,因为新构建过程中的上下文在缺少指定的源文件的时候会失败

 

posted @ 2022-06-26 23:06  VNone  阅读(626)  评论(0)    收藏  举报