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. Java-Spring JDBC初体验操作数据库

    Spring JDBC * Spring框架对JDBC的简单封装 提供了一个JDBCTemplate对象简化JDBC的开发 步骤 导入jar包 创建JDBCTemplate对象,依赖于数据源DataS ...

  2. django redirect_authenticated_user

    redirect_authenticated_user是在Web开发框架(如Django)中常见的设置,用于控制身份验证重定向的行为. 当启用redirect_authenticated_user时, ...

  3. 基于Java“萌宠之家”宠物综合服务平台设计实现(源码+lw+部署文档+讲解等)

    \n文末获取源码联系 感兴趣的可以先收藏起来,大家在毕设选题,项目以及论文编写等相关问题都可以给我加好友咨询 系统介绍: 互联网发展至今,无论是其理论还是技术都已经成熟,而且它广泛参与在社会中的方方面 ...

  4. [oeasy]python0097_苹果诞生_史蒂夫_乔布斯_沃兹尼亚克_apple_I

    苹果诞生 回忆上次内容 上次时代华纳公司 凭借手中的影视ip和资本 吞并了雅达利公司 此时 雅达利公司 曾经开发过pong的 优秀员工 乔布斯 还在 印度禅修 寻找自我 看到游戏行业 蓬勃发展 乔布斯 ...

  5. oeasy教您玩转linux 010211 牛说 cowsay

    我们来回顾一下 上一部分我们都讲了什么? 软件包工具是 apt 软件包不但能下载,也能升级,还能删除 专门管理软件包的 aptitude 这次我们下载个牛说 cowsay: sudo apt inst ...

  6. 空间反演对称性 (Spatial Inversion Symmetry) 和非线性响应 (Non-linear Response)

    我们定义一次宇称变换 (parity transformation) 为反转所有坐标: \[\mathcal{P}: \begin{pmatrix} x \\ y \\ z \end{pmatrix} ...

  7. RPC和 HTTP协议

    RPC 和HTTP 的区别 服务发现 HTTP,知道服务域名,可以通过 DNS 解析 得到 服务的IP地址,从而进行访问 RPC 需要一个专门的中间服务去保存服务名和IP信息(注册中心,nacos.c ...

  8. 5、SpringMVC之域对象共享数据

    5.1.域对象简介 请求域(request):一次请求范围内有效 会话域(session):一次会话范围内有效 应用域(application):整个应用范围内有效 5.2.环境搭建 5.2.1.右击 ...

  9. Springboot + Vue ElementUI 实现MySQL可视化

    一.功能展示: 效果如图: DB连接配置维护:   Schema功能:集成Screw生成文档,导出库的表结构,导出表结构和数据 表对象操作:翻页查询,查看创建SQL,生成代码 可以单个代码文件下载,也 ...

  10. 【WebSocket】一个简单的前后端交互Demo

    WebSocket资料参考: https://www.jianshu.com/p/d79bf8174196 使用SpringBoot整合参考: https://blog.csdn.net/KeepSt ...