DockerFile 参数配置

常见指令

  • ARG # 构建参数,在构建镜像时,可以设置参数,在构建镜像过程中,参数可以动态修改
  • FROM # 基础镜像,当前新镜像是基于哪个镜像的
  • LABEL # 为镜像打标签,标签可以添加到镜像中,在镜像构建过程中,可以添加标签,在镜像运行过程中,可以查看标签
  • MAINTAINER # 镜像维护者的姓名混合邮箱地址
  • RUN # 容器构建时需要运行的命令
  • EXPOSE # 当前容器对外保留出的端口
  • WORKDIR # 指定在创建容器后,终端默认登录的进来工作目录,一个落脚点
  • ENV # 用来在构建镜像过程中设置环境变量
  • USER # 设置运行容器时使用的用户名或UID。
  • ADD # 将宿主机目录下的文件拷贝进镜像且ADD命令会自动处理URL和解压tar压缩包
  • COPY # 类似ADD,拷贝文件和目录到镜像中
  • VOLUME # 容器数据卷,用于数据保存和持久化工作
  • CMD # 指定一个容器启动时要运行的命令,dockerFile中可以有多个CMD指令,但只有最后一个生效!
  • ENTRYPOINT # 指定一个容器启动时要运行的命令!和CMD一样
  • ONBUILD # 当构建一个被继承的DockerFile时运行命令,父镜像在被子镜像继承后,父镜像的ONBUILD被触发

文档:https://docs.docker.com/reference/dockerfile/

指令示例

ARG

格式

ARG <name>[=<default value>]

示例

ARG username=default_user

FROM

格式

FROM <image>[:<tag>] 或 FROM <image>@<digest>

<image>        # 指定base image的名称
<tag>        # base image的标签,省略时默认latest
<digest>    # 时镜像的哈希码;使用哈希码会更安全一点

示例

FROM alpine:latest

LABEL

格式

LABEL <key>=<value>

示例

LABEL author="haohaodayouxi <2601183227@qq.com>"
LABEL version="1.0"
LABEL description="This is a simple alpine image"

MAINTAINER

格式

MAINTAINER <name>

示例

MAINTAINER haohaodayouxi <2601183227@qq.com>

RUN

格式

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

第一种格式中<command>通常是一个shell命令,且以”/bin/sh -c“来运行,这意味着此进程在容器中的PID不为1,不能接收Unix信号。
因此,当使用docker stop <container>命令停止容器时,此进程接收不到SIGTERM信号

第二种语法格式中的参数是一个JSON格式数组,其中<executable>为要运行的命令,后面的<paramN>为传递给命令的选项或参数;
然而,此种格式指定的命令不会以”/bin/sh -c”来发起,因此常见的shell操作如变量替换以及通配符替换将不会进行;

示例

RUN apk update && apk add curl

EXPOSE

格式

EXPOSE <port> [<port>/<protocol>]

<port>        # 暴露的端口号,如80
<protocol>    # 传输层协议,可为tcp或udp,默认为tcp

示例

EXPOSE 80/tcp

WORKDIR

格式

WORKDIR <path>

<path>    # 工作目录,必须是一个绝对路径

# WORKDIR可以多次出现,其路径也可以为相对路径;相对路径是对此前一个WORKDIER指令指定的路径;
# WORKDIR也可以调用由ENV指定定义的变量;

示例

# 设置工作目录为 /data1
WORKDIR /data1

# 在 /data1 目录下创建一个子目录 folder1
RUN mkdir folder1

# 设置工作目录为 /data2
WORKDIR /data2

# 在 /data2 目录下创建一个子目录 folder2
RUN mkdir folder2

# 设置工作目录为 /data2/folder2
WORKDIR folder2

# 在 /data2/folder2 目录下创建一个子目录 folder3
RUN mkdir folder3

ENV

格式

ENV <key>=<value> [<key>=<value>, ...] 或 ENV <key> <value>

第一种格式中,<key>=<value>为键值对,可以定义多个键值对,键值对之间用空格隔开,如果<value>中包含空格,可以用“\“进行转义,也可以通过对<value>加引号进行标识;反斜线也可用于续行;
第二种格式中,<key>为键,<value>为值,只能定义一个键值对;

示例

ENV username haohaodayouxi

ENV test=test doc='doc' \
    test2='test 2'

USER

格式

USER <user>[:<group>]

示例

USER root

ADD

格式

ADD <src> <dest> 

如果为URL且不以/结尾,则指定的文件将被下载并直接被创建为,如果以/结尾,则文件名URL指定的文件将被直接下载并保存为/
如果是一个本地文件系统上的压缩格式为tar文件,将被展开为一个目录,其行为类似于“tar -x“命令;然而,通过URL获取到的tar文件将不会自动展开
如果有多个,或其简介或直接使用了通配符,则必须是一个以/结尾的目录路径;如果不以/结尾,则其被视作一个普通文件,的内容将被直接写入到

示例

ADD ./test.html /data/test/

ADD https://nginx.org/download/nginx-1.26.2.tar.gz /usr/local/src/

COPY

格式

COPY <src> <dest>

拷贝文件到容器,源文件地址与容器同目录
若地址是目录,则其内部文件或子目录会被递归复制;但目录自身不会被复制
如果指定了多个,或在中使用了通配符,则必须是一个目录,且必须以/结尾
如果事先不存在,他将会被自动创建,这包括父目录路径

示例

COPY ./test.html /data/test/

VOLUME

格式

VOLUME <path>

如果挂载点目录路径下此前的文件存在,docker run命令会在卷挂载完成后将此前的所有文件复制到新挂载的卷中

示例

VOLUME /data

CMD

格式

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

示例

CMD java -jar /app/app.jar

CMD ["java","-jar","/app/app.jar"]

ENTRYPOINT

格式

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

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

docker run命令的—entrypoint选项的参数可覆盖ENTRYPOINT指令指定的程序
Dockerfile文件中也可以存在多个ENTRYPOINT指令,但仅有最后一个会生效

示例

ENTRYPOINT java -jar /app/app.jar

ONBUILD

格式

ONBUILD <INSTRUCTION>

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

示例

ONBUILD RUN mkdir /data

results matching ""

    No results matching ""