六、Dockerifle指令记录

作者: 温新

分类: 【Docker】

阅读: 2192

时间: 2020-08-09 16:35:21

什么是Dockerfile

Dockerfile 是一个用来构建镜像的文本文件,文本内容包含了一条条构建镜像所需的指令和说明。Dockerfile其内部包含了一条条的指令每一条指令构建一层,因此每一条指令的内容,就是描述该层应当如何构建

简单的Dockerfile案例

Dockerfile结构大致分为四个部分:

  • 基础镜像信息
  • 维护者信息
  • 镜像操作指令
  • 容器启动时执行指令

Dockerfile常用指令

指令详解

FORM 指定所创建镜像的基础镜像

格式

<span style="box-sizing: border-box;padding-right: 0.1px">FROM <image> [AS <name>]</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"># 或</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">FROM <image>:<tag> [AS <name>]</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"># 或</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">FROM <image>@<digest> [as <NAME>]</span>

任何Dockerfile中的第一条指令必须是FROM指令。

ARG 定义创建镜像过程中使用的变量

格式

<span style="box-sizing: border-box;padding-right: 0.1px">ARG <name> [=<default value>]</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">ARG <参数名>[=<默认值>]</span>

在执行docker build时,可以通过 -build-arg [=] 来为变量赋值。

案例

ARG version=1.0
LABEL 为生成的镜像添加元数据标签信息

格式

LABEL <key>=<value> <key>=<value> ...

案例

<span style="box-sizing: border-box;padding-right: 0.1px">LABEL version="1.0.1"</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">LABEL author="457969743@qq.com" date="2020-08-09"</span>
EXPOSE 声明镜像内服务监听的端口

格式

EXPOSE <port> [<port>/<protocal>...]

案例

EXPOSE 22 80 8843

该指令只是起到声明作用,并不会自动完成端口映射

ENV 指定环境变量

镜像生成过程中会被后续的RUN指令使用,在镜像启动的容器中也会存在。

格式

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

案例

<span style="box-sizing: border-box;padding-right: 0.1px">ENV APP_VERSION=1.0.0</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">ENV APP_HOME=/home/src</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">ENV PATH $PATH:/usr/local/bin</span>
ENTRYPOINT 指定镜像的默认入口命令

该入口命令会在启动容器时作为根命令执行,所有传入的值作为该命令的参数。

格式

<span style="box-sizing: border-box;padding-right: 0.1px"># 格式一</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">ENTRYPOINT ["executable","paraml","param2"]: exec 调用执行;</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box"></span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"># 格式二</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">ENTRYPOINT command param1 param2: shell中执行</span>
VOLUME 创建一个数据卷挂在点

格式

VOLUME ["/data"]

案例

VOLUME /www
USER 指定运行容器时的用户名或UID

后续的RUN等指令也会使用指定的用户身份

格式

USER daemon

案例

USER www
WORKDIR 指定工作目录

格式

WORKDIR <工作目录路径>

案例

<span style="box-sizing: border-box;padding-right: 0.1px">WORKDIR /WWW</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">WORKDIR /home</span>

操作指令

RUN 运行指定指令

格式

<span style="box-sizing: border-box;padding-right: 0.1px">RUN <command></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"># 或</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"># 该指令会被解析为JSON数组,因此必须用双引号</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">RUN ["executable","param1","param2"] </span>

案例

RUN yum -y install vim
CMD 用来指定启动容器时默认执行的命令

格式

<span style="box-sizing: border-box;padding-right: 0.1px"># 方式一 推荐</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">CMD ["executable","param1","param2"]</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box"></span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"># 方式二</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">CMD command param1 param2</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"><span style="box-sizing: border-box"></span></span><br></br><span style="box-sizing: border-box;padding-right: 0.1px"># 方式三</span><br></br><span style="box-sizing: border-box;padding-right: 0.1px">CMD ["param1","param2"]</span>

每个Dockerfile只能有一条CMD命令。若有多个,则执行最后一个

ADD 添加内容到镜像

格式

ADD <src> <dest>

案例

ADD nginx /usr/local/src

该命令将复制指定的<src>路径下内容到容器中的<dest>路径下。

其中<src>可以是Dockerfile所在目录的一个相对路径(文件或目录);也可以是一个URL;

COPY 复制内容到镜像

格式

COPY <src> <dest>

案例

COPY nginx /usr/local/src

复制本地主机的<src>(为Dockerfile所在目录的相对路径,文件或目录)下内容到镜像中的<dest>。目录路径不存在,则自动创建。

我是夕阳何处寻,期待和优秀的你一起同行!

夕阳何处寻

2020年08月10日

请登录后再评论