当前位置: 首页 > news >正文

数值计算引擎:搭建远程容器开发环境

Build VS Code Remote Docker Development Environment

大型CAE软件开发技术栈通常依赖多个第三方库,因此从零开始配置开发、编译、运行等环境通常较为繁琐。但随着公司的发展壮大,却经常需要为新加入的成员配备相应的开发环境;另外,有时候也需要为软件多个不同配置准备相应的环境。这种重复性的工作会消耗团队许多时间成本。

由于容器提供了轻量级的、独立的运行环境,可以考虑将软件开发、编译、运行等环境打包成镜像,然后根据需要生成对应的容器即可。而且,VS Code Remote Developement 插件也提供了针对远程容器的开发支持。

本文以数值仿真引擎开发环境为例记录搭建VS Code远程容器开发环境的流程。

一、服务器端配置

1.1. 下载、配置Docker Desktop

下载并安装Docker Desktop,配置容器镜像位置及镜像源,

{"builder": {"gc": {"defaultKeepStorage": "20GB","enabled": true}},"experimental": false,"registry-mirrors": ["https://registry.docker-cn.com","http://hub-mirror.c.163.com","https://docker.mirrors.ustc.edu.cn","https://dockerhub.azk8s.cn","https://mirror.ccs.tencentyun.com","https://registry.cn-hangzhou.aliyuncs.com","https://docker.mirrors.ustc.edu.cn"]
}

1.2 拉取镜像

docker pull intel/oneapi-hpckit

1.3 生成容器

docker run -itd -p 10022:22 -v /D/Docker/DockerShare:/data --name yqdev01 intel/oneapi-hpckit

1.4 配置容器

运行以下命令,进入容器,

docker exec -it yqdev01 /bin/bash
1.4.1 配置系统镜像源

修改/etc/apt/sources.list文件,增加以下镜像源,

deb https://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiverse
deb-src https://mirrors.aliyun.com/ubuntu/ focal main restricted universe multiversedeb https://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiverse
deb-src https://mirrors.aliyun.com/ubuntu/ focal-security main restricted universe multiversedeb https://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse
deb-src https://mirrors.aliyun.com/ubuntu/ focal-updates main restricted universe multiverse# deb https://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiverse
# deb-src https://mirrors.aliyun.com/ubuntu/ focal-proposed main restricted universe multiversedeb https://mirrors.aliyun.com/ubuntu/ focal-backports main restricted universe multiverse
1.4.2 安装文本编辑器vim
apt-get install vim
1.4.3 配置SSH服务
apt-get update
apt-get install openssh-server
apt-get install openssh-client
apt-get install ssh

修改sshd配置文件,

vim /etc/ssh/sshd_config

重新启动ssh服务,并将其设为开机自启,

/etc/init.d/ssh restart
1.4.4 安装常用第三方库

安装以下常用第三方库,

build-essential  libgtest-dev libhdf5-serial-dev libeigen3-dev libarpack2-dev petsc-dev

修改配置文件以配置Intel oneAPI环境变量,

vim ~/.bashrc

1.4.5 重新启动容器

Ref. from Developing a Visual Studio Code Project for SSH Development 

It is important to note that the VSCode backend server continues to run after you close the Remote-SSH connection. Therefore, the VSCode backend will not see any changes you make to the vscode-remote-ssh-env-setup.sh script unless the remote VSCode backend is forced to exit.

1.4.6 打包容器镜像

二、客户端配置

2.1 VS Code配置

下载VS Code,然后安装以下插件,便可通过Remote Development插件在Remote Docker Container中进行开发了。

Task Explorer

Output Colorizer

Git Extension Pack

Remote Developement

Remote X11

C/C++ Extension Pack

C++ TestMate

Modern Fortran

FORTRAN InstelliSense

Fortran Breakpoint Support

Extension Pack for Intel Software Developer Tools

2.2 连接Remote Docker Container

VS Code内添加远程主机配置,便可以通过Remote Development插件远程开发了。

Host yqdev01HostName 192.168.0.100Port 10022User rootForwardAgent yes

附录I:CMake Presets for VS Code

{"version": 4,"configurePresets": [{"name": "linux_default","hidden": true,"displayName": "Default Linux Config","description": "Default build using Unix Makefiles generator","generator": "Unix Makefiles","binaryDir": "${sourceDir}/out/build/${presetName}","cacheVariables": {"CMAKE_INSTALL_PREFIX": "${sourceDir}/out/install/${presetName}","CMAKE_BUILD_TYPE": "Debug"            }}]
}

参考资料

Docker Desktopicon-default.png?t=N7T8https://www.docker.com/products/docker-desktop

Kubernetesicon-default.png?t=N7T8https://kubernetes.io/

VS Code Remote Developmenticon-default.png?t=N7T8https://code.visualstudio.com/docs/remote/remote-overview

Using Visual Studio Code* to Develop Intel® oneAPI Applicationsicon-default.png?t=N7T8https://www.intel.com/content/www/us/en/docs/oneapi/user-guide-vs-code/2024-2/overview.html

CMake Presetsicon-default.png?t=N7T8https://cmake.org/cmake/help/latest/manual/cmake-presets.7.html

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • html 首行缩进2字符
  • python语言day7 函数式编程 面向对象编程
  • android13顶部状态栏里面调节背光,不隐藏状态栏面板
  • CDD数据库文件制作(十一)——服务配置(0x19_DTC Code)
  • 【Qt开发】QSerialPort串口配置、发送、接收回调函数 多线程接收的串口类封装
  • 【python基础】—离线环境下,在linux中安装python包(以sqlalchemy为例)
  • SpringBoot获取不到Nacos配置信息报错,Nacos鉴权
  • 基于Python的上市公司年报数字化词频统计:深入解析与实战
  • 倒计时:可添加可删除的倒计时函数
  • 从零开始手写STL库:Map
  • C++:list类(迭代器)
  • Spring SSM框架--MVC
  • [数据集][目标检测]手钳检测数据集VOC+YOLO格式141张1类别
  • 一:《Python基础语法汇总》— 数据类型与输入输出
  • sql总结
  • 【跃迁之路】【699天】程序员高效学习方法论探索系列(实验阶段456-2019.1.19)...
  • C# 免费离线人脸识别 2.0 Demo
  • ES6语法详解(一)
  • ES学习笔记(12)--Symbol
  • Golang-长连接-状态推送
  • IDEA 插件开发入门教程
  • JS函数式编程 数组部分风格 ES6版
  • MySQL用户中的%到底包不包括localhost?
  • Synchronized 关键字使用、底层原理、JDK1.6 之后的底层优化以及 和ReenTrantLock 的对比...
  • 简单基于spring的redis配置(单机和集群模式)
  • 前端 CSS : 5# 纯 CSS 实现24小时超市
  • 一起来学SpringBoot | 第三篇:SpringBoot日志配置
  • 原创:新手布局福音!微信小程序使用flex的一些基础样式属性(一)
  • 正则表达式-基础知识Review
  • ​数据链路层——流量控制可靠传输机制 ​
  • # Swust 12th acm 邀请赛# [ K ] 三角形判定 [题解]
  • # 利刃出鞘_Tomcat 核心原理解析(八)-- Tomcat 集群
  • #NOIP 2014# day.1 生活大爆炸版 石头剪刀布
  • #Ubuntu(修改root信息)
  • #中国IT界的第一本漂流日记 传递IT正能量# 【分享得“IT漂友”勋章】
  • (C#)if (this == null)?你在逗我,this 怎么可能为 null!用 IL 编译和反编译看穿一切
  • (C语言)输入自定义个数的整数,打印出最大值和最小值
  • (初研) Sentence-embedding fine-tune notebook
  • (附源码)php新闻发布平台 毕业设计 141646
  • (附源码)SSM环卫人员管理平台 计算机毕设36412
  • (附源码)ssm基于web技术的医务志愿者管理系统 毕业设计 100910
  • (切换多语言)vantUI+vue-i18n进行国际化配置及新增没有的语言包
  • (四) Graphivz 颜色选择
  • (四)js前端开发中设计模式之工厂方法模式
  • (学习日记)2024.04.10:UCOSIII第三十八节:事件实验
  • (转)详解PHP处理密码的几种方式
  • (最简单,详细,直接上手)uniapp/vue中英文多语言切换
  • .apk文件,IIS不支持下载解决
  • .NET C# 使用 iText 生成PDF
  • .Net Core 微服务之Consul(二)-集群搭建
  • .NET 的静态构造函数是否线程安全?答案是肯定的!
  • .NET/C# 获取一个正在运行的进程的命令行参数
  • @hook扩展分析
  • @Not - Empty-Null-Blank
  • [ C++ ] 类和对象( 下 )