六、Dockerifle指令记录
什么是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
请登录后再评论