网站数据库模板下载,网站关键字怎么做,网络服务合同范本免费,北京网页制作服务说明#xff1a; 当打包docker镜像时#xff0c;docker build -t image_name:tag 时#xff0c;该命令会自动读取当前文件夹下的Dockerfile文件里的命令行#xff0c;来进行镜像打包。 FROM 说明#xff1a;指定基础镜像#xff0c;且必须是第一条指令… 说明 当打包docker镜像时docker build -t image_name:tag 时该命令会自动读取当前文件夹下的Dockerfile文件里的命令行来进行镜像打包。 FROM 说明指定基础镜像且必须是第一条指令如果不以任何镜像为基础则写法为 FROM scratch ; 同时意味着接下来所写的指令将作为镜像的第一层开始 语法 FROM image FROM image:tag FROM image:digest 三种写法其中tag和digest是可选项如果没有选择则默认为latest。 RUN RUN 说明运行指定的命令。 该命令有两种格式 RUN commandRUN [“executable”,”param1”,”param2”] 第一种后边直接跟shell命令 在linux操作系统上默认 /bin/sh -c在windows操作系统上默认 cmd /S /C第二种是类似于函数调用。 可将executable理解成为可执行文件后面就是两个参数。 两种写法比对 ·RUN /bin/bash -c source $HOME/.bashrc; echo $HOME ·RUN [/bin/bash, -c, echo hello] 注意多行命令不要写多个RUN原因是Dockerfile中每一个指令都会建立一层. 多少个RUN就构建了多少层镜像会造成镜像的臃肿、多层不仅仅增加了构件部署的时间还容易出错。 RUN书写时的换行符是 CMD 功能为容器启动时要运行的命令 语法有三种写法 1. CMD [executable,param1,param2]
2. CMD [param1,param2]
3. CMD command param1 param2 第三种比较好理解了就时shell这种执行方式和写法 第一种和第二种其实都是可执行文件加上参数的形式 举例说明两种写法 · CMD [ sh, -c, echo $HOME · CMD [ echo, $HOME ] 补充细节这里边包括参数的一定要用双引号就是,不能是单引号。千万不能写成单引号。 原因是参数传递后docker解析的是一个JSON array RUNCMD RUN CMD 不要把RUN和CMD搞混了。 RUN是构件容器时就运行的命令以及提交运行结果 CMD是容器启动时执行的命令在构件时并不运行构件时紧紧指定了这个命令到底是个什么样子 LABEL 功能是为镜像指定标签 语法 LABEL keyvalue keyvalue keyvalue ... 一个Dockerfile种可以有多个LABEL如下 LABEL com.example.vendorACME IncorporatedLABEL com.example.label-with-valuefooLABEL version1.0LABEL descriptionThis text illustrates \that label-values can span multiple lines. 但是并不建议这样写最好就写成一行如太长需要换行的话则使用\符号 如下 LABEL multi.label1value1 \multi.label2value2 \othervalue3 说明LABEL会继承基础镜像种的LABEL如遇到key相同则值覆盖 MAINTAINER 指定作者 语法 MAINTAINER name EXPOSE 功能为暴漏容器运行时的监听端口给外部 但是EXPOSE并不会使容器访问主机的端口 如果想使得容器与主机的端口有映射关系必须在容器启动的时候加上 -P参数 ENV 功能为设置环境变量 语法有两种 1. ENV key value2. ENV keyvalue ... 两者的区别就是第一种是一次设置一个第二种是一次设置多个 ADD 一个复制命令把文件复制到景象中。 如果把虚拟机与容器想象成两台linux服务器的话那么这个命令就类似于scp只是scp需要加用户名和密码的权限验证而ADD不用。 语法如下 1. ADD src... dest2. ADD [src,... dest] dest路径的填写可以是容器内的绝对路径也可以是相对于工作目录的相对路径 src可以是一个本地文件或者是一个本地压缩文件还可以是一个url 如果把src写成一个url那么ADD就类似于wget命令 如以下写法都是可以的 ·ADD test relativeDir/ ·ADD test /relativeDir ·ADD http://example.com/foobar / 尽量不要把scr写成一个文件夹如果src是一个文件夹了复制整个目录的内容,包括文件系统元数据 COPY 看这个名字就知道又是一个复制命令 语法如下 1. COPY src... dest2. COPY [src,... dest] 与ADD的区别 COPY的src只能是本地文件其他用法一致 ENTRYPOINT ENTRYPOINT 功能是启动时的默认命令 语法如下 1. ENTRYPOINT [executable, param1, param2]2. ENTRYPOINT command param1 param2 如果从上到下看到这里的话那么你应该对这两种语法很熟悉啦。 第二种就是写shell 第一种就是可执行文件加参数 与CMD比较说明这俩命令太像了而且还可以配合使用 1. 相同点 只能写一条如果写了多条那么只有最后一条生效容器启动时才运行运行时机相同 2. 不同点 ENTRYPOINT不会被运行的command覆盖而CMD则会被覆盖 如果我们在Dockerfile种同时写了ENTRYPOINT和CMD并且CMD指令不是一个完整的可执行命令那么CMD指定的内容将会作为ENTRYPOINT的参数如下 FROM ubuntuENTRYPOINT [top, -b]CMD [-c] 如果我们在Dockerfile种同时写了ENTRYPOINT和CMD并且CMD是一个完整的指令那么它们两个会互相覆盖谁在最后谁生效如下 FROM ubuntuENTRYPOINT [top, -b]CMD ls -al那么将执行ls -al ,top -b不会执行。 VOLUME 可实现挂载功能可以将内地文件夹或者其他容器种得文件夹挂在到这个容器种 语法为 VOLUME [/data] 说明 [/data]可以是一个JsonArray 也可以是多个值。所以如下几种写法都是正确的 VOLUME [/var/log/] VOLUME /var/log VOLUME /var/log /var/db 一般的使用场景为需要持久化存储数据时 容器使用的是AUFS这种文件系统不能持久化数据当容器关闭后所有的更改都会丢失。 所以当数据需要持久化时用这个命令。 USER 设置启动容器的用户可以是用户名或UID所以只有下面的两种写法是正确的 · USER daemo · USER UID 注意如果设置了容器以daemon用户去运行那么RUN, CMD 和 ENTRYPOINT 都会以这个用户去运行 WORKDIR 语法 WORKDIR /path/to/workdir 设置工作目录对RUN,CMD,ENTRYPOINT,COPY,ADD生效。如果不存在则会创建也可以设置多次。 如 WORKDIR /aWORKDIR bWORKDIR cRUN pwd pwd执行的结果是/a/b/c WORKDIR也可以解析环境变量 如 ENV DIRPATH /pathWORKDIR $DIRPATH/$DIRNAMERUN pwd pwd的执行结果是/path/$DIRNAME ARG 语法 ARG name[default value] 设置变量命令ARG命令定义了一个变量在docker build创建镜像的时候使用 --build-arg varnamevalue来指定参数 如果用户在build镜像时指定了一个参数没有定义在Dockerfile种那么将有一个Warning 提示如下 [Warning] One or more build-args [foo] were not consumed. 我们可以定义一个或多个参数如下 FROM busyboxARG user1ARG buildno... 也可以给参数一个默认值 FROM busyboxARG user1someuserARG buildno1... 如果我们给了ARG定义的参数默认值那么当build镜像时没有指定参数值将会使用这个默认值 ONBUILD 语法 ONBUILD [INSTRUCTION] 这个命令只对当前镜像的子镜像生效。 比如当前镜像为A在Dockerfile种添加 ONBUILD RUN ls -al 这个 ls -al 命令不会在A镜像构建或启动的时候执行 此时有一个镜像B是基于A镜像构建的那么这个ls -al 命令会在B镜像构建的时候被执行。 STOPSIGNAL 语法 STOPSIGNAL signal STOPSIGNAL命令是的作用是当容器推出时给系统发送什么样的指令 HEALTHCHECK 容器健康状况检查命令 语法有两种 1. HEALTHCHECK [OPTIONS] CMD command2. HEALTHCHECK NONE 第一个的功能是在容器内部运行一个命令来检查容器的健康状况 第二个的功能是在基础镜像中取消健康检查命令 [OPTIONS]的选项支持以下三中选项 --intervalDURATION 两次检查默认的时间间隔为30秒 --timeoutDURATION 健康检查命令运行超时时长默认30秒 --retriesN 当连续失败指定次数后则容器被认为是不健康的状态为unhealthy默认次数是3 注意 HEALTHCHECK命令只能出现一次如果出现了多次只有最后一个生效。 CMD后边的命令的返回值决定了本次健康检查是否成功具体的返回值如下 0: success - 表示容器是健康的 1: unhealthy - 表示容器已经不能工作了 2: reserved - 保留值 例子 HEALTHCHECK --interval5m --timeout3s \CMD curl -f http://localhost/ || exit 1 健康检查命令是curl -f http://localhost/ || exit 1 两次检查的间隔时间是5秒 命令超时时间为3秒 声明上诉命令转载地址为http://www.cnblogs.com/dazhoushuoceshi/p/7066041.html 我觉得写的非常不错所以忍不住搜藏 转载于:https://www.cnblogs.com/zhujuntiankong/p/10153705.html