Docker容器使用指南:如何将Klocwork作为一个容器创建和运行

2024-04-22 05:48

本文主要是介绍Docker容器使用指南:如何将Klocwork作为一个容器创建和运行,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在这个Docker容器使用指南中,您将学习如何创建和运行Klocwork容器。

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

从根本上说,容器只不过是一个应用了一些附加封装特性的运行流程。因此,有了容器,开发人员(和DevOps管理员)就可以将应用程序与运行该应用程序所需的所有东西(包括代码、运行时、库、已配置的环境变量和配置文件)打包,并将其作为一个包发布。

还有一点值得一提:Docker可以立即启动,并内置了版本控制和组件复用机制。而且,这些docker容器可以通过公共的Docker Hub或私有的存储库共享——这使它们易于访问和使用。

Docker既有优点,也有缺点。虽然未全面列举,但以下是一些最显著的优势:

  • 快速部署:Docker可以将部署流程的时间缩短到秒级。这是因为它可以为每个流程创建一个容器,然后根据需要将其快速加载和卸载,而不需要启动平台操作系统(OS)。此外,Docker镜像的切换几乎是瞬时的。
  • 可移植性:Docker支持应用程序的可移植性。这意味着,一旦您测试了您的容器化应用程序,您就可以将其部署到Docker正在运行的任何其他系统上,并确保它的执行情况与您测试时完全一样。因此,Docker镜像可以与其他团队共享。这节省了时间,因为他们需要的一切都是可获得的、配置好的、随时可用的。
  • 性能:虽然虚拟机可以替代容器,但虚拟机(VM)有操作系统(OS),而Docker容器没有,这意味着容器比虚拟机(VM)占用的空间更小,创建的速度更快,加载和卸载的时间也更短。
  • 持续集成效率:Docker使您能够构建容器镜像,并在从开发、测试到部署整个流程的每个步骤中使用它。此外,您还可以将不相关的步骤分隔开,然后并行运行它们,这将缩短从构建阶段到生产部署阶段所花费的时间。这也减少了设置环境和调试特定于环境的问题所需的时间——这使它们更可靠,更容易维护。

然而,Docker也有一些限制,尽管对Docker静态代码分析器的设置影响很小,甚至为零,但它们还是值得一提。

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

为了帮助您将静态代码分析器设置为Docker并绕过这些限制,我将把设置分解为三个简单的部分。

从https://docs.docker.com/get-started/overview这个网址开始将是一个很好的选择,该网址上有很多关于设置Docker引擎的详情,以及如何验证环境是否正确设置Docker引擎。

第一部分:准备Docker引擎

  1. 安装Docker CE(社区版本)之前,删除任何旧版本的Docker(有时称为docker, docker.io,或docker-engine)。
  2. 从https://docs.docker.com/engine/install/ubuntu这个网址下载并安装Docker引擎。
  3. 通过运行示例D来验证Docker 引擎是否已正确安装。
  4. Docker镜像又称为“hello-world”。使用以下命令示例:
    • $ sudo dockerrunhello-world
    • 该命令将下载一个简单的“hello-world”测试Docker镜像,并在容器内运行它。因此,当容器运行时,会打印一条信息消息并退出。

在Docker容器使用指南的下一部分中,我们的目标是设置Klocwork。有几种方法可以配置Docker镜像以支持不同的Klocwork组件。您可以为每个镜像中的单个或组合组件构建Docker镜像(这些是受支持的组件,如Klocwork Portal),构建运行集成分析的机器、持续(差异)分析工具或桌面命令行工具。

我将只演示如何构建一个特定的Docker镜像,这将是一个运行集成静态代码分析(Integration Static Code Analysis)的静态代码分析构建工具机器。此外,我将讨论在运行Klocwork分析时如何保存数据,您可以在Docker容器外存储Klocwork构建规范和分析数据(例如buildspec, tracefiles, tables, .kwlp/.kwpsprojects_root)。

因此,如果您正在使用kwbuildproject命令中的‘--incremental’参数,那么每一次构建时都必须保存‘--tables-directory’。因此,在我的设置中,我将把这些文件输出到主机上的外部项目文件夹中。

第二部分:创建、构建和运行

  1. 下载Klocwork安装文件工具包,并将其内容解压缩到您主机上的一个已知文件夹位置。确保将Klocwork服务器(Klocwork Web Portal)安装在同一台机器上或您可以轻松访问的另一台服务器上。在解压缩安装工具包时,您将需要两个文件:
    • kwbuiltools.<version>.zip
    • kwciagent.<version>.zip
  2. 创建一个文件——例如,没有文件扩展名的“kwDockerfile”(默认名称为Dockerfile)。这个文件将被Docker引擎用来创建您的Docker镜像。基本上,它有一个命令列表将会发送到Docker引擎,使其按照从上到下的顺序执行命令。
    • 以下是生成这个Docker镜像仅需的三个文件。我把它们放在我主机上的本地文件夹中(文件夹名称是“vDockerBuilds”),这个文件夹也是我放置创建的文件(“kwDockerfile”)的地方。

  •   以下是“kwDockerfile”文件的内容以及一些具体的解释:

  • 第1行首先使用Ubuntu 20.04作为基础镜像。
  • 第8行是可选但建议添加的有用工具,因为基础镜像只是裸机。
  • 第12至14行将安装Klocwork应用程序所需的库依赖项。
  • 第19行将安装gnu编译器依赖项,这一步会根据使用的编译器而有所不同。但是,就我而言,这个镜像将使用gcc/g++8编译器。
  • 第24行指导Docker引擎创建一个工作目录调用‘klocwork’,所有的子序列命令都将使用该目录。
  • 第27至31行基本上是将构建工具解压缩到Klocwork工作目录中,然后通过删除压缩文件进行清理。

3. 运行以下命令来构建Docker镜像:

  • $> docker build -f kwDockerfile -t kwscatools:20v3 . 
    • -fkwDockerfile名称,默认名称为dockerfile
    • -t是格式‘name:tag’namekwscatoolstag20v3
    • 不要忘记末尾的dot,这说明它是一个本地目录。
  • 一旦构建镜像的流程完成,您就可以看到最后两行消息,这两行消息指示写入文件并标记镜像。要验证构建是否成功,需运行以下命令以显示所有可用Docker镜像的列表。在下面的镜像中,镜像Tag ID是11ec8d62c0d6
    • $>docker images

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

您将需要与经过身份验证的Klocwork工具用户账号相关联的ltoken文件。然后设置脚本以运行SCA docker,使项目数据文件在docker外部存储。这确保了当docker镜像停止时,所有数据不会消失。

  1. 获取ltoken文件,并按照命令序列在已知位置生成ltoken。
    • 选择一台能够访问Klocwork服务器和许可的机器,然后运行以下命令:
      • $> export KLOCWORK_LTOKEN=~/<To_A_Known_Location>/ltoken
      • $>kwauth --urlhttp://<klocwork_server>:8080

为了清楚起见,下面是我用来生成ltoken文件并将其放到已知位置的实际命令:

下面是ltoken文件内容的文本视图。每个值用分号隔开:

  • Klocwork服务器的IP地址(或FQDN名称)、服务器端口号、有效的用户账号和一个很长的哈希码

将ltoken文件放在您的本地项目根文件夹中。如您所见,每一个根文件夹都有各自的ltoken文件:

2.通过创建一个shell脚本文件,将这些数据文件(buildspec, kwtable, etc.)输出到主机上的项目文件夹中,该脚本文件将在Docker镜像中运行三个典型的SCA操作(kwinject,kwbuildproject和kwadmin)。该脚本文件还将使用Docker命令把本地项目卷挂载到Docker项目卷,以便Docker镜像运行流程完成后,分析数据文件将被存储。这是“runKWSCA.sh”文件的内容(见上面的截图)。

              示例:“MyCppCode”项目脚本文件:

  • 第4行是项目文件夹名称。
  • 第6至8行是对另一台机器上的Klocwork服务器的引用。
  • 第11至14行是Docker镜像内部映射的工作目录。
  • 第19、20行是映射到项目卷的“ltoken”文件位置(重要)。
  • 第26行是为了确保您位于项目根目录映射卷中。
  • 第31至33行是项目清理。
  • 第37、41、46行是Klocwork工具的操作步骤。

3. 运行以下Docker命令,将本地项目卷映射到Docker项目卷,这样分析数据文件将被存储。请密切注意ENTRYPOINT参数,其中脚本文件“runKWSCA.sh”将从项目根文件夹中被执行。以下是Docker命令: 

    $> docker run --rm -it -v ~/ProjectsSandbox/MyCppCode:/klocwork/MyCppCode --entrypoint=/klocwork/MyCppCode/runKWSCA.sh kwscatools:20v3

  • run,是执行
  • -it交互式地运行Docker (所以您会获得一个带有STDIN的伪TTY)
  • --rm使Docker在其退出时自动移除容器
  • -v指映射LocalHostVolume:DockerVolume的卷
  • --entrypoint用于登录时从何处开始,命令行可以使用指令内容开始运行location/file_name.sh

输出结果截屏如下:

4. 或者,您也可以为CMakeNinja项目运行这个Docker容器,它有一个类似于之前项目的命令。但是,您需要确保在命令行中附加正确的项目卷(CMakeNinja)。

“原创内容,转载请标明出处”

这篇关于Docker容器使用指南:如何将Klocwork作为一个容器创建和运行的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/924956

相关文章

Window Server创建2台服务器的故障转移群集的图文教程

《WindowServer创建2台服务器的故障转移群集的图文教程》本文主要介绍了在WindowsServer系统上创建一个包含两台成员服务器的故障转移群集,文中通过图文示例介绍的非常详细,对大家的... 目录一、 准备条件二、在ServerB安装故障转移群集三、在ServerC安装故障转移群集,操作与Ser

Window Server2016 AD域的创建的方法步骤

《WindowServer2016AD域的创建的方法步骤》本文主要介绍了WindowServer2016AD域的创建的方法步骤,文中通过图文介绍的非常详细,对大家的学习或者工作具有一定的参考学习价... 目录一、准备条件二、在ServerA服务器中常见AD域管理器:三、创建AD域,域地址为“test.ly”

Spring核心思想之浅谈IoC容器与依赖倒置(DI)

《Spring核心思想之浅谈IoC容器与依赖倒置(DI)》文章介绍了Spring的IoC和DI机制,以及MyBatis的动态代理,通过注解和反射,Spring能够自动管理对象的创建和依赖注入,而MyB... 目录一、控制反转 IoC二、依赖倒置 DI1. 详细概念2. Spring 中 DI 的实现原理三、

Python在固定文件夹批量创建固定后缀的文件(方法详解)

《Python在固定文件夹批量创建固定后缀的文件(方法详解)》文章讲述了如何使用Python批量创建后缀为.md的文件夹,生成100个,代码中需要修改的路径、前缀和后缀名,并提供了注意事项和代码示例,... 目录1. python需求的任务2. Python代码的实现3. 代码修改的位置4. 运行结果5.

使用IntelliJ IDEA创建简单的Java Web项目完整步骤

《使用IntelliJIDEA创建简单的JavaWeb项目完整步骤》:本文主要介绍如何使用IntelliJIDEA创建一个简单的JavaWeb项目,实现登录、注册和查看用户列表功能,使用Se... 目录前置准备项目功能实现步骤1. 创建项目2. 配置 Tomcat3. 项目文件结构4. 创建数据库和表5.

使用SpringBoot创建一个RESTful API的详细步骤

《使用SpringBoot创建一个RESTfulAPI的详细步骤》使用Java的SpringBoot创建RESTfulAPI可以满足多种开发场景,它提供了快速开发、易于配置、可扩展、可维护的优点,尤... 目录一、创建 Spring Boot 项目二、创建控制器类(Controller Class)三、运行

JAVA中整型数组、字符串数组、整型数和字符串 的创建与转换的方法

《JAVA中整型数组、字符串数组、整型数和字符串的创建与转换的方法》本文介绍了Java中字符串、字符数组和整型数组的创建方法,以及它们之间的转换方法,还详细讲解了字符串中的一些常用方法,如index... 目录一、字符串、字符数组和整型数组的创建1、字符串的创建方法1.1 通过引用字符数组来创建字符串1.2

Linux使用nohup命令在后台运行脚本

《Linux使用nohup命令在后台运行脚本》在Linux或类Unix系统中,后台运行脚本是一项非常实用的技能,尤其适用于需要长时间运行的任务或服务,本文我们来看看如何使用nohup命令在后台... 目录nohup 命令简介基本用法输出重定向& 符号的作用后台进程的特点注意事项实际应用场景长时间运行的任务服

更改docker默认数据目录的方法步骤

《更改docker默认数据目录的方法步骤》本文主要介绍了更改docker默认数据目录的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录1.查看docker是否存在并停止该服务2.挂载镜像并安装rsync便于备份3.取消挂载备份和迁

Docker集成CI/CD的项目实践

《Docker集成CI/CD的项目实践》本文主要介绍了Docker集成CI/CD的项目实践,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录一、引言1.1 什么是 CI/CD?1.2 docker 在 CI/CD 中的作用二、Docke