关于容器:Docker教程如何将Helix-QAC创建为一个容器并运行

92次阅读

共计 5655 个字符,预计需要花费 15 分钟才能阅读完成。

在这个 Docker 教程中,你将理解到如何将 Helix QAC 创立为一个容器化的镜像并运行。

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

从根本上说,容器只是一个运行的过程,并利用了一些附加的封装个性。借助容器,开发人员(和 DevOps 管理员)能够将应用程序与运行应用程序所需的所有(包含代码、运行时刻、库、配置的环境变量和配置文件)打包在一起,并将所有内容作为一个软件包交付。

还值得一提的是,Docker 能够立刻启动,并具备内置的版本控制和组件复用机制。这些 Docker 容器能够通过公共 Docker Hub 或公有存储库共享,使它们易于拜访和应用。

以下是 Docker 的一些显著劣势:

  • 疾速部署:Docker 能够为每个过程创立一个容器,这些容器能够按需疾速启动和敞开,而无需启动平台操作系统(OS)。这将部署过程工夫缩短到几秒钟。此外,Docker 镜像的启动简直是即时的。
  • 可移植性:Docker 能够将通过测试的容器化应用程序部署到任何其余运行 Docker 的零碎上,并确保它的性能与测试时完全相同。Docker 镜像能够与其余团队共享。
  • 性能:只管虚拟机(VM)是容器的代替计划,但 VM 具备操作系统,而 Docker 容器没有。这意味着容器比 VM 占用更少的资源,创立速度更快,并且启动和敞开的工夫也更快。
  • 继续集成效率:Docker 使您可能构建容器镜像,并在开发、测试和部署的每个步骤中应用它。此外,您还能够将非依赖性步骤离开,而后并行运行它们,从而缩短从构建阶段到生产部署阶段所需的工夫。这缩短了设置环境和调试环境特定问题的工夫,使它们更牢靠且更易于保护。

然而,Docker 也有一些限度,即便它们对 Docker 的动态分析器的设置影响很小,但理解这些限度仍然很重要。

  • Docker 不能代替虚拟机:在虚拟机中运行的许多利用都能够挪动到容器中,但并不是说所有的利用都须要或都能够挪动到容器中。例如,具备严格监管要求的行业可能无奈用容器替换虚拟机,因为虚拟机提供比容器更高级别的隔离。
  • 容器中的数据:有时容器会呈现故障,在这种状况下,它须要备份和复原策略。尽管有几种解决方案,但没有一种是自动化或能够扩大的。另一个限度是,除非在容器敞开之前将其保留在某个中央,否则当容器敞开时,其中的所有数据都将永远隐没。
  • 跨平台兼容性:如果一个利用程序设计为在特定平台(例如 Windows 操作系统平台或 Linux)上的 Docker 容器中运行,则无奈在任何其余平台上运行。然而,虚拟机不受此限度,因而这种限度使 Docker 对于一些由 Windows 和 Linux 服务器组成的高度异构的环境不太具备吸引力。
  • 应用图形界面运行应用程序:总的来说,Docker 是为托管在命令行上运行的应用程序而设计的。尽管有几种办法(比方应用 X11 转发或 MobaXterm)能够让咱们在 Docker 容器中运行图形界面,但这些过程很繁琐。因而,能够说 Docker 对于须要丰盛接口的应用程序来说不是一个好的解决方案。

为了帮忙大家更好地将动态剖析工具设置为 Docker,并解除这些限度,我将设置过程合成为三个简略的局部。

您能够从拜访 https://docs.docker.com/get-started/overview 开始,外面有很多对于如何设置 Docker 引擎并验证环境是否正确设置的详细信息。

第一局部:筹备 Docker 引擎

从此网站 https://docs.docker.com/engine/install 下载并装置适宜您操作系统平台的 Docker 引擎。

通过运行名为“hello-world”的样例 Docker 镜像来验证 Docker 引擎是否已正确装置。应用此命令示例:

  • $ sudo docker 运行 hello-world
  • 该命令将下载一个简略的“hello-world”测试 Docker 镜像并在容器中运行它。因而,当容器运行时,它会打印一条信息性音讯并退出。

下一部分的指标是设置一个 Docker 容器,让它作为 Helix 动态代码剖析工具来运行。有几种办法能够配置 Docker 镜像以反对不同的编码合规性模块,例如 MISRA、AUTOSAR、CWE、CERT 和动态代码扫描工具等。

然而,在本教程中,我将只演示如何应用一些重要的组件来构建特定的 Docker 镜像,咱们将在 Docker 容器中应用这些组件作为 Helix QAC 工具 (DaaQT)。

另外,我还将探讨在运行剖析扫描工具时,如何解决我的项目数据配置的长久化,这样您就能够将 Helix QAC 我的项目标准和我的项目反对配置文件存储在 Docker 容器外,比方 prqa 我的项目文件夹和 pqraproject.xml.<name> 反对的文件。

对这些文件所做的任何更改将在 Docker 容器执行实现并敞开后长久存在。任何构建脚本的更改都会从一个构建到另一个构建输入到主机上映射的内部我的项目文件夹,并放弃持久性。

第二局部:创立、构建和运行

首先,让咱们来确定一些我抉择用于构建 Docker 镜像的组件及其根本形容。

  • Helix-QAC-2022.2(C/C++ 动态剖析解析器)
  • ASCM-3.3.0(AUTOSAR 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”文件夹下。

以下是“qacDockerfile”脚本文件的内容和一些解释。

  • 第 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 是 qacDockerfile 名称,默认状况下原始名称是 Dockerfile。
  • - t 是格局“name:tag”因而名称是“qacscatools”,标签是“22v2”,以批示应用了哪个 Helix-QAC 工具版本。
  • 不要遗记开端的“dot”,它示意这是一个本地目录。

构建镜像过程实现后,能够看到最初两行音讯,批示写入文件并标记镜像。若要验证构建是否胜利,请运行以下命令以显示所有可用 Docker 镜像列表。

  • $>docker images

(留神:上图中,图像标签 ID 为 bd8c9d08dc4d。)

第三局部:在本地我的项目上运行 DaaQT

在咱们应用这个 Docker 容器化镜像(作为 QAC 工具的 Docker——DaaQT)在本地桌面我的项目上运行任何动态代码剖析之前,咱们须要确保咱们有权拜访许可证服务器,以取得应用该工具的权限。

在我的示例中,我将应用内部近程 Reprise 许可证治理服务器来申请要应用的许可证。

首先,咱们须要创立一个本地我的项目运行脚本,该脚本晓得在哪里以及如何拜访近程 Reprise 许可证服务器。此我的项目运行脚本还必须晓得 Helix QAC 仪表板服务器的地位,以便在剖析运行实现后上传我的项目诊断音讯后果。

让咱们审查一下名为“runQACSCA.sh”的脚本文件及其内容。我将逐渐解释它的作用。

  • 第 3 行是对桌面计算机上我的项目文件夹名称的援用。
  • 第 7 行是 Helix QAC 仪表板服务器上我的项目持有者的名称,用于上传诊断音讯和我的项目信息。(留神:第 8 行可用于匹配本地文件夹名称。)
  • 第 9 行到第 11 行是无关 Helix QAC 仪表板服务器的信息,例如 URL 地址(或 FQDN)、服务器端口和许可证服务器端口。
  • 第 14 行是本地桌面我的项目工作区名称服务器 URL 地址(或 FQDN)、服务器端口和许可证服务器端口。
  • 第 15 行和第 16 行是对 Helix QAC 解析器工具所在位置的外部 Docker 镜像的援用,以及映射我的项目工作区的地位。
  • 第 19 行供 Docker 与许可证服务器通信,以申请应用工具许可证。
  • 第 25 即将 Docker 镜像设置为正确的入口点,以便定位映射的我的项目工作区。
  • 第 28 行到第 29 行是抉择一个规定配置文件用于我的项目。这些默认文件名是针对特定规定组配置进行标识的。您能够通过合并任何一个或多个规定配置文件来创立本人的自定义 RCF 文件,但在应用之前,必须在 Helix QAC 桌面 GUI 应用程序中实现自定义 RCF 文件的创立。此外,新的自定义名称须要与默认文件名不同。
  • 第 34 行和第 35 行是为编译器工具链进行映射。在我的示例中,我曾经映射到要应用地 GNU C/CPP 11.2 版本。
  • 第 38 行用于创立 PRQA 我的项目配置并设置需要我的项目配置。
  • 第 41 行让 Helix QAC 可能监控和跟踪我的项目如何用其命令进行本地构建。
  • 如果我的项目须要执行一些关系跨模块剖析(RCMA)和 / 或多线程剖析(MTA),则通常应用第 44 行和第 45 行。
  • 第 47 行到第 49 行是抉择一个编码合规性模块,用于满足您的编码合规性要求需要。请确保此设置与第 28 行至第 31 行的 RCF 设置相匹配。
  • 第 52 行是应用上述所有配置和设置参数,对您的我的项目执行动态代码剖析。
  • 第 55 行是将项目分析扫描后果上传到 Helix QAC 的仪表板服务器,并将其

放在我的项目持有人中。上传的信息是蕴含诊断音讯以及我的项目配置设置的源文件。

运行以下 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”示意卷映射 LocalHostVolume:DockerVolume。
  • “–entrypoint”为登录后的开始地位,能够是命令行开始运行带有批示内容的 location/file_name.sh。

您也能够应用 shell 脚本来运行它,而不用记住在命令行上输出的所有参数。除了不用记住所有这些细节之外,这也使咱们对脚本文件进行最小的更改,以适应其余相似的我的项目。

在我的例子中,我创立了一个名为“runDaaQT.sh”的 shell 脚本。

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

显示 shell 脚本应用状况的屏幕截图。

作为抉择,您也能够为 CMakeNinja 我的项目运行这个 Docker 容器,它的命令行与之前演示的我的项目相似。这个我的项目应用 CMake 和 Ninja 命令行构建零碎。

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

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

显示 CMakeNinja 我的项目命令行用法的屏幕截图。

作者简介:

Dzuy Tran,Klocwork 和 Helix QAC 高级解决方案架构师,Perforce 公司

DzuyTran 在硬件和软件嵌入式零碎,RTOS,挪动应用程序和企业零碎的设计和开发方面领有 30 多年的教训。当客户遇到技术问题时,他会帮忙他们,帮助进行概念验证,并演示动态代码剖析工具,并帮忙领导客户进行 DevOps 施行流程和继续集成部署。Dzuy 领有国立理工大学计算机科学和计算机工程硕士学位。

文章起源:http://bit.ly/3ZTux4I

正文完
 0