0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Docker 教程:如何将Helix QAC作为容器创建并运行

北汇信息POLELINK 2022-10-31 09:36 次阅读

在此 Docker 教程中,你将学习如何创建Helix QAC并将其作为容器化镜像运行。

Docker的基本定义是一种开源和流行的操作系统级虚拟化(通常称为“容器化”)技术,它是轻量级的,可移植的,并且主要在Linux和Windows上运行。Docker使使用容器创建、部署和运行应用程序变得更加容易。

从根本上说,容器只是一个正在运行的进程,并应用了一些附加的封装功能。借助容器,开发人员(和DevOps管理员)可以将应用程序与运行应用程序所需的一切(包括代码、运行时、库、配置的环境变量和配置文件)打包在一起,并将其全部作为一个包提供。

还值得一提的是,Docker可以立即启动,并具有用于版本控制和组件可重用的内置机制。这些Docker容器可以通过公共Docker中心或私有存储库共享,从而使其易于访问和使用。

以下是 Docker 的一些最显著的优势:

  • 快速部署:Docker 可以为每个进程创建一个容器,然后可以根据需要快速启动和删除该容器,而无需启动平台操作系统 (OS)。这将部署过程时间缩短到几秒钟 此外,Docker镜像启动几乎是实时响应的。
  • 可移植性:Docker 允许将经过测试的容器化应用程序部署到运行Docker的任何其他系统,并确保其执行方式与您测试时完全相同。Docker镜像可以与其他团队共享。
  • 性能:尽管虚拟机 (VM) 是容器的替代方法,但VM具有操作系统,而Docker容器则没有。这意味着容器的占用空间比VM小,创建速度更快,并且启动和删除时间更快。
  • 持续集成效率:Docker 使你能够构建容器镜像,并在从开发、测试到部署的每个步骤中使用它。此外,您还可以分离不相关的步骤并且并行地运行它们,从而缩短从生成阶段到生产部署阶段所需的时间。这减少了设置环境和调试特定于环境的问题的时间,使它们更可靠,更易于维护。

但是,Docker 存在一些限制,尽管它们对Docker静态分析器的设置的影响很小甚至为零,但了解这些限制对您来说仍然很重要。

  • Docker 不能替代虚拟机:许多在 VM 中运行的应用都可以移动到容器中,但这并不意味着它们都可以或应该移动到容器中。例如:具有严格法规要求的行业可能无法将容器交换为VM,因为VM比容器提供更多的隔离。
  • 容器中的数据:有时容器确实会出现故障,在这种情况下,它需要备份和恢复策略。虽然有几种解决方案,但没有一个是自动化的或者尚不可扩展的。另一个限制是,除非您在容器关闭之前先将其保存在某个位置,否则当它关闭时,其中的所有数据都会永远消失。
  • 跨平台兼容性:如果应用程序被设计为在特定平台(如 Windows OS 平台或Linux)上的Docker容器中运行,这是一个主要问题,因为它无法在任何其他平台上运行。但是,虚拟机不受此限制的约束,因此该限制使 Docker 对一些由Windows和Linux服务器组成的高度异构环境的吸引力降低。
  • 使用图形界面运行应用程序:通常,Docker 设计用于托管在命令行上运行的应用程序。虽然我们有几种方法(如使用X11转发或MobaXterm)可以在 Docker 容器内运行图形界面,但这些过程很笨拙。因此,我们可以说Docker对于需要丰富接口的应用程序来说不是一个好的解决方案。

为了帮助将静态分析工具设置为 Docker 并解决这些限制,我将把设置分解为三个简单的部分。

第一部分:准备Docker引擎

  1. 从此站点下载并安装适用于您选择的操作系统 (OS) 平台的Docker引擎:https://docs.docker.com/engine/install
  2. 要验证 Docker 引擎是否已正确安装,请运行名为“hello-world”的示例Docker镜像。使用以下命令示例:
  • $ sudo docker run hello-world
  • 该命令将下载一个简单的“hello-world”测试Docker镜像,并在容器中运行它。因此,当容器运行时,它会打印消息并退出。

我们的 Docker 容器教程的下一部分的目标是将Docker容器设置为作为Helix 静态代码分析工具运行。有几种方法可以配置 Docker 镜像以支持不同的编码合规性模块,例如MISRAAUTOSARCWECERT和静态代码扫描工具等。

但是,在本教程中,我将仅演示如何使用一些重要组件构建特定的 Docker 镜像,我们将在Docker容器中将这些组件用作Helix QAC工具 (DaaQT)。

此外,我将讨论在运行分析扫描工具时如何处理项目数据配置的持久性,以便您可以将Helix QAC项目规范和项目支持配置文件存储在docker容器之外,例如prqa项目文件夹和pqraproject.xml.支持的文件。

即使 Docker 容器执行完成并关闭,对这些文件所做的任何更改都将保持不变。从docker执行上的生成到生成的任何生成脚本更改都将输出到主机上映射的外部项目文件夹,并保持持久性。

第 II 部分:创建、生成和运行

首先,让我们确定我选择用于构建 docker 镜像的一些组件及其基本说明。

  • Helix QAC-2022.2 (C/C++静态分析解析器
  • ASCM-3.3.0(AYTOSARC++14 编码合规性)
  • M3CM-3.3.0 (MISRAC 2012 编码合规性)
  • MCPP-2.3.0(MISRAC++ 2008 编码合规性)
  • CERTCCM-2.3.0(对C的安全编码标准支持)
  • CERTCCPCM-2.3.0(支持 CPP 的安全编码标准)

接下来,下载您试用(或已购买)的Helix QAC解析器工具和编码合规性模块,并将这些安装文件放在主机上的已知文件夹位置。

  • 在我的示例中,将有六个文件(一个解析器工具文件和五个编码合规性模块)。

接下来,创建一个docker构建脚本文件。例如,我将文件命名为“qacDockerfile”,没有文件扩展名(默认名称为“dockerfile”)。docker引擎将使用此文件创建docker镜像。基本上,它有一个命令列表,可以发送给docker引擎,以自上而下的顺序执行它们。。

然后将这些文件(包括qacDockerfile)放在DaaQT文件夹中。这些是生成此docker镜像所需的唯一文件。另外,请注意,我已经将它们放在“vDockerBuilds/DaaQT”文件夹下。

以下是“qac文档”脚本文件的内容以及一些说明。

poYBAGNcjLeAG6ZkAAFUV0h0ga4843.png

  • 第 1 行是使用Ubuntu 22.04作为基本镜像开始的。
  • 第 4 行至第7行使Ubuntu操作系统保持最新状态,并允许时区设置。
  • 第 10 行是可选的,但建议添加这些有用的工具,因为Ubuntu基础镜像是准系统镜像。
  • 第 15 行将安装基本的构建工具、gnu编译器依赖项和任何支持文件。此步骤对于编译器工具链使用需求会有所不同。但是,在我的示例案例中,此图像将使用gcc/g++ 11编译器。
  • 第 19 行和第20行指示Docker引擎创建一个名为“QacWorkspace”的工作目录,所有子顺序命令都将使用该目录。
  • 第 25 行将所有安装文件的权限更改为可执行文件。
  • 第 28 行以静默模式安装Helix-QAC解析器工具并接受许可协议。
  • 第 31 行至第35行以静默模式安装选定的编码合规性模块,并接受许可协议。
  • 第 38 行正在清理安装文件,以使docker镜像尽可能小的占用空间。

接下来,要构建 docker 镜像,我们需要运行以下命令:

$> docker build --pull --no-cache -f qacDockerfile -t qacscatools:22v2.

  • 拉取和无缓存参数是为了确保它始终获取最新的 ubuntu 镜像,并从头开始构建docker镜像。
  • -f 是qac Docker文件名称,默认情况下,原始名称是dockerfile。
  • -t 是格式“名称:标签”,因此名称是“qacscatools”,标签是“22v2”,以指示使用了哪个Helix-QAC工具版本。
  • 不要忘记末尾的“点”,这表明它是一个本地目录。

构建镜像过程完成后,您可以看到最后两行消息,这些消息指示写入文件并标记镜像。若要验证生成是否成功,请运行以下命令以显示所有可用 Docker 镜像的列表。

  • $>docker images

pYYBAGNcjLeAHEgvAADufgUifBw315.png

(注意:在上图中,图像标记 ID 为bd8c9d08dc4d。)

第三部分:在本地项目上运行 DaaQT

在使用此 docker 容器化镜像(Docker作为QAC工具– DaaQT)在本地桌面项目上运行任何静态代码分析之前,我们需要确保可以访问许可证服务器以获得使用该工具的权限。

在我的示例中,我将使用外部远程 Reprise 许可证管理服务器来请求要使用的许可证。

首先,我们需要创建一个本地项目运行脚本,该脚本知道在何处以及如何访问远程 Reprise 许可证服务器。此项目运行脚本还必须知道Helix QAC Dashboard服务器所在的位置,以便在分析运行完成后上载项目诊断消息结果。

让我们回顾一下名为“runQACSCA.sh”的脚本文件及其内容。我将逐步提供一些关于它的作用的解释。

poYBAGNcjLeALLVOAAFLg9ieNaU012.png

  • 第 3 行是对桌面计算机上项目文件夹名称的引用。
  • 第 7 行是Helix QAC Dashboard服务器上的项目持有者的名称,用于上载诊断消息和项目信息
    (注意:第 8 行可用于与本地文件夹名称匹配。)
  • 第 9 行到第11行是有关Helix QAC Dashboard服务器的信息,例如URL地址(或FQDN)、服务器端口和许可证服务器端口。
  • 第 14 行是本地桌面项目工作区名称“服务器URL地址”(或FQDN)、服务器端口和“许可证服务器端口”。
  • 第 15 行和第16行引用了Helix QAC解析器工具所在的内部docker镜像,以及映射项目工作区位置。
  • 第 19 行用于使Docker与许可证服务器通信,以请求工具许可证以供使用。
  • 第 25 行将Docker镜像设置为映射的项目工作区所在的正确入口点。
  • 第 28 行到第29行是选择要用于项目的规则配置文件之一。这些默认文件名是为特定规则组配置标识的。您可以通过合并任何一个或多个规则配置文件来创建自己的客户RCF文件,但是,自定义RCF文件需要在Helix QAC桌面GUI应用程序中完成,然后才能使用。此外,新的自定义名称需要与默认文件名不同。
  • 第 34 行和第35行用于映射到要使用的编译器工具链。对于我的例子,我已经映射到使用任何一个GNU C/CPP 11.2版本。
  • 第 38 行是创建PRQA项目配置并设置要求项目配置。
  • 第41行允许Helix QAC监控和跟踪如何使用其命令在本地构建项目的方式。
  • 如果项目需要执行一些关系跨模块分析 (RCMA) 和/或多线程分析 (MTA),则通常使用第44行和第45行。
  • 第 47 行至第49行是选择一个编码合规性模块,用于满足您的编码合规性需求。请确保此设置与第28行到第31行的RCF设置匹配。
  • 第 52 行是使用上述所有配置和设置参数对项目执行静态代码分析。
  • 第55行是将项目分析扫描结果上传到Helix QACDashboard服务器,并将其放在项目支架中。上载的信息是包含诊断消息和项目配置设置的源代码文件。

运行以下 docker 命令,这些命令会将本地项目卷映射到docker项目卷,以便保留分析数据文件。请密切注意ENTRYPOINT参数,其中脚本文件“runQACSCA.sh”将从项目根文件夹执行。

以下是带有一些解释的Docker命令:

  • docker run --rm -it -v ~/ProjectsSandbox/MyCppCodeQac:/QacWorkspace/MyCppCodeQac--entrypoint=/QacWorkspace/MyCppCodeQac/runQACSCA.sh qacscatools:22v2“run”,就是执行。
  • “-it”以交互方式运行Docker(所以你会得到一个带有STDIN的伪TTY)。
  • “--rm”使Docker在容器退出时自动将其删除。
  • “-v”表示卷映射本地主机卷:DockerVolume。
  • “--entrypoint”表示登录时从哪里开始,命令行开始运行带有说明内容的位置/file_name.sh。

您还可以使用 shell 脚本来运行它,而不必记住在命令行上键入所有这些参数。除了不必记住所有这些细节之外,这还允许我们对脚本文件进行最小的更改,以适应其他类似的项目。

对于我的示例,我创建了一个名为“runDaaQT.sh”的shell脚本。

pYYBAGNcjLeAE2Q8AADaAM2EIso717.png

显示 docker 命令行用法的屏幕截图。

pYYBAGNcjLeAOlV1AAFRbfFzBB4066.png

显示 shell 脚本用法的屏幕截图。

poYBAGNcjLiAZpSiAAGK6m0TMuM737.png

(可选)还可以为 CMakeNinja 项目运行此Docker容器,它的命令行与之前演示的项目类似。此项目使用 CMake 和Ninja命令行构建系统。

要使用类似的命令行或 shell 脚本文件,您需要在命令行中对正确项目卷 (CMakeNinja) 名称的命令语法进行一些编辑,如下所示:

$> docker run --rm -it -v ~/QacProjectsSandbox/CMakeNinja:/QacWorkspace/CMakeNinja--entrypoint=/QacWorkspace/CMakeNinja/runQACSCA.sh qacscatools:22v2

pYYBAGNcjLiATXOMAANFyGEIUiY926.png

CMakeNinja项目的命令行用法截图。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 容器
    +关注

    关注

    0

    文章

    494

    浏览量

    22050
  • Docker
    +关注

    关注

    0

    文章

    456

    浏览量

    11825
收藏 人收藏

    评论

    相关推荐

    Helix QAC 2024.3新特性速览

    Helix QAC 2024.3 附带适用于 Windows 和 Linux 的基于 Qt 的新安装程序,增强了对Validate SAML/OIDC 身份验证的支持。此版本还包括对某些环境的 Dataflow 稳健性的改进,
    的头像 发表于 11-06 15:42 212次阅读
    <b class='flag-5'>Helix</b> <b class='flag-5'>QAC</b> 2024.3新特性速览

    Docker运行环境安装

    、发布、测试和部署,可以帮助开发人员最新版本代码应用到生产环境中。 Docker可以安装在多个平台中,包括Mac、Windows和Linux。不过,生产环境还是推荐在Linux上运行,以下以主流的Linux操作系统(CentO
    的头像 发表于 10-29 11:28 175次阅读

    代码静态测试工具Helix QAC 2024.2新发

    Helix QAC 2024.2 带来了新的特性和功能,为开发过程增加了灵活的选项。用户使用新的 CI 分析通过 Validate 获得完整的 CI 集成支持,从而轻松管理 CI/CD 更改分析结果加快测试反馈速度,
    的头像 发表于 08-05 17:40 321次阅读
    代码静态测试工具<b class='flag-5'>Helix</b> <b class='flag-5'>QAC</b> 2024.2新发

    ARM平台实现Docker容器技术

    下载镜像运行容器的方法。1 Docker安装1.1 安装方法(1)安装依赖包 打开Ubuntu,确保Ubuntu可正常访问互联网,执行如下命令安装
    发表于 07-25 14:36

    ARM平台实现Docker容器技术

    T113-i工业核心板在支持Docker后,其性价比还将进一步提升!图2基于T113-i平台实现Docker容器技术 如下为基于全志T113-i工业平台,演示Docker安装、构建镜像
    发表于 07-17 11:05

    关于Docker 的清理命令集锦

    # 杀死全部正在运行容器. alias dockerkill='docker kill $(docker ps -a -q)' # 删除所
    的头像 发表于 06-13 15:56 346次阅读

    代码静态测试工具 Helix QAC 2024.1版新功能解读

    Helix QAC 2024.1改进了对C++20和C23语言特性的支持,增加了分析使用多个编译器的项目的新功能。此外,Validate增强了对于搜索功能和角色权限的用户体验,并且包括一个
    的头像 发表于 04-25 12:32 560次阅读
    代码静态测试工具 <b class='flag-5'>Helix</b> <b class='flag-5'>QAC</b> 2024.1版新功能解读

    Docker容器技术的安装和使用

    通过Docker,开发人员可以更容易地构建、交付和运行应用程序,同时确保应用程序的一致性和可移植性。它也使得应用程序的部署更加灵活和高效,因为它可以快速地启动、停止和扩展容器,而不会影响其他
    发表于 04-16 11:24 298次阅读
    <b class='flag-5'>Docker</b><b class='flag-5'>容器</b>技术的安装和使用

    ARM平台实现Docker容器技术

    什么是Docker? (1)Docker的架构 Docker是一个开源的应用容器引擎,让开发者可打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的Linux或Windo
    的头像 发表于 03-07 13:48 775次阅读
    ARM平台实现<b class='flag-5'>Docker</b><b class='flag-5'>容器</b>技术

    如何将LED连接到Arduino板使其闪烁

     在本快速入门指南中,您将学习如何将 LED 连接到 Arduino 板使其闪烁。
    的头像 发表于 02-11 10:53 2097次阅读
    <b class='flag-5'>如何将</b>LED连接到Arduino板<b class='flag-5'>并</b>使其闪烁

    如何将PSOC4程序移至RAM运行它?

    如何将 PSOC4 程序移至 RAM 运行它? PSOC CREATOR 里面有套路吗,谢谢。
    发表于 01-25 08:04

    代码静态测试工具Helix QAC 2023.4新发布

    Helix QAC 2023.4 为新的 MISRA C++:2023 指南推出了 100% MISRA C++:2023® 规则覆盖率。此版本还包括扩展的 C++20 语言支持、数据流分析的性能改进以及整个产品中的许多产品体验增强功能。
    的头像 发表于 01-13 12:25 464次阅读
    代码静态测试工具<b class='flag-5'>Helix</b> <b class='flag-5'>QAC</b> 2023.4新发布

    Helix QAC—软件静态测试工具

    Helix QAC是Perforce公司(原PRQA公司)产品,主要用于C/C++代码的自动化静态分析工作,可以提供编码规则以及信息安全相关检查、代码质量度量、软件结构分析、测试结果管理等功能
    的头像 发表于 01-10 17:35 641次阅读
    <b class='flag-5'>Helix</b> <b class='flag-5'>QAC</b>—软件静态测试工具

    铁威马NAS使用docker方式运行Solopace.Gem客户端

    Manager启用 开启ssh远程连接 桌面打开:控制面板>>终端与SNMP>>Telnet/SSH,按照下图设置应用 运行SolopaceGem Docker
    的头像 发表于 12-18 14:31 756次阅读
    铁威马NAS使用<b class='flag-5'>docker</b>方式<b class='flag-5'>运行</b>Solopace.Gem客户端

    redis容器部署并用编程演示sb整合

    Redis,通过编程演示 Spring Boot 如何整合 Redis。 Redis 容器部署 Redis 可以通过容器部署,我们可以使用 Docker
    的头像 发表于 12-05 10:08 389次阅读