【Docker】Dockerfile 优化工具 hadolint

本文内容均来自个人笔记并重新梳理,如有错误欢迎指正!

如果对您有帮助,烦请点赞、关注、转发、订阅专栏!


专栏订阅入口

| 精选文章 | Kubernetes | Docker | Linux | 羊毛资源 | 工具推荐 |


往期精彩文章

【Docker】(全网首发)Kylin V10 下 MySQL 容器内存占用异常的解决方法

【Docker】(全网首发)Kylin V10 下 MySQL 容器内存占用异常的解决方法(续)

【Linux】全面讲解 Shell 变量的那些事


目录

一、背景介绍

二、hadolint 介绍

三、hadolint 使用

1、在线检查方式

2、二进制检查方式

3、Docker 检查方式

四、hadolint 命令行选项


一、背景介绍

笔者在《专题三:Dockerfile 相关》及《Dockerfile 指令对 Docker 镜像层数的影响》等文章中已经介绍过 Dockerfile 相关知识及其运用。但是在实际工作中 Dockerfile 肯定不是随便写写就行了,而是推荐遵照最佳实践原则对其进行优化,以期达到减少镜像体积、提升构建效率及容器安全性等目标。

工欲善其事,必先利其器。本文将针对 Dockerfile 的优化介绍一款辅助工具,帮助大家提升工作效率。


二、hadolint 介绍

 hadolint 是一款专门用于检查 Dockerfile 语法的静态分析工具,可以帮助使用者构建符合最佳实践的 Docker 镜像。

hadolint 作为一个智能的 Dockerfile 筛选器,主要工作流程如下:

  • hadolint 将 Dockerfile 解析为 AST(抽象语法树),以标识与其关联的每条指令和参数

  • hadolint 根据内置的语法规则,在 AST 之上检查每条指令和参数。这些语法规则涵盖了效率、代码质量、安全性等多个方面。此外,hadolint 还使用了著名的 Shellcheck 来检查 RUN 指令中的 Bash 代码

  • Hadolint 会标记所有不符合语法规则的指令和参数,并提供针对性的优化建议 

GitHub 地址:https://github.com/hadolint/hadolint

Dockerfile 最佳实践:https://docs.docker.com/build/building/best-practices/


三、hadolint 使用
1、在线检查方式

网址:https://hadolint.github.io/hadolint/

# Dockerfile 示例
FROM debianRUN apt update && apt install -y supervisor
COPY supervisord.conf /etc/supervisor/conf.d/EXPOSE 80000
CMD ["/usr/bin/supervisord"]

将以上 Dockerfile 内容粘贴至文本框后点击 Lint 按钮,高亮部分即为 hadolint 针对语法检查结果反馈的优化建议,并可点击跳转至详情页。

图片

图片

图片

图片

2、二进制检查方式
  • 安装命令

wget -O hadolint https://github.com/hadolint/hadolint/releases/download/v2.12.0/hadolint-Linux-x86_64
chmod +x hadolint && mv hadolint /usr/local/bin
hadolint -v
  • 检查命令
hadolint Dockerfile

  • 检查命令(忽略指定规则)
hadolint Dockerfile --ignore DL3006 --ignore DL3027

3、Docker 检查方式
docker run --rm -i ghcr.io/hadolint/hadolint < Dockerfile

图片


四、hadolint 命令行选项

# hadolint -h
hadolint - Dockerfile Linter written in HaskellUsage: hadolint [-v|--version] [-c|--config FILENAME] [DOCKERFILE...] [--file-path-in-report FILEPATHINREPORT] [--no-fail] [--no-color] [-V|--verbose] [-f|--format ARG] [--error RULECODE][--warning RULECODE] [--info RULECODE] [--style RULECODE] [--ignore RULECODE] [--trusted-registry REGISTRY (e.g. docker.io)] [--require-label LABELSCHEMA (e.g. maintainer:text)] [--strict-labels] [--disable-ignore-pragma] [-t|--failure-threshold THRESHOLD]Lint Dockerfile for errors and best practicesAvailable options:-h,--help                Show this help text-v,--version             Show version-c,--config FILENAME     Path to the configuration file--file-path-in-report FILEPATHINREPORTThe file path referenced in the generated report.This only applies for the 'checkstyle' format and isuseful when running Hadolint with Docker to set thecorrect file path.--no-fail                Don't exit with a failure status code when any ruleis violated--no-color               Don't colorize output-V,--verbose             Enables verbose logging of hadolint's output tostderr-f,--format ARG          The output format for the results [tty | json |checkstyle | codeclimate | gitlab_codeclimate | gnu |codacy | sonarqube | sarif] (default: tty)--error RULECODE         Make the rule `RULECODE` have the level `error`--warning RULECODE       Make the rule `RULECODE` have the level `warning`--info RULECODE          Make the rule `RULECODE` have the level `info`--style RULECODE         Make the rule `RULECODE` have the level `style`--ignore RULECODE        A rule to ignore. If present, the ignore list in theconfig file is ignored--trusted-registry REGISTRY (e.g. docker.io)A docker registry to allow to appear in FROMinstructions--require-label LABELSCHEMA (e.g. maintainer:text)The option --require-label=label:format makesHadolint check that the label `label` conforms toformat requirement `format`--strict-labels          Do not permit labels other than specified in`label-schema`--disable-ignore-pragma  Disable inline ignore pragmas `# hadolintignore=DLxxxx`-t,--failure-threshold THRESHOLDExit with failure code only when rules with aseverity equal to or above THRESHOLD are violated.Accepted values: [error | warning | info | style |ignore | none] (default: info)

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

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

相关文章

接口自动化——初识pytest

缩写单词含义.passed通过Ffailed失败&#xff08;用例执行时报错&#xff09;Eerror出错&#xff08;fixture执行报错&#xff09;sskipped跳过Xxpassed预期外的通过&#xff08;不符合预期&#xff09;xxfailed预期内的失败&#xff08;符合预期&#xff09; 1.pytest 配置 1…

leetcode日记(100)填充每个节点的下一个右侧节点指针

和层序遍历差不多的思路&#xff0c;将节点储存在队列里&#xff0c;一边取出节点一边放入取出节点的左右节点&#xff0c;直到队列空。 /* // Definition for a Node. class Node { public:int val;Node* left;Node* right;Node* next;Node() : val(0), left(NULL), right(NU…

MySQL配置文件my.cnf详解

目前使用的服务器系统是CentOS8.5 ,针对MySql8.4的配置示例&#xff0c;自己根据实际情况修改。 安装MySql8.4时&#xff0c;MySql8.4没有默认的my.cnf,需要用户根据需要自行配置my.cnf文件&#xff0c;大概可看到下面这样的参数列表&#xff0c;可能不同版本的mysql参数多少会…

【解决】XCode不支持旧版本的iOS设备

办法&#xff1a; 手动添加设备支持文件&#xff08;暂时解决方式&#xff09; 如果您无法立即升级 Xcode&#xff0c;也可以通过下载设备支持文件来暂时解决问题。 检查当前设备的 iOS 版本&#xff1a; 连接设备到 Mac&#xff0c;打开 Xcode 查看提示的 iOS 版本。例如&…

每日c/c++题 备战蓝桥杯(全排列问题)

题目描述 按照字典序输出自然数 1 到 n 所有不重复的排列&#xff0c;即 n 的全排列&#xff0c;要求所产生的任一数字序列中不允许出现重复的数字。 输入格式 一个整数 n。 输出格式 由 1∼n 组成的所有不重复的数字序列&#xff0c;每行一个序列。 每个数字保留 5 个场…

注意力蒸馏技术

文章目录 摘要abstract论文摘要简介方法预备知识注意力蒸馏损失注意力引导采样 实验结论总结参考文献 摘要 本周阅读了一篇25年二月份发表于CVPR 的论文《Attention Distillation: A Unified Approach to Visual Characteristics Transfer》,论文开发了Attention Distillation…

flutter android端抓包工具

flutter做的android app&#xff0c;使用fiddler抓不了包&#xff0c;现介绍一款能支持flutter的抓包工具Reqable&#xff0c;使用方法如下&#xff1a; 1、下载电脑端安装包 下载地址为【https://reqable.com/zh-CN/download/】 2、还是在上述地址下载 android 端apk&#xf…

PyTorch单机多卡训练(DataParallel)

PyTorch单机多卡训练 nn.DataParallel 是 PyTorch 中用于多GPU并行训练的一个模块&#xff0c;它的主要作用是将一个模型自动拆分到多个GPU上&#xff0c;并行处理输入数据&#xff0c;从而加速训练过程。以下是它的核心功能和工作原理&#xff1a; 1、主要作用 数据并行&am…

PyTorch中的Tensor

PyTorch中的Tensor‌ 是核心数据结构&#xff0c;类似于 NumPy 的多维数组&#xff0c;但具备 GPU 加速和自动求导等深度学习特性。 一、基本概念 ‌核心数据结构‌ Tensor 是存储和操作数据的基础单元&#xff0c;支持标量&#xff08;0D&#xff09;、向量&#xff08;1D&am…

基于Python的图书馆信息管理系统研发

标题:基于Python的图书馆信息管理系统研发 内容:1.摘要 在数字化信息快速发展的背景下&#xff0c;传统图书馆管理方式效率低下&#xff0c;难以满足日益增长的信息管理需求。本研究旨在研发一款基于Python的图书馆信息管理系统&#xff0c;以提高图书馆信息管理的效率和准确性…

RCE复现

1.过滤flag <?php error_reporting(0); if(isset($_GET[c])){$c $_GET[c];if(!preg_match("/flag/i", $c)){eval($c);}}else{highlight_file(__FILE__);代码审计过滤了"flag"关键词&#xff0c;但限制较弱&#xff0c;容易绕过 ?csystem("ls&…

FPGA_YOLO(四) 部署yolo HLS和Verilog 分别干什么

首先,YOLO作为深度学习模型,主要包括卷积层、池化层、全连接层等。其中,卷积层占据了大部分计算量,尤其适合在FPGA上进行并行加速。而像激活函数(如ReLU)和池化层相对简单,可能更容易用HLS实现。FPGA的优势在于并行处理和定制化硬件加速,因此在处理这些计算密集型任务时…

自动化发布工具CI/CD实践Jenkins介绍!

1. 认识Jenkins 1.1 Jenkins是什么&#xff1f; Jenkins 是一个开源的自动化服务器&#xff0c;主要用于持续集成和持续部署&#xff08;CI/CD&#xff09;。 它由Java编写&#xff0c;因此它可以在Windows、Linux和macOS等大多数操作系统上运行。 Jenkins 提供了一个易于使用…

【愚公系列】《高效使用DeepSeek》039-政务工作辅助

🌟【技术大咖愚公搬代码:全栈专家的成长之路,你关注的宝藏博主在这里!】🌟 📣开发者圈持续输出高质量干货的"愚公精神"践行者——全网百万开发者都在追更的顶级技术博主! 👉 江湖人称"愚公搬代码",用七年如一日的精神深耕技术领域,以"…

深度学习篇---模型训练评估参数

文章目录 前言一、Precision&#xff08;精确率&#xff09;1.1定义1.2意义1.3数值接近11.4数值再0.5左右1.5数值接近0 二、Recall&#xff08;召回率&#xff09;2.1定义2.2意义2.3数值接近12.4数值在0.5左右2.5数值接近0 三、Accuracy&#xff08;准确率&#xff09;3.1定义3…

Windows 图形显示驱动开发-WDDM 2.4功能-GPU 半虚拟化(十一)

注册表设置 GPU虚拟化标志 GpuVirtualizationFlags 注册表项用于设置半虚拟化 GPU 的行为。 密钥位于&#xff1a; DWORD HKLM\System\CurrentControlSet\Control\GraphicsDrivers\GpuVirtualizationFlags 定义了以下位&#xff1a; 位描述0x1 ​ 为所有硬件适配器强制设置…

Vue 的 nextTick 是如何实现的?

参考答案&#xff1a; nextTick 的本质将回调函数包装为一个微任务放入到微任务队列&#xff0c;这样浏览器在完成渲染任务后会优先执行微任务。 nextTick 在 Vue2 和 Vue3 里的实现有一些不同&#xff1a; 1. Vue2 为了兼容旧浏览器&#xff0c;会根据不同的环境选择不同包装策…

安卓开发之LiveData与DataBinding

LiveData——生命周期感知 LiveData 是 Android Jetpack 提供的一个生命周期感知的数据持有者类&#xff0c;它可以用于持有数据并在数据发生变化时通知观察者。LiveData 常与 ViewModel 配合使用&#xff0c;帮助简化 UI 层和数据层之间的交互&#xff0c;确保 UI 在合适的生…

TCP协议与wireshark抓包分析

一、tcp协议格式 1. 源端口号 &#xff1a; 发送方使用的端口号 2. 目的端口号 &#xff1a; 接收方使用的端口号 3. 序号: 数据包编号 &#xff0c; tcp 协议为每个数据都设置编号,用于确认是否接收到相应的包 4. 确认序列号 : 使用 tcp 协议接收到数据包&#xff0c…

《HelloGitHub》第 108 期

兴趣是最好的老师&#xff0c;HelloGitHub 让你对开源感兴趣&#xff01; 简介 HelloGitHub 分享 GitHub 上有趣、入门级的开源项目。 github.com/521xueweihan/HelloGitHub 这里有实战项目、入门教程、黑科技、开源书籍、大厂开源项目等&#xff0c;涵盖多种编程语言 Python、…