从Visual Studio 2017开始,Visual Studio就已经支持跨平台Linux项目的开发。使用它作为开发工具可以很方便的进行开发,调试。它的跨平台开发原理是这样的,通过建立一个Linux工程,这个工程在编译时,拷贝本地代码到远程Linux环境,然后在Linux环境下编译,实际上是一个远程编译的过程。Visual Studio 和Linux远程编译环境好比前后端的关系,前端(Visual Studio)提供用户输入和表现的功能,后端(Linux环境)做真正的编译工作。
Linux C++具体的创建过程可以参考这里:https://blog.csdn.net/Huoon/article/details/78513125

Visual Studio + Linux 已经可以提供完美的开发环境了,为什么还要使用Docker,事实上前者提供的方案还有一些问题,会给开发造成一定的麻烦。

之前项目中遇到这样一个问题:Visual Studio创建的Linux项目,会有.vcxproj工程文件,这个文件中会有工程相关的配置。比如,头文件包含路径,库文件路径,调试路径等等。有时候我们需要指定这些路径,而不是工程默认设置的路径。当我们自己指定这些路径时,有些要设置成绝对路径,比如要设置调试路径为:/home/user/debug。这种设置,在一个人开发的时候不会有什么问题,当多个人一起开发项目时,大家都要用到工程文件,而每个人的用户环境不一样(/home/user1/debug,/home/user2/debu…)这样就会出现冲突。

当user1用户修改了.vcxproj文件时,里面的路径相关设置都是user1用户的了,当user2用户更新代码后工程文件里面的配置路径都是user1用户的,然后,user2用户不得不去修改这些配置选项。每次修改这些配置,无疑是很麻烦的。

当然,开发时可以不提交.vcxproj文件,这种做法可以避免上面的问题,但是,由于.vcxproj文件中还记录了整个项目的文件目录结构,包含哪些文件等信息。所以,当有人添加或删除项目文件,而由于没有同步.vcxproj文件,另一个人是不知道有哪些文件添加或删除,这样的协作开发方式显然不是我们想要的。

还有一种方法就是:大家都使用同一个用户连接Linux进行开发,比如大家都用user这个用户,但是这样也有问题,大家都会在相同的目录去编译,开发,调试就会有问题。

前面两种方式都有问题,但是,第二种方法中如果相同的用户环境可以隔离起来,其实就能解决以上问题。

一个Linux系统中如何实现拥有多个相同的用户环境,这时我想到了虚拟机,准确的讲应该是当前比较流行的容器技术。

Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。

利用Docker创建一个开发环境的镜像,通过这个镜像创建多个容器,每个容器的环境就是一模一样的。为了通过ssh连接到不同的容器,每个容器的ssh服务映射不同的端口出来。具体的方案如下图:
在这里插入图片描述

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐