首页 > 其他分享 >闲的蛋疼整理了一下Dockerfile的命令和参数备查

闲的蛋疼整理了一下Dockerfile的命令和参数备查

时间:2024-09-11 19:51:32浏览次数:8  
标签:RUN -- app 备查 指令 参数 镜像 COPY Dockerfile

Dockerfile 主要指令及参数:

指令 主要参数 作用 用法示例
FROM <image>[:<tag>] [AS <name>] 指定基础镜像 FROM ubuntu:24.04 AS base
RUN <command> 或 ["executable", "param1", "param2"] 执行命令,通常用于安装软件包 RUN apt-get update && apt-get install -y python3
CMD <command> 或 ["executable","param1","param2"] 指定容器启动时执行的命令 CMD ["python3", "app.py"]
LABEL <key>=<value> 为镜像添加元数据 LABEL version="1.0" description="This is my app"
EXPOSE <port>[/<protocol>] 声明容器运行时监听的端口 EXPOSE 80/tcp
ENV <key>=<value> 设置环境变量 ENV NODE_ENV production
ADD <src>... <dest> 复制文件,支持URL和自动解压 ADD https://example.com/big.tar.xz /usr/src/things/
COPY [--chown=<user>:<group>] <src>... <dest> 复制文件或目录 COPY --chown=user:group files* /data/
ENTRYPOINT ["executable", "param1", "param2"] 设置容器的入口点,通常与CMD结合使用 ENTRYPOINT ["nginx", "-g", "daemon off;"]
VOLUME ["/data"] 创建挂载点,用于持久化数据 VOLUME ["/var/log/"]
USER <user>[:<group>] 指定运行容器时的用户名或UID USER www-data
WORKDIR /path/to/workdir 设置工作目录 WORKDIR /app
ARG <name>[=<default value>] 定义构建参数,可以在构建时传递 ARG VERSION=latest
ONBUILD INSTRUCTION 为镜像添加触发器,执行特定命令 ONBUILD RUN /usr/local/bin/python-build --dir /app/src
STOPSIGNAL signal 设置停止容器的系统调用信号 STOPSIGNAL SIGTERM
HEALTHCHECK [OPTIONS] CMD command 定义容器健康检查 `HEALTHCHECK --interval=5m --timeout=3s CMD curl -f http://localhost/
SHELL ["executable", "parameters"] 覆盖默认shell SHELL ["/bin/bash", "-c"]
COPY --from 从多阶段构建中复制文件 COPY --from=builder /app /app
RUN --mount 在构建时挂载目录或缓存 RUN --mount=type=cache,target=/root/.cache pip install -r requirements.txt

额外的参数和选项:

  1. COPY和ADD指令:

    • --chown=\<user\>:\<group\>
    • --chmod=\<permissions>
    • --from=\<name|index>
  2. RUN指令:

    • --mount=type=\<type>,target=\<path>,source=\<source>
    • --network=\<network>
    • --security=\<security-opt>
  3. HEALTHCHECK指令选项:

    • --interval=DURATION (默认: 30s)
    • --timeout=DURATION (默认: 30s)
    • --start-period=DURATION (默认: 0s)
    • --retries=N (默认: 3)
  4. ARG指令:

    • 可以在FROM指令之前使用,影响基础镜像的选择
  5. 多阶段构建相关:

    • FROM \<image\> AS \<stage>
    • COPY --from=\<stage\> \<src\> \<dest>

Dockerfile样例:

> #### 注意:此文件仅用于参考,不要直接使用


# 语法版本声明
# syntax=docker/dockerfile:1

# 定义构建参数
ARG BASE_IMAGE=ubuntu:24.04

# 指定基础镜像
FROM ${BASE_IMAGE} AS base

# 设置维护者信息(已弃用,使用LABEL代替)
MAINTAINER John Doe <[email protected]>

# LABEL添加元数据
# 代替MAINTAINER
LABEL org.opencontainers.image.authors="John Doe <[email protected]>"
LABEL version="1.0" description="这是一个示例Dockerfile"

# 设置环境变量
ENV APP_HOME=/app \
    NODE_ENV=production

# 设置工作目录
WORKDIR ${APP_HOME}

# 复制文件到镜像中
COPY --chown=node:node . .

# 添加远程文件到镜像中
ADD https://example.com/big.tar.xz /tmp/

# 运行命令
RUN apt-get update && apt-get install -y python3 \
    && apt-get clean \
    && rm -rf /var/lib/apt/lists/*

# 使用挂载运行命令(需要BuildKit支持)
RUN --mount=type=cache,target=/root/.cache \
    pip install -r requirements.txt

# 暴露端口
EXPOSE 8080

# 创建数据卷
VOLUME ["/data"]

# 设置默认用户
USER node

# 定义健康检查
HEALTHCHECK --interval=5m --timeout=3s \
  CMD curl -f http://localhost:8080/ || exit 1

# 设置容器启动时运行的命令
ENTRYPOINT ["node"]

# 设置默认命令
CMD ["app.js"]

# 设置停止信号
STOPSIGNAL SIGTERM

# 更改默认shell
SHELL ["/bin/bash", "-c"]

# 多阶段构建:新阶段
FROM base AS production

# 为子镜像添加触发器指令
ONBUILD RUN echo "This is triggered when used as a base image"

# 从之前阶段复制文件
COPY --from=base ${APP_HOME} ${APP_HOME}

> AI提醒构建Dockerfile时要注意的问题:
> - 某些指令(如HEALTHCHECK和RUN --mount)需要较新版本的Docker或特定的构建器(如BuildKit)才能使用。
> - 在实际使用中,您通常不会在一个Dockerfile中使用所有这些指令。应该根据项目需求选择适当的指令。
> - 指令的顺序很重要,特别是像FROM、ARG、ENV这样的指令,它们会影响后续指令的行为。
> - 多阶段构建(在此示例中使用FROM ... AS ...)是一种优化镜像大小和提高安全性的高级技术。
> - MAINTAINER指令已被弃用,建议使用LABEL来添加维护者信息。

参考:
[1] https://docs.docker.com/reference/dockerfile/
[2] https://docs.docker.com/build/concepts/dockerfile/

标签:RUN,--,app,备查,指令,参数,镜像,COPY,Dockerfile
From: https://www.cnblogs.com/flydog/p/18408838

相关文章

  • 自定义注解校验参数
    自定义注解校验参数:1、定义注解,写好返回值,申明注解的用处,文档生成importjavax.validation.Constraint;importjavax.validation.Payload;importjava.lang.annotation.Documented;importjava.lang.annotation.Retention;importjava.lang.annotation.Target;importstat......
  • LDO(线性稳压器)关键参数与设计技巧
    最小压降: 输入与输出的最小电压差。1不同芯片设计工艺和结构,压降不同。2压降与工作电流有关,电流越大,压降越大。3温度越高,压降越大。4压降小可以优化效率。输入电压:1器件耐压考虑电压最高瞬态值。2长导线的输入电压要考虑浪涌电压。3通常按2倍以上取耐压值比较......
  • AdaBoost算法(AdbBoost Algorithm)—有监督学习方法、非概率模型、判别模型、非线性模型
    定义输入:训练数据集T={(x1......
  • Dockerfile说明-镜像最小化-docker-squash镜像压缩工具
     概述很多时候,构建的镜像总是在构建完之后分了好几个镜像层,有些镜像层还是因为只改变了一点东西,就多了整个目录的大小。那么,如何让镜像在构建的时候保持最小化,就是我们运维需要关心的问题。毕竟,有时候镜像太大,可能会被某些厂家的云仓库给限制上传的问题。 Dockerfile用法介......
  • Kafka客户端核心参数详解
    目录从客户端理解Kafka正确使用方式一、客户端1、消息发送者主流程2、消息消费者主流程二、从客户端属性来梳理客户端工作机制1、消费者分组消费机制2、生产者拦截器机制3、消息序列化机制4、消息分区路由机制5、生产者消息缓存机制6、发送应答机制7、生产者消息......
  • 每天五分钟玩转深度学习框架PyTorch:获取神经网络模型的参数
    本文重点当我们定义好神经网络之后,这个网络是由多个网络层构成的,每层都有参数,我们如何才能获取到这些参数呢?我们将再下面介绍几个方法来获取神经网络的模型参数,此文我们是为了学习第6步(优化器)。获取所有参数Parametersfromtorchimportnnnet=nn.Sequential(nn.Linear(4......
  • C++入门 一(命名空间,缺省参数,超详细!!!)
    文章目录C++与C语言的区别命名空间(Namespace)缺省参数C++与C语言的区别C++在保留了C语言所有特性的基础上增加了面向对象编程的支持,并引入了更多的高级特性和工具来提高代码的可读性、可维护性和可扩展性。而C语言则更加简洁和底层,适用于对性能要求极高或对内存管理......
  • MT6895(天玑8100)处理器规格参数_MTK联发科平台方案
    MT6895平台采用台积电5nm工艺,与天玑8000相比性能提升20%,搭载4个2.85GHzA78核心+4个2.0GHzA55核心,CPU能效比上一代提高25%。GPU采用了第三代的ValhallArmMali-G610MC6架构,拥有6核心,搭配天玑8100所拥有的HyperEngine5.0带来5G和Wi-Fi网络技术升级,包括AI-VR......
  • 【Linux】命令行参数和环境变量
         ......
  • oracle配置SGA参数不当导致不能正确启动数据库实例处理
    原因:生成环境数据库想要增加数据库内存配置参数SGA_TARGET增加到42G,但是没有配置SGA_MAX_SIZE参数值,导致SHUTDOWNIMMEDIATE停止数据库,再STARTUP启动数据库是提示错误:ORA-00823:Specifiedvalueofsga_targetgreaterthansga_max_size。处理思路:根据现有的spfile生成非二进制......