dockerfile

目录

FROM

COPY

ADD

WORKDIR

VOLUME

EXPOSE

ENV

RUN

CMD

ENTRYPOINT

USER

HEALTHCHECK

SHELL

ARG

ONBUILD


# Description: test image

FROM busy:latest

LABEL maintainer=”Magedu <mage@magedu.com>”

ENV DOC_ROOT=/data/web/html/ \

WEB_SERVER_PACKAGE=”nginx-1.15.2.tar.gz”

COPY index.html ${DOC_ROOT:- /data/web/html/}

COPY yum.repos.d /etc/yum.repos.d/

ADD http://nginx.org/download/${WEB_SERVER_PACKAGE} /usr/local/src

WORKDIR /usr/local/

VOLUME /data/mysql/

EXPOSE 80/tcp

RUN cd /usr/local/src && \

Tar -x ${WEB_SERVER_PACKAGE}

CMD [“/usr/sbin/nginx”,”-g”,”daemon off;”]

ENTRYPOINT [“/bin/entrypoint.txt.sh”]

HEALTHCHECK --start-period=3s CMD wget -o - -q http://${IP:-0.0.0.0}:8080/

echo ${name:-tom} 如果name值为空,则赋值tom;如果不为空,则显示原值

echo ${name:+tom} 如果name值为空,则不显示; 如果不为空,则赋值tom


FROM

Doeckerfile文件开篇的第一个非注释行

格式:

 FROM <repository>[:<tag>] 或  FROM <repository>@<镜像ID>

<repository>:指定作为base image的名称

<tag>:base image的标签,省略时默认为latest


COPY

用于从docker宿主机复制文件至创建的新映像文件

格式:

 COPY <src> ... <dest> 或 COPY ["<src>",... "<dest>"]

<src>:要复制的源文件或目录,支持使用通配符

<dest>:目标路径,即正在创建的image的文件系统路径;建议<dest>使用绝对路径,否则,copy指定则以WORKDIR为其起始路径;

注意:在路径中有空白字符时,通常使用第二种格式

文件复制准则:

<src>必须是build上下文中的路径,不能是其父目录的文件

如果<src>是目录,则其内部文件或子目录会被递归复制,但<src>目录自身不会被复制


ADD

ADD指令类似于COPY指令,ADD支持使用TAR文件和URL路径

格式:

ADD <src> ... <dest> 或 ADD ["<src>",... "<dest>"]

操作准则:

如果<src>是一个本地系统上的压缩格式的tar文件,它将被展开为一个目录,其行为类似于“tar -x”命令;然而,通过URL获取到的tar文件将不会自动展开


WORKDIR

用于为Dockerfile中所有的RUN,CMD,ENTRYPOINT,COPY和ADD指定工作目录

格式:

WORKDIR <dirpath>


VOLUME

用于在image中创建一个挂载点目录,以挂载Docker host上的卷或其它容器上的卷

只能使用docker manage的卷

格式:

VOLUME <mountpoint> 或 VOLUME [“<mountpoint>”]


EXPOSE

用于为容器打开指定要监听的端口以实现与外部通信

格式:

EXPOSE <PORT>[/<protocol>] [<PORT>[/<protocol>] ...]

 <protocol>:用于指定传输层协议,可为tcp或udp二者之一,默认为TCP协议

EXPOSE指令可一次指定多个端口


ENV

用于为镜像定义所需的环境变量,并可被Dockerfile文件中位于其后的其他指令所调用

调用格式为$variable_name或{variable_name}

格式:

ENV <key> <value> 或 ENV <key>=<value>

第一种格式,<key>之后的所有内容均会被视作其<value>的组成部分,因此,一次只能设置一个变量;

第二种格式可用一次设置多个变量,如果<value>中包含空格,可用(\)转义,也可以加引号;另外,反斜线也可用于续行


RUN

用于指定docker build过程中运行的程序,其可以是任何命令

格式:

RUN <command> 或 RUN [“<executable>”,”<param1>”,”<param2>”]

第一种格式中,<command>通常是一个shell命令

第二种语法格式中的参数是一个JSON格式的数组,其中<executable>为要运行的命令,后面<paramN>为传递给命令的选项或参数


CMD

类似于RUN指令,可用于用于运行任何命令或应用程序

RUN指令运行在镜像文件构建过程中,CMD指令运行于启动容器时

在Dockerfile中可以存在多个CMD指令,但仅最后一个生效

格式:

CMD <command> 或 CMD [“<executable>”,”<param1>”,”<param2>”] 或

CMD [”<param1>”,”<param2>”]

第三种则用于ENTRYPOINT指令提供默认参数


ENTRYPOINT

类似CMD指令的功能,用于为容器指定默认运行程序,从而使得容器像是一个单独的可执行程序

与CMD不同的是,由ENTRYPOINT启动的程序不会被docker run命令行指定的参数所覆盖,而且,这些命令行参数会被当作参数传递给ENTRYPOINT指定的程序

格式:

ENTRYPOINT <command> 或 ENTRYPOINT [“<executable>”,”<param1>”,”<param2>”]

Docker run 命令传入的命令参数会覆盖CMD指令的内容并且附加到ENTRYPOINT命令最后做为其参数使用

Dockerfle文件中也可以存在多个ENTRYPOINT指令,但仅有最后一个会生效


USER

用于指定运行image时,主进程的用户名和UID

默认情况下,container的运行身份为root用户

格式:

USER <UID> | <UserName>

需要注意的是,<UID>可以为任意数字,但必须为/etc/passwd中的某用户


HEALTHCHECK

检查进程健康状态

格式:

HEALTHCHECK [OPTIONS] CMD command 检查容器健康状态

HEALTHCHECK NONE 关闭容器健康检查

 [OPTIONS]:

--interval=N (default:30s) 每N检查一次

--timeout=N (default:30s) 超时时长

--start-period=N (default:0s) 启动等待时长

--retries=N (default:3) 检查N次


SHELL

指定默认shell程序

格式:

SHELL [“executable”,”parameters”]


ARG

类似ENV,但只在build中生效

格式:

ARG KEY=”VAL” 或 ARG [“KEY1=VAL”,”KEY2=VAL2”]

命令中直接使用:

dockerfile build --build-arg key=”val”

ARG与ENV区别:

ARG:在Dockerfile中使用,仅仅在build docker image的过程中(包括CMD和ENTRYPOINT)有效,在image被创建和container启动之后,无效。

ENV:在Dockerfile中使用,在build docker imag的过程中有效,在image被创建和container启动后作为环境变量依旧也有效,并且可以重写覆盖。printenv可查看其值。

arg 是在 build 的时候存在的, 可以在 Dockerfile 中当做变量来使用

env 是容器构建好之后的环境变量, 不能在 Dockerfile 中当参数使用


ONBUILD

用于在dockerfile中定义一个触发器

当dockerfile第一次做成镜像时不会触发ONBUILD,但做成镜像后被其他dockerfile引用,会被触发执行

格式:

ONBUILD <dockerfile命令>

ONBUILD不能自我嵌套,且不会触发FROM和MAINTAINER指令

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

金牌收租佬

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值