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 <john.doe@example.com> # LABEL添加元数据
# 代替MAINTAINER
LABEL org.opencontainers.image.authors="John Doe <john@example.com>"
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/

闲的蛋疼整理了一下Dockerfile的命令和参数备查的更多相关文章

  1. [闲的蛋疼系列]从零开始用TypeScript写React的UI组件(0)-先写一个Button??

    0.咸鱼要说的 一入前端深似海,咸鱼入海更加咸. 最近闲的蛋疼,手上年前的事也完成了7788了,借助[PG1]的话来说,我们要keep real. 咸鱼肯定不real 了,因为我们都活在梦里,所以咱们 ...

  2. Docker - Dockerfile - 常见命令简介

    概述 感觉是个 比较重要的东西 有个疑问 我是先讲 docker build 还是 先讲 Dockerfile 穿插讲 docker build 最基本的东西 原理 -t -f docker file ...

  3. 学习Docker之Dockerfile的命令

    使用Dockerfile去构建镜像好比堆积木.使用pom去构建maven项目一样,有异曲同工之妙,下面就把Dockerfile中主要的命令介绍一下. 组成部分 部分 命令 基础镜像信息 FROM 维护 ...

  4. dockerfile基础命令

    一直想写一个, 但发现网上有很多了, 直接copy把 如何使用 Dockerfile用来创建一个自定义的image,包含了用户指定的软件依赖等.当前目录下包含Dockerfile,使用命令build来 ...

  5. 整理:WPF用于绑定命令和触发路由事件的自定义控件写法

    原文:整理:WPF用于绑定命令和触发路由事件的自定义控件写法 目的:自定义一个控件,当点击按钮是触发到ViewModel(业务逻辑部分)和Xaml路由事件(页面逻辑部分) 自定义控件增加IComman ...

  6. csdn我的blog成长轨迹(好吧我是闲的蛋疼)

    2014-06-26 21:26        2014-06-28 15:17        2014-07-03 14:35                 2014-08-31 0922     ...

  7. 闲着蛋疼没事干,写个Mac端的Kcptun Client管理器

    原理: 执行一行脚本 输入服务器地址,端口,密码等做了图形化编辑 可以控制Kcptun是否正在运行 App已上传github https://github.com/nicky2k8/KcptunCli ...

  8. 闲得蛋疼,JavaScript版本BadApple

    参考Vim版本的BadApple改写而成.由于加载数据比较大,可能网速不给力的童鞋效果不太好,多刷新几次就好了,^_^.运行环境:支持HTML5 Canvas的浏览器.​1. 代码:$(functio ...

  9. 闲着蛋疼看下a++的过程

    赋值过程 int a = 1; int b = a++; x86 反汇编: int a = 1; 00D06428 C7 45 F8 01 00 00 00 mov dword ptr [a],1 i ...

  10. 016、Dockerfile 常用命令(2019-01-07 周一)

    参考https://www.cnblogs.com/CloudMan6/p/6864000.html   Dokcerfile常见命令   FROM     指定base镜像   MAINTAINER ...

随机推荐

  1. WebGL实践之半透阴影

    楔子 相信很多人都知道,通过ShadowMap可以产生阴影,通过渲染阴影可以增加场景渲染的对比度,增加渲染的真实效果. 如下图所示: 但是对于透明或者半透明的对象,WebGL在处理阴影效果的时候,会把 ...

  2. [oeasy]python0074[专业选修]字节序_byte_order_struct_pack_大端序_小端序

    进制转化 回忆上次内容 上次 总结了 计算字符串值的函数 eval   四种进制的转化函数 bin oct int hex     函数名 前缀 目标字符串所用进制 bin 0b 二进制 oct 0o ...

  3. 【转载】Win10系统, administrator账户被微软账户强行绑定,怎么破?

    首先 声明:这是转载,我只是做一个记录,以下内容可解决问题(本人已尝试并已解决),当然也可以去转载出处查看大佬的原回答: Win10系统, administrator账户被微软账户强行绑定,怎么破? ...

  4. SpringBoot3-快速入门

    前置准备 Jdk17环境 idea 2021.2.1+才支持Java17 Springboot 3.0.5+ 开发百科书 springboot starter 官方支持的场景 springboot配置 ...

  5. 强化学习中Q-learning,DQN等off-policy算法不需要重要性采样的原因

    在整理自己的学习笔记的时候突然看到了这个问题,这个问题是我多年前刚接触强化学习时候想到的问题,之后由于忙其他的事情就没有把这个问题终结,这里也就正好把这个问题重新的规整一下. 其实,这个DQN算法作为 ...

  6. Linux环境下配置vscode的C/C++ 的make编译环境(编写makefile方式)代码Demo版

    以前写过同样话题下的图文版的,这里给出一个代码Demo版本,上一个图文版本参见: Linux环境下配置vscode的C/C++ 的make编译环境(编写makefile方式) ============ ...

  7. oracle执行报错 ORA-01722: 无效数字

    1.背景 执行Oracle存储过程时报错:ORA-01722: 无效数字 2.错误描述 1.对于两个类型不匹配,一个数字类型,一个非数字类型的值进行赋值操作;2.两个类型不匹配的值进行比较操作,比如一 ...

  8. 深度解读KubeEdge架构设计与边缘AI实践探索

    摘要:解读业界首个云原生边缘计算框架KubeEdge的架构设计,如何实现边云协同AI,将AI能力无缝下沉至边缘,让AI赋能边侧各行各业,构建智能.高效.自治的边缘计算新时代,共同探索智能边缘的新篇章. ...

  9. AC自动机 基础篇

    AC 自动机1 前置知识:\(KMP\),字典树. \(AC\) 自动机,不是用来自动 \(AC\) 题目的,而是用来处理字符串问题的(虽然确实可以帮助你 \(AC\)). 这里总结了 \(AC\) ...

  10. sqlserver 索引优化 CPU占用过高 执行分析 服务器检查[转]

    SELECT TOP 10 [Total Cost] = ROUND(avg_total_user_cost * avg_user_impact * (user_seeks + user_scans) ...