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