【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.pswp.cn/diannao/76152.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/76152.shtml
英文地址,請注明出處:http://en.pswp.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、…