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

相关文章

如何用Docker运行Django项目

本章教程,介绍如何用Docker创建一个Django,并运行能够访问。 一、拉取镜像 这里我们使用python3.11版本的docker镜像 docker pull python:3.11 二、运行容器 这里我们将容器内部的8080端口,映射到宿主机的80端口上。 docker run -itd --name python311 -p

【Python编程】Linux创建虚拟环境并配置与notebook相连接

1.创建 使用 venv 创建虚拟环境。例如,在当前目录下创建一个名为 myenv 的虚拟环境: python3 -m venv myenv 2.激活 激活虚拟环境使其成为当前终端会话的活动环境。运行: source myenv/bin/activate 3.与notebook连接 在虚拟环境中,使用 pip 安装 Jupyter 和 ipykernel: pip instal

在cscode中通过maven创建java项目

在cscode中创建java项目 可以通过博客完成maven的导入 建立maven项目 使用快捷键 Ctrl + Shift + P 建立一个 Maven 项目 1 Ctrl + Shift + P 打开输入框2 输入 "> java create"3 选择 maven4 选择 No Archetype5 输入 域名6 输入项目名称7 建立一个文件目录存放项目,文件名一般为项目名8 确定

Java 创建图形用户界面(GUI)入门指南(Swing库 JFrame 类)概述

概述 基本概念 Java Swing 的架构 Java Swing 是一个为 Java 设计的 GUI 工具包,是 JAVA 基础类的一部分,基于 Java AWT 构建,提供了一系列轻量级、可定制的图形用户界面(GUI)组件。 与 AWT 相比,Swing 提供了许多比 AWT 更好的屏幕显示元素,更加灵活和可定制,具有更好的跨平台性能。 组件和容器 Java Swing 提供了许多

K8S(Kubernetes)开源的容器编排平台安装步骤详解

K8S(Kubernetes)是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用程序。以下是K8S容器编排平台的安装步骤、使用方式及特点的概述: 安装步骤: 安装Docker:K8S需要基于Docker来运行容器化应用程序。首先要在所有节点上安装Docker引擎。 安装Kubernetes Master:在集群中选择一台主机作为Master节点,安装K8S的控制平面组件,如AP

Spring框架5 - 容器的扩展功能 (ApplicationContext)

private static ApplicationContext applicationContext;static {applicationContext = new ClassPathXmlApplicationContext("bean.xml");} BeanFactory的功能扩展类ApplicationContext进行深度的分析。ApplicationConext与 BeanF

顺序表之创建,判满,插入,输出

文章目录 🍊自我介绍🍊创建一个空的顺序表,为结构体在堆区分配空间🍊插入数据🍊输出数据🍊判断顺序表是否满了,满了返回值1,否则返回0🍊main函数 你的点赞评论就是对博主最大的鼓励 当然喜欢的小伙伴可以:点赞+关注+评论+收藏(一键四连)哦~ 🍊自我介绍   Hello,大家好,我是小珑也要变强(也是小珑),我是易编程·终身成长社群的一名“创始团队·嘉宾”

跨系统环境下LabVIEW程序稳定运行

在LabVIEW开发中,不同电脑的配置和操作系统(如Win11与Win7)可能对程序的稳定运行产生影响。为了确保程序在不同平台上都能正常且稳定运行,需要从兼容性、驱动、以及性能优化等多个方面入手。本文将详细介绍如何在不同系统环境下,使LabVIEW开发的程序保持稳定运行的有效策略。 LabVIEW版本兼容性 LabVIEW各版本对不同操作系统的支持存在差异。因此,在开发程序时,尽量使用

Maven创建项目中的groupId, artifactId, 和 version的意思

文章目录 groupIdartifactIdversionname groupId 定义:groupId 是 Maven 项目坐标的第一个部分,它通常表示项目的组织或公司的域名反转写法。例如,如果你为公司 example.com 开发软件,groupId 可能是 com.example。作用:groupId 被用来组织和分组相关的 Maven artifacts,这样可以避免

容器编排平台Kubernetes简介

目录 什么是K8s 为什么需要K8s 什么是容器(Contianer) K8s能做什么? K8s的架构原理  控制平面(Control plane)         kube-apiserver         etcd         kube-scheduler         kube-controller-manager         cloud-controlle