2023学习日志

2023-08-05 14:20:29 浏览数 (2)

docker

Dockerfile指令

RUN指令

RUN指令用于执行命令行命令,是最常用的指令之一

RUN指令有两种格式:

  • 命令行格式
代码语言:shell复制
    RUN <命令>
  • 函数调用格式
代码语言:shell复制
    RUN ["可执行文件", "参数1 ", "参数2"]

COPY指令

COPY 指令从上下文命令中<源路径>的文件/目录复制到向的一层镜像内的<目标路径位置>、

源路径可以是多个,甚至可以包含通配符

目标路径可以是容器内的绝对路径,也可是相对于工作目录的相对路径,无需事先创建,指定目录不存在时将自动创建路径

--chown=<user>:<group>选项可以用来改变文件的用户及所属组

元数据:在使用COPY指令时,源文件的各种元数据均会保留,如权限及修改时间等

COPY 指令也有两种格式

  • 命令行格式
代码语言:shell复制
    COPY [--chown=<user>:<group>] <源路径> ... <目标路径>
  • 函数调用格式
代码语言:shell复制
    COPY [--chown=<user>:<group>] ["<源路径1>", ...“<目标路径>”]

ADD指令

ADD指令的作用与COPY指令类似,但ADD指令支持源路径为URL,且若源路径为压缩文件,则将自动解压缩到目标路径

值得注意的是,ADD指令会使镜像构建缓存失效,使得镜像构建较慢

官方建议:尽量使用COPY指令,因为符合单一职责原则,语义简单

CMD指令

CMD指令用于指定默认容器主进程的启动命令,即docker run 时默认的命令,也可在运行时指定新的命令来代替CMD中的命令。

CMD类似于RUN指令,也有两种格式,推荐使用函数调用格式,因为命令行格式需要自动调用sh -c来执行命令行。

值得注意的是,docker中的应用只能前台运行,主进程退出后,容器将会退出

ENTRYPOINT指令

当指定了ENTRYPOINT指令后,CMD指令的内容将会作为参数传递给ENTRYPOINT指令,运行时参数也是如此

ENTRYPOINT指令还可用于在主进程执行前运行一段脚本,在脚本的最后执行运行时指定的CMD参数

ENV指令

ENV指令用于设置环境变量,后续指令及运行时应用均可使用此处定义的环境变量

格式为:

代码语言:shell复制
    //格式一
    ENV <key> <value>
    //格式二
    ENV <key1>=<value1> <key2>=<value2>

ARG指令

ARG指令类似于ENV指令,能够设置环境变量,但容器运行时无法使用此处的环境变量

生效范围:如果在FROM指令之前指定,则只能用于FROM指令中,需要在FROM之后再次指定,其后的指令才能使用该环境变量

格式:

代码语言:shell复制
    ARG <参数名>[=<默认值>]

VOLUME指令

VOLUME指令用于指定匿名卷,防止容器运行时向容器存储层写入大量数据

格式:

代码语言:shell复制
    //格式一
    VOLUME ["<路径1>", "<路径2>", ...]
    //格式二
    VOLUME <路径>

WORKDIR指令

WORKDIR指令可以用来指定工作目录,之后各层的当前目录将被改为该目录,若该目录不存在,则将自动创建

如果使用的是相对路径,则路径与之前的WORKDIR指令有关

格式:

代码语言:shell复制
    WORKDIR <工作目录路径>
    //相对路径示例
    WORKDIR /a
    WORKDIR b
    WORKDIR c
    
    RUN pwd
    //输出为 /a/b/c

EXPOSE指令

EXPOSE指令声明容器运行时提供服务的端口,但仅仅是声明,不会因为此声明而开启端口,而是需要对应的命令

USER指令

UESR指令用于改变之后指令的身份,切换到指定的用户,但该用户必须已经存在

如果在脚本中切换身份,建议使用 gosu,因为su或sudo需要进行额外配置且容易出错

格式:

代码语言:shell复制
    USER <用户名>[:<用户组>]

HELTHCHECK指令

HELTHECHECK指令用于判断容器状态是否正常,支持以下选项:

  • --interval=<间隔>,两次健康检查的间隔,默认为30s HEALTHCHECK [选项] CMD <命令> //屏蔽基础镜像的HEALTHCHECK指令 HEALTHCHECK NONEONBUILD指令ONBUILD指令用于在以当前镜像为基础镜像构建镜像时执行一些指令 格式: ONBUILD <其他指令>LABEL指令LABEL指令用于给镜像以键值对的形式添加元数据,还可以使用标签来声明镜像作者,文档地址等信息 格式: LABEL <key>=<value> <key>=<value>...SHELL指令SHELL指令用于指定RUN、ENTRYTPOINT、CMD等指令的shell,linux中默认为"/bin/sh", "-c" 格式:
  • --timeout=<时长>,该指令运行时间,若超过此时间,则被视为失败,默认值为30s
  • --retries=<次数>,当连续失败指定次数之后,将容器状态视为unhealthy,默认值为3次 此外,与CMD、ENTERYPOINT指令相同,一个Dockerfile中只能出现一次此指令,若出现多次则最后一个生效 格式:
代码语言:shell复制
    SHELL ["executable", "parameters"]

多阶段构建

docker支持多阶段构建,支持只构建某一阶段的镜像,构建时从其他镜像复制文件

0 人点赞