Windows-WSL2-VSCode+Docker配置C++开发环境

Windows-WSL2-VSCode+Docker配置C++开发环境

写在前面

因为在学习工作中,需要不同的编码环境,若将这些不同的开发环境都状态一台设备上,很容易出问题,而且迁移性差,于是计划把不同的开发环境用docker隔离开来,也方便后续设备的迁移,于是有了这篇文章。

注意,这不是使用Docker配置C++开发环境的最佳实践。若文章中存在问题,请批评指正。欢迎交流。

前置条件

我的基本环境为:windows11专业版+WSL2,WSL2下装的Linux发行版本为Ubuntu-22.04。

  • 安装WSL2。windows11下装wsl2已经很方便了,几行命令就可以装好了,参考 安装WSL。装好WSL后,安装指定的Linux发行版本。

  • 下载安装VSCode,然后安装开发所需要的插件。
    在这里插入图片描述

  • 下载安装Docker-Desktop,根据安装指南把WSL相关的功能打开。

使用Docker配置C++开发环境

保证前置条件准备完毕后,打开Docker-Desktop,然后进入WSL2下的Ubuntu系统。在一个空目录下创建 Dockerfile 文件。

cd /path
touch Dockerfile

将一下内容复制到 Dockerfile 文件中。

FROM ubuntu:22.04

ENV DEBIAN_FRONTEND=noninteractive 

RUN apt-get update \
&& apt-get install -y build-essential cmake git openssh-server gdb pkg-config valgrind systemd-coredump \
&& apt-get clean

简单解释一下 Dockerfile 文件中的内容。ENV DEBIAN_FRONTEND=noninteractive 命令设置环境变量 DEBIAN_FRONTEND 的值为 noninteractive,以避免在包管理操作期间出现交互式提示。RUN apt-get update \ ... 命令安装c++开发的基本环境。

使用 docker build -t cppdev . 命令构建一个名为 cppdev 的镜像。等待几分钟过后,镜像构建成功,如下所示。在windows中的Docker-Desktop中也将看到新创建的cppdev 镜像。
在这里插入图片描述

基于该镜像创建一个新容器。基于名为 cppdev 的镜像创建一个名为 cppdev 的容器,将本地的4022端口映射到容器中的22端口,创建命令如下。

docker run --name cppdev -dp 127.0.0.1:4022:22 -it cppdev

创建成功后,该命令会立即启动该容器,可以在Docker-Desktop中看到该容器的状态,也可以使用 docker ps 命令查看启动的容器信息。
在这里插入图片描述

容器启动后,使用 docker exec -it cppdev /bin/bash 命令进入容器,查看C++开发环境。
在这里插入图片描述

可写一个cpp程序自行测试一下。

将主机文件映射到容器中

Docker中数据持久化的方式有多种,本文使用 bind mount 的方式将主机中某个目录挂载到容器中,这样在容器中进行编码发生的改动能够实时映射到主机的目录文件中,即使容器停止运行时,我们也能查看源代码。

先删除刚刚创建的名为cppdev的容器,为的是仍然使用 cppdev 这个名字作为容器名。

docker container stop cppdev
docker container rm cppdev

使用如下命令将 当前目录 挂载到容器中的 /workspace/docker 目录下。

docker run --name cppdev -dp 127.0.0.1:4022:22 --mount type=bind,src="$(pwd)",target=/workspace/docker -it cppdev bash

使用VSCode进行开发

至此,使用Docker配置C++开发环境完成。若已在前置条件中安装好对应的插件,则可以很方便的使用VSCode进入到容器中,进行代码编写。
在这里插入图片描述
在这里插入图片描述

总结

本文对 Windows-WSL2 环境下使用Docker配置C++开发环境的步骤进行了整理,但这只能满足简单的C++开发环境需要,更进阶的功能在日后有需要或学习到时,再进一步记录总结。

参考链接

https://grauneko.com/archives/64
https://zhuanlan.zhihu.com/p/422010999
https://juejin.cn/s/docker%20for%20windows%20wsl2%20mount

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Llama-3公布基础训练设施,使用49000个H100

3月13日,社交、科技巨头Meta在官网公布了两个全新的24K H100 GPU集群(49,152个),专门用于训练大模型Llama-3。 此外,Llama-3使用了RoCEv2网络,基于Tectonic/Hammerspace的NFS/FUSE网络存储,继续…

嵌入式开发--基于STM32G431RBTx-按键中断

嵌入式开发–STM32G431RBTx-按键 将如下引脚口都设置为输出上拉模式 PB0,PB1,PB2,PA0 设置为上拉模式 配置定时器 如图有反映stm32g431的定时器资源。 时钟源选择外部时钟 设定系数 第一个是分频系数(Prescaler) 第二个是周期计数值&…

F.岛屿个数【蓝桥杯】/dfs+环

岛屿个数 小蓝得到了一副大小为 M N 的格子地图,可以将其视作一个只包含字符‘0’(代表海水)和 ‘1’(代表陆地)的二维数组,地图之外可以视作全部是海水,每个岛屿由在上/下/左/右四个方向上相…

记一次生产慢sql索引优化及思考

记一次生产慢sql索引优化及思考 问题重现 夜黑风高的某一晚,突然收到一条运营后台数据库慢sql的报警,耗时竟然达到了60s。看了一下,还好不是很频繁,内心会更加从容排查问题,应该是特定条件下没有走到索引导致&#x…

Jmeter---逻辑控制器

if 控制器 1. 先添加一个 用户自定义的变量,并填写变量名和值 2.再添加一个if控制器,并填写判断内容 【语法:""""】 forEach控制器 1. 先添加一个用户自定义变量 2. 再添加一个forEach控制器 循环控制器 1. 添加循环…

【2024-03-12】设计模式之模板模式的理解

实际应用场景:制作月饼 过程描述: 一开始,由人工制作月饼, 第一个:根据脑子里面月饼的形状,先涅出月饼的形状,然后放入面粉和馅料把开口合并起来。 第二个:根据脑子里面月饼的形状&…

ASP.NET排课实验室排课,生成班级课表实验室课表教师课表(vb.net)-214-(代码+说明)

转载地址: http://www.3q2008.com/soft/search.asp?keyword214 要看成品演示 请联系客服发给您成品演示 课题:实验课排课系统 计算机 上机课 一周上5天课,周一到周五 一周上5天课,周一到周五 因为我排的是实验课,最好1&#xf…

【Paper Reading】6.RLHF-V 提出用RLHF的1.4k的数据微调显著降低MLLM的虚幻问题

分类 内容 论文题目 RLHF-V: Towards Trustworthy MLLMs via Behavior Alignment from Fine-grained Correctional Human Feedback 作者 作者团队:由来自清华大学和新加坡国立大学的研究者组成,包括Tianyu Yu, Yuan Yao, Haoye Zhang, Taiwen He, Y…

HTML静态网页成品作业(HTML+CSS)——家乡广州介绍设计制作(5个页面)

🎉不定期分享源码,关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 🏷️本套采用HTMLCSS,未使用Javacsript代码,共有5个页面。 二、作品演示 三、代…

SpringBoot(Lombok + Spring Initailizr + yaml)

1.Lombok 1.基本介绍 2.应用实例 1.pom.xml 引入Lombok&#xff0c;使用版本仲裁 <!--导入springboot父工程--><parent><artifactId>spring-boot-starter-parent</artifactId><groupId>org.springframework.boot</groupId><version&g…

[论文笔记] pai-megatron qwen1.5报错

Qwen1.5-0.5b-chat 使用example中fintune.py 报错 Issue #77 QwenLM/Qwen1.5 GitHub 解决方案&#xff1a; transformers升级到4.37.0 pip install setuptools65.5.1 pip install transformers4.37.0

Matlab|【分布鲁棒】数据驱动的多离散场景电热综合能源系统分布鲁棒优化算法

目录 主要内容 1.1 主要难点-分布鲁棒优化 1.2 程序求解步骤-主子问题迭代 部分结果 下载链接 主要内容 本程序主要对《基于场景聚类的主动配电网分布鲁棒综合优化》-高海淑的方法复现&#xff0c;应用到综合能源电热微网方向&#xff0c;采用拉丁超立方抽样对不同…

鸿蒙API9+axios封装一个通用工具类

使用方式&#xff1a; 打开Harmony第三方工具仓&#xff0c;找到axios&#xff0c;如图&#xff1a; 第三方工具仓网址&#xff1a;https://ohpm.openharmony.cn/#/cn/home 在你的项目执行命令&#xff1a;ohpm install ohos/axios 前提是你已经装好了ohpm &#xff0c;如果没…

【Flutter 面试题】怎么理解Flutter的Isolate?并发编程

【Flutter 面试题】怎么理解Flutter的Isolate&#xff1f;并发编程 文章目录 写在前面解答补充说明完整代码示例说明 写在前面 &#x1f64b; 关于我 &#xff0c;小雨青年 &#x1f449; CSDN博客专家&#xff0c;GitChat专栏作者&#xff0c;阿里云社区专家博主&#xff0c;…

Qt-QPainter drawText方法不同重载之间的区别

QPainter类的drawText方法有如下重载&#xff1a; void drawText(const QPointF &position, const QString &text) void drawText(const QPoint &position, const QString &text) void drawText(int x, int y, const QString &text) void drawText(co…

解决尚品甄选验证码图片无法显示bug

按照他的视频要求去做发现图片无法正常显示&#xff0c;通过查看浏览器网络错误&#xff0c;发现请求验证码的网址是重叠的http://localhost:3001/admin/system/index/login/admin/system/index/generateValidateCode是这样的&#xff0c;说明baseUrl是/admin/system/index/log…

【Python如何与电脑玩石头剪刀布游戏】

1、石头剪刀布Python代码如下&#xff1a; import random while True:a random.randint(0, 2)b int(input("请输入一个数字&#xff08;0石头, 1剪刀, 2布&#xff09;: "))c [石头, 剪刀, 布]if b ! 0 and b ! 1 and b ! 2:print("傻子&#xff0c;你出错了…

Cisco Packet Tracer模拟器实现路由器的路由配置及网络的安全配置

1. 内容 1. 配置路由器实现多个不同网络间的通信&#xff0c;路由器提供的路由协议包括静态路由协议、RIP动态路由、OSPF动态路由协议等等&#xff0c;训练内容包括路由器的静态路由配置、路由器的RIP动态路由配置、路由器的OSPF动态路由配置以及路由器的路由重分布配置。 2.…

测试环境搭建整套大数据系统(十一:docker部署superset,无密码登录嵌入html)

一&#xff1a;安装docker 参考文档 https://blog.csdn.net/weixin_43446246/article/details/136554243 二&#xff1a;安装superset 下载镜像。 拉取镜像&#xff08;docker pull amancevice/superset&#xff09; 查看镜像是否下载完成&#xff08;docker images&#xf…

Tomcat目录结构

文章目录 binconfliblogswebapp bin 存放tomcat的可执行程序 从上图可以看出bin中的文件主要是两种文件&#xff0c;一种是.bat一种是.sh .bat:主要用于windows .sh:主要用于linux .bat文件是Windows操作系统中的批处理文件。它是一种简单的文本文件&#xff0c;其中包含了一…
最新文章