Dockerfile中 LABEL,HEALTHCHECK 和ARG 指令

news/2025/2/11 13:57:43/文章来源:https://www.cnblogs.com/autopwn/p/18709613

下面是关于 Dockerfile 中几个重要指令的讲解,包括 LABELHEALTHCHECKARG 指令。以下是详细解析和总结:


1. LABEL 指令

作用

  • LABEL 指令用于给镜像添加元数据,以键值对(key=value)的形式存储。
  • 这些元数据可以为镜像添加描述性信息,例如作者、版本、许可证等。

语法

LABEL key1=value1 key2=value2 ...

特点

  • 每个键值对之间用空格分隔。
  • 可以指定多个键值对。
  • 这些元数据不会影响镜像的功能,仅用于描述性标记。

示例

FROM nginx:latest# 添加元数据
LABEL maintainer="yourname@example.com"
LABEL version="1.0" description="This is a test image"

通过上述 LABEL 指令,镜像的元数据中会包含以下信息:

  • maintainer="yourname@example.com"
  • version="1.0"
  • description="This is a test image"

查看镜像的 LABEL 信息

使用以下命令查看镜像的元数据:

docker inspect <image_name>

在输出的 JSON 数据中,你可以看到 Labels 字段,它包含了所有的 LABEL 指令内容。

LABEL 与 ENV 的区别

  • LABEL 添加静态的描述性信息,作用是对镜像进行标记,类似标签。
  • ENV 用于定义环境变量,动态影响容器运行时的行为。

2. HEALTHCHECK 指令

作用

  • HEALTHCHECK 用于定义容器健康检查机制。
  • 它通过执行特定的命令来确认容器内服务是否正常运行。
  • 如果检查失败,Docker 会将容器的状态标记为 unhealthy

语法

HEALTHCHECK [选项] CMD <命令>
HEALTHCHECK NONE

选项

  • --interval=<时间>:两次健康检查之间的间隔时间(默认 30 秒)。
  • --timeout=<时间>:健康检查超时时间(默认 30 秒)。
  • --start-period=<时间>:容器启动后开始进行健康检查的等待时间(默认 0 秒)。
  • --retries=<次数>:健康检查失败的重试次数(默认 3 次)。

示例

FROM nginx:latest# 健康检查:每隔30秒检测一次服务是否正常
HEALTHCHECK --interval=30s --timeout=10s --retries=3 \CMD curl -f http://localhost/ || exit 1

屏蔽健康检查

如果基础镜像中已经定义了 HEALTHCHECK,你可以通过以下方式屏蔽它:

HEALTHCHECK NONE

查看容器的健康状态

运行容器后可以通过以下命令查看健康检查状态:

docker ps

健康状态会显示在 STATUS 列中,例如:

  • healthy:健康检查通过。
  • unhealthy:健康检查失败。
  • starting:健康检查尚未完成。

3. ARG 指令

作用

  • ARG 用于定义构建过程中使用的变量(构建参数)。
  • 它的作用域仅限于 Dockerfile 构建阶段,不会保留在最终镜像中。

语法

ARG <参数名>[=<默认值>]

特点

  • ARG 定义的变量在 Dockerfile 构建时有效。
  • 构建完成后变量会被丢弃,不会存在于镜像中。
  • 构建时可以通过 --build-arg 参数覆盖 ARG 的默认值。

示例

FROM ubuntu:20.04# 定义构建参数
ARG VERSION=1.0# 使用构建参数
RUN echo "Building version $VERSION"

使用构建参数

构建镜像时,可以通过 --build-arg 指定参数值:

docker build --build-arg VERSION=2.0 -t my-image .

最终,VERSION 的值将在构建过程中被替换为 2.0

ARG 与 ENV 的区别

属性 ARG ENV
作用域 仅在构建阶段有效 构建和运行阶段都有效
保留变量 不保留 保留
覆盖方式 --build-arg -eENV

4. 综合对比

指令 用途 示例
LABEL 给镜像添加元数据,用于描述镜像 LABEL version="1.0" author="yourname@example.com"
HEALTHCHECK 定义容器健康检查机制,确保服务正常运行 `HEALTHCHECK CMD curl -f http://localhost/
ARG 设置构建阶段的变量,仅用于 Dockerfile 内部 ARG VERSION=1.0
ENV 设置环境变量,构建和运行阶段均有效 ENV APP_ENV=production

5. 示例:结合使用 LABEL、HEALTHCHECK 和 ARG

以下是一个完整的 Dockerfile 示例,展示如何使用这些指令:

# 使用基础镜像
FROM ubuntu:20.04# 添加镜像元数据
LABEL maintainer="yourname@example.com"
LABEL version="1.0"
LABEL description="Example image for LABEL, HEALTHCHECK, and ARG"# 定义构建参数
ARG APP_VERSION=1.0# 使用构建参数
RUN echo "App version is $APP_VERSION"# 设置容器健康检查
HEALTHCHECK --interval=30s --timeout=10s --retries=3 \CMD curl -f http://localhost/ || exit 1# 设置环境变量
ENV APP_ENV=production# 默认命令
CMD ["bash"]

构建镜像时:

docker build --build-arg APP_VERSION=2.0 -t my-app:2.0 .

查看镜像信息:

docker inspect my-app:2.0

总结

  1. LABEL 添加静态元数据,用于描述镜像。
  2. HEALTHCHECK 定义容器的健康检查逻辑,确保服务正常运行。
  3. ARG 定义构建阶段的参数,仅在构建过程中有效。
  4. ENV 定义环境变量,构建和运行阶段都有效。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/882069.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

013 Promise对象_Ajax实操

Promise封装Ajax,让网络请求的异步操作变得更简单<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><titl…

题解:P7213 [JOISC2020] 最古の遺跡 3

两种思考方式:值域维度:从原始高度大往小插入柱子,不确定右边是否有最终高度等于它的柱子,并不好记录状态。下标维度:从后往前扫描,注意到前面的对后面的后效性很小,此时不难设出一个基础的状压 DP 方程。为了避免记录后方柱子初始高度出现情况(相同初始高度有且仅有 \…

【车道线检测项目实战】

1-车道数据与标签解读 1.1数据集链接 原项目共使用两个数据集这里出于学习便捷考虑,只使用CULane的部分数据集进行训练 数据集目录1.2 list目录其中list目录下都是文件的路径1.3 frame目录 frame目录下都是视频的节帧 1.4 lable目录 lable目录下都是车道线的信息,肉眼看不出来…

《刚刚问世》系列初窥篇-Java+Playwright自动化测试-12- iframe操作-上篇(详细教程)

1.简介 原估计宏哥这里就不对iframe这个知识点做介绍和讲解了,因为前边的窗口切换就为这种网页处理提供了思路,另一个原因就是虽然iframe很强大,但是现在很少有网站用它了。但是还是有小伙伴或者童鞋们私下问这个问题,那么宏哥就单独写一篇关于iframe网页处理的文章。ifram…

CH585 CH584 CH592 BLE设备的VID和PID

在 BLE(蓝牙低功耗)设备中,PID(Product ID,产品标识符)和 VID(Vendor ID,厂商标识符)有着重要作用,以下为你详细介绍: 区分不同设备与厂商VID 的作用:VID 是由相关管理机构分配给设备制造商的唯一标识符,用于明确设备的生产厂商。例如,像苹果、三星、英特尔等众多…

streamlit入门笔记【1】环境搭建

1. 背景 24年底交代了一个产品排行榜的工作,其实就是把开发测试等各项指标排序,指标获取和存储部分可以用requests和selenium以及xlsx、json分析等完成,展示部分使用了streamlit框架,可以把数据直接运行成简单的web app。本系列笔记将streamlit应用部分做个总结。 2. 环境搭…

012 Promise对象

1、基本概念Promise是异步编程的一种解决方案,比传统的解决方案一一回调函数和事件一一更合理和更强大。它由社区最早提出和实现,ES6将其写进了语言便准,统一了用法,原生提供Promise对象所谓Promise,简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步…

CoAT: 基于蒙特卡洛树搜索和关联记忆的大模型推理能力优化框架

研究者提出了一种新的关联思维链(Chain-of-Associated-Thoughts, CoAT)方法,该方法通过整合蒙特卡洛树搜索(Monte Carlo Tree Search, MCTS)和关联记忆机制来提升大语言模型(LLMs)的推理能力。区别于传统的单步推理方法,CoAT致力于增强LLM的结构化推理能力和自适应优化能力,…

DM SQL关联列 like 优化案例

1.1、sql优化背景达梦一哥们找我优化条SQL,反馈在DM8数据库执行时间很慢出不来结果, 监控工具显示这条SQL的执行时间需要20多万毫秒,安排。1.2、慢sql和执行时间 select a.col1 as d_id, a.col2 as s_id, a.col3 as bm, a.col4, a.col5, (select b.col1 from table2 b where…

rust学习笔记(7)

crate 中文是货箱,这是我们编写自己的库或者程序的方式 库 使用rustc可以把一个文件编译为lib rustc --crate-type=lib rary.rs构建的方式选择lib编译出来的文件rlib,并且文件的开头会加上lib前缀使用库 rustc main.rs --extern rary=library.rlib --edition=2018在编译使用的时…

mysql 系统变量

前言 简单介绍一下mysql的系统变量 正文 当我们之间查看mysql的系统变量的时候呢? 我们使用show variables,这样我们就可以查看到系统变量。 但是这样显然是没有意义的。可以看到很多很多的系统变量,如果想查具体的,那么就是: SHOW VARIABLES LIKE default_storage_engine又…

批量PDF文件转Word,免费!

今天推荐一款免费的PDF文件转换工具,它包括了PDF压缩、PDF转Word、PDF转Excel、提取PDF中图片等功能,下载地址在文末。 操作步骤 1、打开PDF转换工具,点击菜单PDF转Word,如下图2、添加需要转换的PDF文件,支持批量添加多个文件一起进行转换,如果一个目录下面的所有文件都需…