标签:环境 替换 备份、恢复 定义 镜像 rgb 参数传递 指令 就是
一、FROM指令
第一条命令必须是FROM,表示需要构建的镜像是由哪个镜像为基础镜像,后续的指令运行于此基准镜像所提供的运行环境
FROM命令,支持下面两种形式
FROM <image> FROM <image>:<tag>
二、LABEL和MAINTAINER指令
指定构建镜像的作者的信息,新版本docker已经摒弃MAINTAINER,使用LABEL实现,LABEL保存key=value健值对元数据
MAINTAINER "作者信息" LABLE maintainer="作者信息"
三、RUN指令
RUN指令会在一个新的容器中执行任何命令,可以出现多次RUN指令,然后把执行后的改变提交到当前镜像,提交后的镜像会被用于Dockfile中定义的下一步操作,RUN中定义的命令会按顺序执行并提交
RUN <command> # shell模式,相当于命令行的/bin/bash -c command
<command>通常是一个shell命令,且以"/bin/sh -c"来运行它。
RUN ["<executable>","<param1>","<param2>"] # exec模式,可以指定其他的shell执行指令
直接由内核创建运行进程,可处理系统发送过来的信号,无法调用shell中的变量。参数是一个JSON格式的数组,其中<executable>为要运行的命令,后面的<paramN>为传递给命令的选项或参数;然而此种格式指定的命令不会以"/bin/sh -c"来发起,如果要运行的命令依赖于此shell特性的话,可以将其替换为类似下面的格式
RUN ["/bin/bash", "-c", "<executable>", "<param1>"]
四、CMD指令
CMD指令中指定的命令会在镜像运行时执行,在Dockfile中只能存在一个,如果使用了多个CMD指令,则只有最后一个CMD指令有效。当出现ENTRYPOINT指令时,CMD中定义的内容会作为ENTRYPOINT指令的默认参数,也就是说可以使用CMD指令给ENTRYPOINT传递参数。
注意:
1、RUN和CMD都是执行命令,它们的差异在于RUN中定义的命令会在执行docker build命令构建镜像时执行,而CMD中定义的命令会在执行docker run命令运行镜像时执行,
2、使用第一种语法也就是调用exec执行时,命令必须为绝对路径
CMD ["<executable>","<param1>","<param2>"] #将会调用exec执行,首选方式 CMD <command> <param1> <param2> #将会调用/bin/sh -c执行 CMD ["param1","param2"] #当使用ENTRYPOINT指令时,为该指令传递默认参数
五、ENTRYPOINT指令
ENTRYPOINT指令中指定的命令会在镜像运行事执行,在Dockerfile中只能存在一个,如果使用了多个ENTRYPOINT命令,则只有最后一个指令有效。
ENTRYPOINT指令中指定的命令(exec执行的方式)可以通过docker run来传递参数,例如docker run <image> -l 启动的容器将会把-l 参数传递给ENTRYPOINT指令定义的命令并会覆盖CMD指令中定义的默认参数(如果有的话),但不会覆盖该指令定义的参数(如果想要覆盖,在docker run加上参数–entrypoint)。例: ENTRYPOINT ["ls","-a"],CMD["/etc"],当通过docker run <image>启动容器时该容器会运行ls -a /etc 命令,当使用docker run <image> -l 启动事,该容器会运行ls -a -l命令,-l参数会覆盖CMD指令中定义的/etc参数。
ENTRYPOINT ["<executable>","<param1>","<param2>"] # CMD <command> <param1> <param2>
注意:当出现ENTRYPOINT指令时,当ENTRYPOINT指令使用exec方式执行时CMD指令只可能被当做ENTRYPOINT指令的参数使用,其他情况CMD指令则会被忽略
六、EXPOSE指令
用于为容器打开指定要监听的端口以实现与外部通信,EXPOSE指令可一次指定多个端口
EXPOSE <port>[/<protocol>] [<port>[/<protocol>]]
#例 EXPOSE 9012/udp 9016/tcp
注意:EXPOSE只是表示当前镜像在运行为容器的时候可以暴露指定的端口,但是需要在docker run的时候配合 -P选项。否则即使在Dockerfile文件中通过EXPOSE指定了端口,在容器运行时默认还是不会暴露端口的。EXPOSE一定需要配合-P选项才能发挥作用
七、WORKDIR指令
用于为Dockerfile中所有的RUN、CMD、ENTRYPOINT、COPY和ADD指令设定工作目录
在Dockerfile文件中,WORKDIR指令可以出现多次,其路径也可以为相对路径,不过,其是相对此前一个一个WORKDIR指令指定的路径
另外WORKDIR也可调用ENV指定定义的变量
WORKDIR /path/to/workdir
八、COPY指令
用于从指定路径拷贝一个文件或目录到容器的指定路径中
COPY <src> <dest>
<src> : 是一个文件或目录的路径,是相对于Dockerfile文件所在位置的相对路径,<src>路径必须与Dockerfile在同级目录或子目录中,例如不能通过ADD ../somepath,因为在执行docker build时首先做的就是把Dockerfile所在目录包含子目录发送给docker。
<dest>:目标容器的一个绝对路径,否则以WORKDIR为其起始路径。注意:在路径中有空白字符时,通常使用第二种方式
复制规则:
如果<src>是目录,则其内部文件或子目录会被递归复制,但<src>目录自身不会被复制,相当于shell 中的cp -r /root/dir/* /tmp
如果指定了多个<src>或在<src>中使用了通配符,则<dest>必须是一个目录,且必须以/结尾
如果<dest>不存在,它将会被自动创建,包括其父目录路径
九、ADD指令
ADD指令类似于COPY指令,<src>是一个文件或目录的路径,也可以是一个url,路径是相对于该Dockerfile文件所在位置的相对路径,<dest>是目标容器的一个绝对路径,
例如/home/harara/Docker/Dockerfile这个文件中的定义的ADD /data.txt /db/指令,将会尝试拷贝文件/home/harara/Docker/data.txt到将要生成的容器的/db/data.txt
ADD <src> <dest>
# 示例:
COPY nginx-1.15.2.tag.gz /data/ # 单纯复制文件 ADD nginx-1.15.2.tag.gz /data/ # 解压复制文件夹
① 如果执行docker build - < somefile即通过标准输入来创建时,ADD指令只支持url方式,另外如果url需要认证,则可以通过RUN wget ...或RUN curl ...来完成,ADD指令不支持认证。
② <src>路径必须与Dockerfile在同级目录或者子目录中
③ 如果<src>为URL且<dest>不以/结尾,则<src>指定的文件将被下载并直接被创建为<dest>.如果<dest>以/结尾,则文件名URL指定的文件将被直接下载并保存为<dest>/<filename>
④ 如果<src>是一个本地系统的压缩格式的tar文件,他将被展开为一个目录,其行为类似于”tar -x”命令,不过通过URL获取的tar文件将不会被自动展开;
⑤ 如果<src>有多个,或使用了通配符,则<dest>必须是一个以/结尾的目录路径;
十、ENV指令
ENV指令用于设置环境变量,构建镜像过程和容器运行过程都有效。如果需要在运行时更改这些环境变量可以在运行docker run时添加-env <key>=<value>参数来修改。
注意:最好不要定义那些可能和系统预定义的环境变量冲突的名字,否则可能会产生意想不到的结果
ENV <key> <value> ENV <key>=<value>
第二种格式可一次设置多个变量,每个变量为一个”<key>=<value>”的健值对.如果<value>中包含空格,可以以反斜线(\)进行转义,也可以通过对<value>加引号进行标识.另外,反斜线也可用于续行
在docker run的时候可以通过-e 选项直接覆盖Dockerfile文件中已经指定的ENV或者添加为容器新的ENV变量的
十一、VOLUME指令
VOLUME指令用来设置一个挂载点,可以用来让其他容器挂载以实现数据共享或对容器数据的备份、恢复或迁移。
VOLUME ["path"]
十二、USER指令
USER指令用于设置用户或uid来运行生成的镜像和执行RUN命令
USER user USER user:gid USER user:group
十三、ONBUILD指令
ONBUILD指令,镜像触发器,当一个镜像被其他镜像作为基础镜像时执行,会在构建过程中插入指令
ONBUILD <INSTRUCTION>
# 示例:
ONBUILD COPY copyFile/config /data #在构建基础镜像的dockerfile添加上面命令,实际构建的时候不会执行COPY命令,当构建另一个新镜像并且以该镜像为基础镜像时,会执行COPY命令。
1、ONBUILD指令用来设置一些触发的指令,用于当该镜像被作为基础镜像来创建其他镜像时(也就是Dockerfile中的FROM为当前镜像时)执行一些操作,ONBUILD中定义的指令会在用于生成其他镜像的Dockerfile文件的FROM指令之后执行,上述介绍的任何一个指令都可以用于ONBUILD指令,可以用来执行一些因为环境而变化的操作,使镜像更加通用。
2、ONBUILD中定义的指令在当前镜像的build中不会被执行
3、可以通过查看docker inspeat <image>命令执行结果的onbuild键来查看某个镜像ONBUILD指令定义的内容
4、ONBUILD中定义的指令会当做 引用该镜像的Dockerfile文件的FROM指令的一部分来执行,执行顺序会按ONBUILD定义的先后顺序执行,如果ONBUILD中定义的任何一个指令运行失败,则会使FROM指令中断并导致整个build失败,当所有的ONBUILD中定义的指令成功完成后,会按正常顺序继续执行build。
5、ONBUILD中定义的指令不会继承到当前引用的镜像中,也就是当引用ONBUILD的镜像创建完成后将会清除所有引用的ONBUILD指令
6、ONBUILD指令不允许嵌套,例如ONBUILD ONBUILD ADD . /data是不允许的
7、ONBUILD指令不会执行其定义的FROM,MAINTAINER指令
标签:环境 替换 备份、恢复 定义 镜像 rgb 参数传递 指令 就是
原文地址:https://www.cnblogs.com/kiko2014551511/p/14539160.html