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.04ENV 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.mzph.cn/news/741528.shtml

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

相关文章

面向对象编程第一式:封装 (Java篇)

本篇会加入个人的所谓‘鱼式疯言’ ❤️❤️❤️鱼式疯言:❤️❤️❤️此疯言非彼疯言 而是理解过并总结出来通俗易懂的大白话, 小编会尽可能的在每个概念后插入鱼式疯言,帮助大家理解的. 🤭🤭🤭可能说的不是那么严谨.但小编初心是能让更多人…

PMP考试心得,与大家共勉

本人刚刚通过PMP考试,有一些自己的经历,写出来欢迎已经是PMP的兄弟们指正,希望能给正在PMP之路上奔跑的人们一些帮助。 其实很早就听说过PMP认证考试了,但是一直工作很忙没有时间来投入学习考试。因此一直拖到今年夏天才有时间参加…

耐腐蚀PFA气体洗涤瓶可多级串联透明特氟龙塑料氢气吸收装置

洗气瓶是一种常用于净化和干燥各种气体的实验室器皿,以去除其中的水分、油脂、颗粒物等杂质,从而使需要用到的气体满足实验要求。 PFA洗气瓶的工作原理: 主要是通过液体吸收、溶解或发生化学反应来去除气体中的杂质。在洗气过程中&#xff…

加速布局Wi-Fi及蓝牙市场!移远通信再推四款高性能模组新品

3月12日,全球领先的物联网整体解决方案供应商移远通信宣布,其已正式推出四款新型Wi-Fi和蓝牙模组新品,旨在继续致力于满足物联网行业不断升级的应用需求,为智慧家居、工业互联、储能、充电桩等各种场景提供一站式创新解决方案。 此…

Kotlin 空类型,区间,数组

目录 1. 空类型 2. 区间 3. 数组 1. 空类型 我们知道任何一种数据类型都有为空或不为空两种状态,在 Kotlin 中,若允许一个数据为空,则需要使用 "?",默认都不能为空。 代码举例说明 // 给 notNull赋值为空&#x…

2023.5.9工作问题记录————安卓GKI检测abi-check

GKI ABI-check SOP ABI check是用于校验生成的kernel中ko与google释放的ko所计算出来的CRC是否相等。 在GKI版本中,很多kernel中的配置有y变成了m,编译成了ko,XTS测试时,会替换boot镜像, 替换成google释放的boot.img&…

Vue3组件详情

Vue3组件详情 一、父组件向子组件传值 ref、props二、子组件向父组件传值 emit三、子组件向父组件传值 v-model四、setup语法糖1、基本用法2、data和methods3、计算属性 computed4、监听器 watch、watchEffect5、自定义指令 directive6、import导入的内容可以直接使用7、声明pr…

Flume集成Kafka

之前提到Flume可以直接采集数据存储到HDFS中,那为什么还要引入Kafka这个中间件呢,这个是因为在实际应用场景中,我们既需要实时计算也需要离线计算。 Kfka to HDFS配置 # Name the components on this agent a1.sources r1 a1.sinks k1 a1.…

动态规划7,等差数列划分,湍流子数组,唯一的子字符串,最长递增子序列

等差数列划分 思路: 经验题目要求 dp[i]表示:以 i 位置为结尾的所有子数组中有多少个等差数列 状态转移方程 对 dp[i] 位置,数列至少有三个元素,如果相邻三个为等差数列,dp[i] dp[i-1] 1; 如果相邻三个不为等差数…

windows批处理脚本(cmd指令)

一、简介 最早期的电脑系统是DOS系统,DOS系统只有一个黑漆漆的窗口,需要自己输入命令,所以学习命令是很有必要的,那么CMD命令大全是什么?直到今天的Windows系统,还是离不开DOS命令的操作。如今懂得使用windows批处理脚…

【AI绘画教程】AI绘画图生图怎么用?

AI绘画技术已经越来越成熟,越来越多的人开始尝试利用AI进行创作。而AI绘画图生图作为一款优秀的AI绘画工具,正是帮助许多人创作的好帮手。 AI绘画图生图功能可以通过多种软件实现,具体的操作步骤可能因软件而异,但大体流程相似。以…

基于springboot+vue的会议室预约系统(源码+论文)

目录 前言 一、功能设计 二、功能实现 三、库表设计 四、论文 前言 随着互联网技术的发展,各行各业乃至人们的衣食住行都离不开网络。就拿最普普通通的衣食住行来说吧,穿衣服、买衣服我们现在基本都是在网络上进行购买,线下商场基本不去。…

1688商品详情数据采集(商品属性,规格,价格,详情图等)

京东商品详情数据采集是一个复杂但重要的过程,它涉及获取商品的详细信息,包括商品属性、规格、价格以及详情图等。以下是关于如何进行京东商品详情数据采集的基本步骤: 确定采集目标:首先,你需要明确需要采集的商品信…

ARM 汇编指令:(五)CMP指令

目录 1.CMP比较指令 2.指令条件码 cond 1.CMP比较指令 CMP指令是计算机指令集中的一种比较指令,用于比较两个操作数的大小关系或相等性,并根据比较结果设置或更新条件码寄存器(或程序状态字)的标志位。 指令格式:C…

VUE内盘期货配资软件源码国际外盘二合一

开发一个Vue内盘期货配资软件源码,同时兼容国际外盘二合一的功能,是一个复杂且专业的任务,涉及前端Vue.js框架的使用、后端服务器处理、数据库管理、实时交易接口对接等多个方面。下面是一些关于开发此类软件的基本指导和考虑因素&#xff1a…

什么是同城上门预约按摩系统,上门预约平台有哪些功能?

随着互联网技术的发展,人们的生活方式发生了很大的变化。在日常生活中,大家都习惯使用手机来订餐、购物、家政服务等,这也为我们的生活带来了很大的便利。而同城按摩小程序作为一种新兴的按摩预约方式,受到了越来越多人的欢迎。下…

机器视觉检测设备的组成要素

机器视觉检测设备是一种先进的自动化检测技术工具,它利用光学、图像处理和计算机硬件及软件技术模拟并扩展人类的视觉功能,以实现对产品或目标物体进行自动化的尺寸测量、缺陷检测、表面质量评估、颜色识别、形状匹配以及位置判断等功能。这种设备通常包…

c/c++| 常规 |sizeof 、strlen

总结来说 ,sizeof 查看内存给对象分配的空间大小,不仅仅是普通的内置变量,还包括用户自定义变量、结构体、类对象 然后strlen 是查看字符串的实际长度大小,注意它不会计算那个结束符’\0’

重生奇迹MU攻击防御技能石哪里掉

在《重生奇迹MU》中,攻击和防御技能石可以从以下途径获得: 1.怪物掉落:你可以通过击败怪物获得攻击和防御技能石,不同的怪物掉落不同的石头。你可以在各个地图的怪物掉落表中查看特定怪物掉落的技能石。 2.商店购买:…

【教程】APP加固的那些小事

摘要 APP加固是保护APP代码逻辑的重要手段,通过隐藏、混淆、加密等操作提高软件的逆向成本,降低被破解的几率,保障开发者和用户利益。本文将介绍APP加固常见失败原因及解决方法,以及处理安装出现问题的情况和资源文件加固策略选择…