2024年Hadolint:Lint Dockerfile 的完整指南(1),2024年Golang开发陷入饱和

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

想学习如何使用 Hadolint 对 Dockerfile 进行 lint 处理吗?这篇博文将向您展示如何操作。这是关于 Dockerfile linting 的完整指南。

通过对 Dockerfile 进行 lint 检查,您可以及早发现错误和问题,并确保它们遵循最佳实践。

什么是Hadolint?

Hadolint 是一个使用 Haskell 构建的开源命令行 Dockerfile linter 工具,可帮助您编写无错误的 Dockersfile。Hadolint 会检查您的 Dockerfile 是否存在可能的错误、安全漏洞和性能问题。它在 GitHub 上有超过 9k 的启动

这是它的工作原理。

  1. Hadolint 读取 Dockerfile
  2. 它将 Dockerfile 解析为 AST(抽象语法树),以标识与其关联的每个指令和参数。
  3. 然后,它根据预定义的规则集检查每条指令,这些规则涵盖安全性、效率和代码质量。这些规则是 Hadolint 源代码的一部分。您可以在此处查看规则列表
  4. Hadolint 会标记所有违反规则的行为,并会针对所有检测到的问题创建反馈。

问题的严重性分类如下:

  1. Info– 您将获得有关信息改进的建议。它被认为不太严重。
  2. Style – 与 Dockerfile 的格式或结构相关,例如使用缩进或使用长单行等。
  3. Warning – 不太严重的问题和需要改进的次要安全问题。
  4. Error– 这些问题很严重,可能与安全漏洞或重大最佳实践违规有关。

现在我们已经对 Hadolint 有了基本的了解,让我们继续安装并查看它的实际效果。

安装 Hadolint

您可以在 Linux、Mac 和 Windows 系统上安装 Hadolint。

在 Linux 中安装

如果要在Linux系统中安装Hadolint,请按照以下步骤操作。

**步骤1:**从 Hadolint Github 发布页面下载最新的 Linux Hadolint 包。

wget -O hadolint https://github.com/hadolint/hadolint/releases/download/v2.12.0/hadolint-Linux-x86_64

**步骤2:**下载应用程序后,将其移动到 /usr/local/bin 目录。

sudo mv hadolint /usr/local/bin/hadolint

第 3 步:使用下面给出的命令向 Hadolint 授予执行权限。

sudo chmod +x /usr/local/bin/hadolint
在 Mac 中安装

您可以使用下面给出的命令在 Mac 系统上安装 Hadolint。

brew install hadolint

要检查 Linux 或 Mac 系统上是否安装了 Hadolint,请运行以下命令:

hadolint --version
在 Windows 中安装

使用 scoop 在 Windows 上安装 Hadolint

scoop install hadolint

安装 hadolint 后,您将拥有 hadolint CLI 来对 Dockerfile 运行 lint 测试。

要了解所有 CLI 选项,可以使用 –help 标志。

hadolint --help

使用 Hadolint 的 lint Dockerfile

要使用 Hadolint,只需将其安装在您的系统上并使用 Dockerfile 运行该命令。Hadolint 将提供它在 Dockerfile 中发现的错误列表作为输出,以及严重性级别和该问题的原因。

为了获得实际的理解,我们将使用未优化的 Dockerfile。

将以下内容另存为 Dockerfile

FROM ubuntu:latest
RUN apt-get update
RUN apt-get install -y curl
RUN apt-get update && apt-get install -y curl
RUN echo "hello world" | grep "world" | wc -l
CMD ["echo", "Hello, world!"]

让我们针对上面的 Dockerfile 运行 Hadolint。确保 Dockerfile 位于运行 hadolint 命令的同一目录中。

hadolint Dockerfile

您将收到以下输出,其中包含“警告”和**“信息”消息,其中包含规则编号和修正信息**,如下图所示。

如果您检查编号 7,Hadolint 也会提供有关 shell 脚本的信息。Hadolint 在后台使用 Shellcheck 对属于 RUN 指令一部分的 shell 脚本进行 lint 处理。

现在,如果您检查退出代码,您将获得一个非零返回。

hadolint-examples git:(main) ✗ echo $?                      
1
➜  hadolint-examples git:(main) ✗

如果实现所有建议,将获得以下 Dockerfile。

# Use Ubuntu 20.04 as the base image
FROM ubuntu:20.04

# Set the default shell with -o pipefail
SHELL ["/bin/bash", "-o", "pipefail", "-c"]

# Run commands
RUN apt-get update && \
    apt-get install -y curl=8.4.0 --no-install-recommends && \
    apt-get clean && \
    rm -rf /var/lib/apt/lists/* && \
    echo "hello world" | grep -c "world"

# Default command to run
CMD ["echo", "Hello, world!"]

现在,如果对修正和更新的 Dockerfile 运行 Hadolint,则不会收到任何警告或信息消息。如果您检查返回值,您将获得如下图所示。**0**

忽略规则

在某些情况下,你可能不希望修正所有建议。在这种情况下,您可以使用 --ignore 标志忽略特定规则。

例如,如果我想忽略建议指定软件包版本的 DL3008,可以使用以下命令。

hadolint --ignore DL3008 Dockerfile

在使用 CI/CD 系统时,我们需要标准化衬里的所有配置和规则。这是配置文件hadolint.yaml的用武之地。

img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取

tz3yHgx-1715654347660)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值