13 docker使用问题

news2024/12/24 8:51:15

目录

docker模块分布:

①:安装"abseil"C++库

②:安装CMake​编辑

③:grpc安装

④:protobuf安装​编辑

⑤:qt界面显示

⑥:dockerfile编写​编辑

⑦:执行docker脚本

monitor_docker_run.sh启动容器

monitor_docker_into.sh进入容器


docker模块分布:

①:安装"abseil"C++库

该库提供了一些高质量的 C++ 编程组件和算法。

        pushd 和 popd 是 Linux/Unix 系统中的命令,用于在终端中进行目录的切换操作。它们通常用于临时切换到其他目录,执行一些操作后再返回之前的工作目录。

        rm -rf "abseil-cpp-${VERSION}" "${PKG_NAME}" :删除下载的 tar.gz 压缩包和解压后的目录,以清理安装过程中产生的临时文件。

②:安装CMake

执行过程同①

③:grpc安装

gRPC 是一个高性能、通用的开源框架,用于构建分布式、高效且跨语言的远程过程调用(RPC)系统。

gRPC安装需要一些依赖库:

在这里,使用一系列 -D 选项设置不同的 CMake 变量,用于控制构建的各种参数。例如:

-DgRPC_INSTALL=ON:允许安装 gRPC 库。
-DBUILD_SHARED_LIBS=ON:构建共享库而不是静态库。
-DCMAKE_BUILD_TYPE=Release:使用 Release 构建类型。
-DgRPC_ABSL_PROVIDER=package:使用已安装的 Abseil 库作为依赖。
-DgRPC_CARES_PROVIDER=package:使用已安装的 c-ares 库作为依赖。
-DgRPC_PROTOBUF_PROVIDER=package:使用已安装的 Protobuf 库作为依赖。
-DgRPC_RE2_PROVIDER=package:使用已安装的 RE2 库作为依赖。
-DgRPC_SSL_PROVIDER=package:使用已安装的 OpenSSL 库作为依赖。
-DgRPC_ZLIB_PROVIDER=package:使用已安装的 zlib 库作为依赖。
-DCMAKE_INSTALL_PREFIX=/usr/local/:指定 gRPC 库的安装路径。

④:protobuf安装

-Dprotobuf_BUILD_TESTS=OFF 是在 CMake 配置 gRPC 项目时的一个选项设置。这个选项的作用是控制是否构建 Protobuf 的测试代码。

⑤:qt界面显示

set -e:如果任何命令返回非零退出状态(即执行失败),脚本将立即终止。

BUILD_TYPE="${1:-download}":获取脚本的第一个参数,用于指定安装类型,默认为 "download"。

CURR_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd -P)":获取当前脚本文件所在的绝对路径。

TARGET_ARCH="$(uname -m)":获取当前系统的架构。

定义 Qt 版本信息。

QT_INSTALLER=qt-opensource-linux-x64-5.12.9.run:定义 Qt 安装包的文件名。

MY_DEST_DIR="/usr/local/Qt${QT_VERSION_B}":定义安装目标目录。

cuteci 命令:这是一个自定义命令,用于处理 Qt 安装。脚本会使用这个命令来执行 Qt 安装。

QT5_PATH="/usr/local/qt5":定义 Qt 安装后的路径。

创建软链接:将 Qt 安装目录的链接指向 ${QT5_PATH}。

将 Qt 路径添加到 /etc/ld.so.conf.d/qt.conf 文件,以便系统可以找到 Qt 库。

将相关环境变量的配置添加到脚本中。

清理:删除一些不需要的文件,如安装包、文档、示例、工具等。

⑥:dockerfile编写

 ①:

将名为 sources.list 的文件从当前目录中复制到容器中的 /etc/apt/ 目录下。sources.list中都是使用阿里云镜像源来获取 Ubuntu 软件包。可以更快速地从阿里云镜像源中获取软件包,从而提高软件包的下载速度。这对于在 Docker 镜像构建过程中,或者在本地系统上安装软件包都是非常有用的。

 ②:这里都是安装后续的包需要的基础包

 还需要安装一些额外的依赖库

 ③:安装 Protobuf、Abseil、gRPC、CMake 和 Qt 开发环境:

分别从对应目录复制相应脚本,并开始执行。

⑦:执行docker脚本

monitor_docker_run.sh启动容器

启动一个名为 `linux_monitor` 的 Docker 容器

1. `MONITOR_HOME_DIR`:使用 `cd` 命令来获取当前脚本的上级目录的上级目录,即获取脚本的上上级目录路径。这将作为挂载到容器内的工作目录。

2. 获取当前显示器变量 `DISPLAY` 的值,如果未设置则默认为 `:1`。

3. 获取本机的主机名、用户、用户 ID、用户组、用户组 ID,以及运行时目录 `XDG_RUNTIME_DIR`。

4. 使用 `docker stop` 命令停止之前的名为 `linux_monitor` 的容器,然后使用 `docker rm -v -f` 命令删除容器。`-v` 参数用于同时删除容器关联的卷,`-f` 参数用于强制删除容器。

5. 使用 `docker run` 命令启动一个名为 `linux_monitor` 的容器:

   - `-it`:使用交互式终端。
   - `-d`:在后台运行容器。
   - `--name linux_monitor`:指定容器的名称为 `linux_monitor`。
   - `-e DISPLAY=$display`:设置容器内的环境变量 `DISPLAY`。
   - `-e DOCKER_USER="${user}"`:将本机用户赋给容器内的环境变量 `DOCKER_USER`。
   - `-e USER="${user}"`:将本机用户赋给容器内的环境变量 `USER`。
   - `-e DOCKER_USER_ID="${uid}"`:将本机用户 ID 赋给容器内的环境变量 `DOCKER_USER_ID`。
   - `-e DOCKER_GRP="${group}"`:将本机用户组赋给容器内的环境变量 `DOCKER_GRP`。
   - `-e DOCKER_GRP_ID="${gid}"`:将本机用户组 ID 赋给容器内的环境变量 `DOCKER_GRP_ID`。
   - `-e XDG_RUNTIME_DIR=$XDG_RUNTIME_DIR`:将本机运行时目录赋给容器内的环境变量 `XDG_RUNTIME_DIR`。
   - `-v ${MONITOR_HOME_DIR}:/work`:将本机上级目录的上级目录挂载到容器的 `/work` 目录。
   - `-v ${XDG_RUNTIME_DIR}:${XDG_RUNTIME_DIR}`:将本机运行时目录挂载到容器的相同目录。
   - `--net host`:使用主机网络模式。
   - `linux:monitor`:使用名为 `linux:monitor` 的 Docker 镜像来创建容器。

这个脚本用于启动一个 Docker 容器,其中包含了一系列的环境变量和挂载,以便在容器内部访问和操作本机的相关信息和文件。

monitor_docker_into.sh进入容器

在一个已经运行的 Docker 容器 `linux_monitor` 内启动一个交互式的 Bash 终端

1. `xhost +local:root 1>/dev/null 2>&1`:这行命令允许本地的 `root` 用户通过 X11 转发访问 X 服务器,从而能在容器内显示图形界面。`1>/dev/null` 和 `2>&1` 将标准输出和标准错误输出重定向到 `/dev/null`,即不会在终端上显示输出信息。

2. `docker exec`:这是用于在已经运行的容器内执行命令的 Docker 命令。

   - `-u root`:以 `root` 用户的身份执行命令。
   - `-it linux_monitor`:指定容器名为 `linux_monitor`,并以交互式终端的方式执行命令。
   - `/bin/bash`:要在容器内执行的命令,这里是启动一个 Bash 终端。

3. `xhost -local:root 1>/dev/null 2>&1`:这行命令用于撤销之前的 `xhost` 命令,不再允许 `root` 用户通过 X11 转发访问 X 服务器。

总的来说,这个脚本的目的是在已经运行的 `linux_monitor` 容器内,以 `root` 用户身份启动一个交互式的 Bash 终端,以便在容器内执行命令和操作。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/878975.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

(隐性)类型转换和算数转换

类型转换(char,short) 几个char 类型或者short 类型的数相加,会把他们提升为整形来相加 整型提升的意义: 表达式的整型运算要在CPU的相应运算器件内执行,CPU内整型运算器(ALU)的操作数的字节长度 一般就是int的字节长…

开学触控笔买哪个牌子好?ipad可以用的电容笔推荐

随着开学时间的临近,各大学院的学生们也都陆陆续续为走进校园而做准备了。那么开学自然需要买一些必要的数码电子产品,比如搭配iPad使用的电容笔。我们究竟要不要买苹果原装电容笔?事实上,如果只是为了写字记录东西的话&#xff0…

python爬虫数据解析xpath、jsonpath,bs4

数据的解析 解析数据的方式大概有三种 xpathJsonPathBeautifulSoup xpath 安装xpath插件 打开谷歌浏览器扩展程序,打开开发者模式,拖入插件,重启浏览器,ctrlshiftx,打开插件页面 安装lxml库 安装在python环境中的Scri…

windows11下配置vscode中c/c++环境

本文默认已经下载且安装好vscode,主要是解决环境变量配置以及编译task、launch文件的问题。 自己尝试过许多博客,最后还是通过这种方法配置成功了。 Linux(ubuntu 20.04)配置vscode可以直接跳转到配置task、launch文件,不需要下载mingw与配…

C#_字符串

String类型 字符串是信息最重要载体,相对于图像、语音、视频更易读易处理;C#字符串具有 不可变 特征, 从使每一次修改都要需要申请内存空间,并且需要复制源字符串到新的内存空间,还要需要销毁原有空间。 优势&#x…

前端实现文件预览功能

前端实现文件预览功能 ❝ 需求:实现一个在线预览pdf、excel、word、图片等文件的功能。 介绍:支持pdf、xlsx、docx、jpg、png、jpeg。 以下使用Vue3代码实现所有功能,建议以下的预览文件标签可以在外层包裹一层弹窗。 ❞ 图片预览 iframe标签…

详细安装配置django

安装配置使用Django。 1,下载安装 django pip install django 2.创建设置项目 先进入要放置项目的文件夹下 2.1, 创建项目 django-admin startproject Api_project 2.2, 创建app命令 cd Api_project dir看一下是否有 manage.py 文件…

ORB-SLAM2第五节---局部地图跟踪(阶段二)

保证三种跟踪方式更加准确 1.局部关键帧 当前帧F的局部关键帧包括: 能够观测到当前帧F中地图点的共视关键帧KF1、KF2,称为一级共视关键帧。一级共视关键帧的共视关键帧(前10个共视程度最高的关键帧),比如图中的KF1的…

取证--实操

2022年美亚杯个人赛 运用软件DB Browser for SQLite (一款用于查看SQLlite数据库文件的浏览器工具) 火眼,盘古石手机取证系统等 案件详情 于2022年10月,有市民因接获伪冒快递公司的电邮,不慎地于匪徒架设的假网站提…

分类预测 | MATLAB实现CNN-BiGRU-Attention多输入分类预测

分类预测 | MATLAB实现CNN-BiGRU-Attention多输入单输出分类预测 目录 分类预测 | MATLAB实现CNN-BiGRU-Attention多输入单输出分类预测预测效果基本介绍模型描述程序设计参考资料 预测效果 基本介绍 Matlab实现CNN-BiGRU-Attention多特征分类预测,卷积双向门控循环…

qemu简单使用

参考: 记一次全设备通杀未授权RCE的挖掘经历 claude1 安装使用 附件下载 下载后拖到虚拟机 解压 使用root用户 运行.sh脚本即可 运行脚本解读 #!/bin/bashsudo qemu-system-mipsel \-cpu 74Kf \-M malta \-kernel vmlinux-3.2.0-4-4kc-malta \ -hda debian…

Rabbitmq延迟消息

目录 一、延迟消息1.基于死信实现延迟消息1.1 消息的TTL(Time To Live)1.2 死信交换机 Dead Letter Exchanges1.3 代码实现 2.基于延迟插件实现延迟消息2.1 插件安装2.2 代码实现 3.基于延迟插件封装消息 一、延迟消息 延迟消息有两种实现方案&#xff…

PyQt5下拉列表实现及信号与槽的连接

目录 1、常用方法 2、常用信号 3、实操 1、常用方法 QComboBox() 创建一个下拉框对象addItems 可以使用列表进行多个下拉框内容添加, 单个添加用addItemcurrentIndexChanged 是用来获取当前选择下拉框的索引, 这也是这个"信号"槽函数需要 有个索引传参, 这样就便…

优化查询性能:UNION与UNION ALL的区别

作用 在SQL查询中,当我们需要合并多个查询结果集时,我们通常会使用UNION和UNION ALL操作符,同时,如果你写的or语句不走索引,可以考虑使用UNION、UNION ALL优化。 在本篇博客中,我们将探讨UNION和UNION AL…

Lnux系统usb摄像头测试程序(一)

这是linux或国产系统上(UOS、麒麟)USB摄像头的测试程序,主要功能有 1、系统上USB摄像头的配置查询,包括摄像头支持的协议,支持的分辨率等信息 、视频预览(支持yuv422和RGB两种格式 3、录像录音 4、视频编码…

值传递、形参实参的关系、地址传递(指针和函数)

1 值传递 实现两个数字进行交换&#xff0c;代码和运行结果如下所示&#xff1a; #include<iostream> using namespace std;void change(int a, int b) {int temp a;a b;b temp;cout << "change a " << a << endl;cout << "…

raw socket是啥(一)?

对于网络通讯&#xff0c;耳熟能详的莫过于TCP、UDP&#xff0c;二者皆需要ip和port。对于一般开发人员&#xff0c;找到一个“能用”的库就可以了&#xff0c;因为流式通讯&#xff0c;会有粘包问题&#xff0c;那就需要再加一个库&#xff0c;解决粘包问题&#xff0c;这样一…

【量化课程】02_4.数理统计的基本概念

2.4_数理统计的基本概念 数理统计思维导图 更多详细内容见notebook 1.基本概念 总体&#xff1a;研究对象的全体&#xff0c;它是一个随机变量&#xff0c;用 X X X表示。 个体&#xff1a;组成总体的每个基本元素。 简单随机样本&#xff1a;来自总体 X X X的 n n n个相互…

大数据平台中元数据库—MySQL的异常故障解决

本文的主要目标是解决大数据平台中元数据库MySQL的异常故障。通过分析应用响应缓慢的问题&#xff0c;找到了集群组件HIVE和元数据库MySQL的原因。通过日志分析、工具检测和专家指导等一系列方法&#xff0c; 最终确定问题的根源是大数据集群中租户的不规范使用所导致&#xff…

冠达管理:机构密集调研医药生物股 反腐政策影响受关注

进入8月&#xff0c;跟着反腐事件发酵&#xff0c;医药生物板块呈现震荡。与此一起&#xff0c;组织出资者对该板块上市公司也展开了密集调研。 到昨日&#xff0c;8月以来就有包含南微医学、百济神州、维力医疗、方盛制药等12家医药生物板块的上市公司接受组织调研&#xff0c…