前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >2023学习日志

2023学习日志

原创
作者头像
TomoriNao
发布2023-08-05 14:20:29
1330
发布2023-08-05 14:20:29
举报
文章被收录于专栏:每月技术成长每月技术成长

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支持多阶段构建,支持只构建某一阶段的镜像,构建时从其他镜像复制文件

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • docker
    • Dockerfile指令
      • RUN指令
      • COPY指令
      • ADD指令
      • CMD指令
      • ENTRYPOINT指令
      • ENV指令
      • ARG指令
      • VOLUME指令
      • WORKDIR指令
      • EXPOSE指令
      • USER指令
      • HELTHCHECK指令
    • 多阶段构建
    相关产品与服务
    容器服务
    腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档