zl程序教程

您现在的位置是:首页 >  工具

当前栏目

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

Docker教程容器 如何 创建 运行 作为
2023-09-14 09:11:04 时间

在此 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 并解决这些限制,我将把设置分解为三个简单的部分。

一个适合入门者学习的网站是 https://docs.docker.com/get-started/overview ,其中包含有关设置 Docker 引擎的大量详细信息,以及如何验证环境的正确设置。

第一部分:准备Docker引擎

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

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

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

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

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

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

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

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

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

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

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

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

![在这里插入图片描述](https://img-blog.csdnimg.cn/a64b813060a143938fd7e2562baca1e7.png

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

在这里插入图片描述

• 第 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

在这里插入图片描述

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

第三部分:在本地项目上运行 DaaQT——Docker 教程:如何将Helix QAC作为容器创建并运行 下

➡️➡️➡️立即申请免费试用Helix QAC,发送邮件至info@polelink.com