六、Dockerifle指令记录

作者: 温新

分类: 【Docker】

阅读: 2516

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

什么是Dockerfile

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

简单的Dockerfile案例

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

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

Dockerfile常用指令

指令 含义 案例
FROM 指定基础镜像(它的妈妈是谁) FROM centos8
LABEL 给镜像指定种原数据(说明信息,如作者) LABEL author=ziruchu
RUN 运行指定命令(告诉它做什么) RUN yum -y install gcc
ADD 添加内容到镜像(自动解压)( 给它些必须的物品) ADD nginx.1.17.4 /home/src
COPY 拷贝文件或目录到镜像 COPY
WORKDIR 设置当前工作目录 WORKDIR /www
ENV 指定环境变量 ENV APP_VERSION=1.0.0
VOLUME 设置卷,挂在主机目录(实际物品存放的地方) VOLUME /www
EXPOSE 开放监听端口 EXPOSE 80
CMD 启动容器时指定默认执行的命令

指令详解

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

格式

FROM <image> [AS <name>]
# 或
FROM <image>:<tag> [AS <name>]
# 或
FROM <image>@<digest> [as <NAME>]

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

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

格式

ARG <name> [=<default value>]
ARG <参数名>[=<默认值>]

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

案例

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

格式

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

案例

LABEL version="1.0.1"
LABEL author="457969743@qq.com" date="2020-08-09"
EXPOSE 声明镜像内服务监听的端口

格式

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

案例

EXPOSE 22 80 8843

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

ENV 指定环境变量

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

格式

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

案例

ENV APP_VERSION=1.0.0
ENV APP_HOME=/home/src
ENV PATH $PATH:/usr/local/bin
ENTRYPOINT 指定镜像的默认入口命令

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

格式

# 格式一
ENTRYPOINT ["executable","paraml","param2"]: exec 调用执行;

# 格式二
ENTRYPOINT command param1 param2: shell中执行
VOLUME 创建一个数据卷挂在点

格式

VOLUME ["/data"]

案例

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

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

格式

USER daemon

案例

USER www
WORKDIR 指定工作目录

格式

WORKDIR <工作目录路径>

案例

WORKDIR /WWW
WORKDIR /home

操作指令

RUN 运行指定指令

格式

RUN <command>
# 或
# 该指令会被解析为JSON数组,因此必须用双引号
RUN ["executable","param1","param2"]	

案例

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

格式

# 方式一 推荐
CMD ["executable","param1","param2"]

# 方式二
CMD command param1 param2

# 方式三
CMD ["param1","param2"]

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

ADD 添加内容到镜像

格式

ADD <src> <dest>

案例

ADD nginx /usr/local/src

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

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

COPY 复制内容到镜像

格式

COPY <src> <dest>

案例

COPY nginx /usr/local/src

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

2020-08-10

请登录后再评论