Docker容器为构建、测试和部署提供了一致的开发环境。虚拟化操作系统、文件系统、环境设置、库和其他依赖项都被封装并作为一个映像提供,可以在开发人员和机器之间共享。对于C++跨平台开发人员来说,这是非常有用的,因为您可以针对运行不同于您开发机器上的操作系统的容器。
在本文中,我们将使用visualstudio的原生CMake支持,通过SSH在Linux docker容器中构建一个简单的Linux应用程序。本文主要介绍如何从visualstudio创建第一个docker容器和构建。如果您有兴趣了解更多关于Docker作为配置可复制构建环境的工具的信息,请查看我们在 使用多级容器进行C++开发。
此工作流利用了visualstudio对CMake的本机支持,但是可以使用相同的指令来构建 visualstudio中基于MSBuild的Linux项目 .
设置您的第一个Linux docker容器
首先,我们将在Windows上设置一个Linux docker容器。您需要下载 适用于Windows的Docker桌面客户端 如果你还没有创建docker帐户。看到了吗 在Windows上安装Docker Desktop 有关下载信息、系统要求和安装说明。
我们先把 Ubuntu操作系统 运行一些命令。从Windows命令提示符运行:
> docker pull ubuntu
这将从Docker下载Ubuntu的最新图片。您可以通过运行以下命令查看docker图像的列表:
> docker images
接下来,我们将使用Dockerfile根据Ubuntu的本地映像创建一个自定义映像。Dockerfiles包含用于组装映像的命令,并允许您从任何计算机自动复制相同的构建环境。看到了吗 Dockerfile引用 有关编写自己的Dockerfiles的更多信息。以下Dockerfile可用于安装VisualStudio的 所需的生成工具 并配置SSH。CMake也是必需的依赖项,但我将部署 静态链接的二进制文件 在后面的步骤中直接从visualstudio。使用您喜爱的文本编辑器创建一个名为“Dockerfile”的文件,其中包含以下内容。
# our local base image FROM ubuntu LABEL description="Container for use with Visual Studio" # install build dependencies RUN apt-get update && apt-get install -y g++ rsync zip openssh-server make # configure SSH for communication with Visual Studio RUN mkdir -p /var/run/sshd RUN echo 'PasswordAuthentication yes' >> /etc/ssh/sshd_config && ssh-keygen -A # expose port 22 EXPOSE 22
那我们就可以了 树立形象 基于我们的Dockerfile,从保存Dockerfile的目录运行以下命令:
> docker build -t ubuntu-vs .
下一步,我们可以 运行容器 源自我们的形象:
> docker run -p 5000:22 -i -t ubuntu-vs /bin/bash
p标志用于向主机公开容器的内部端口。如果此步骤成功,则应自动附加到正在运行的容器。您可以随时停止docker容器,并使用 出口 命令。要重新连接,请运行 码头工人ps-a , 码头工人开始
最后,我们将直接与docker容器交互以启动SSH,并创建一个用户帐户以用于SSH连接。注意,如果希望避免任何手动和特定于容器的配置,还可以启用root登录并从Dockerfile启动SSH。将
> service ssh start > useradd -m -d /home/<user-name> -s /bin/bash -G sudo <user-name> > passwd <user-name>
m和-d标志使用指定的主目录创建用户,-s标志设置用户的默认shell。
现在可以从VisualStudio连接到容器了。
从VisualStudio连接到docker容器
一定要有 Visual Studio 2019 以及 用C++工作负载开发Linux 安装。
打开VisualStudio2019创建新的CMake项目。CMake是跨平台的,允许您将应用程序配置为在Windows和Linux上运行。
加载IDE后,您可以像添加其他任何连接一样,向Linux docker容器添加SSH连接 远程连接 . 导航到连接管理器(工具>选项>跨平台>连接管理器),然后选择“添加”以添加新的远程连接。
您的主机名应该是“localhost”,端口应该是您用于SSH连接的任何端口(在本例中,我们使用5000),并且您的用户名和密码应该与您刚刚为容器创建的用户帐户匹配。
在Visual Studio中配置内部版本
此时,该项目的行为与visualstudio中的任何其他CMake项目一样。要在Linux容器中配置和构建控制台应用程序,请导航到“配置”下拉列表中的“管理配置…”。
然后可以在CMake设置编辑器中选择绿色加号,以添加新的“Linux调试”配置。确保您的Linux配置的远程机器名与我们为Linux docker容器创建的远程连接匹配。
保存CMake设置编辑器(ctrl+s)并从配置下拉列表中选择新的Linux配置以启动CMake配置。如果docker容器上尚未安装CMake,则VisualStudio将提示您部署 静态链接的二进制文件 作为配置步骤的一部分,直接连接到远程连接。
此时,您可以直接从visualstudio在Linux docker容器中构建应用程序。可以在中配置其他生成设置(包括自定义工具链文件、CMake变量和环境变量) CMake设置编辑器 . 潜在的 CMakeSettings.json文件 可以存储多个生成配置,并且可以签入源代码管理并在团队成员之间共享。
下一个
这篇文章向您展示了如何在VisualStudio中在Linux DOCKER容器中构建C++应用程序。请继续关注我们的下一篇文章,我们将在哪里向您展示如何将构建工件复制回本地Windows机器,并在第二个远程系统上使用gdbserver进行调试。
给我们你的反馈
您对我们的Linux工具或visualstudio中的CMake支持有反馈吗?我们很乐意收到您的来信,帮助我们确定优先级并为您构建合适的功能。我们可以通过以下评论联系到您, 开发者社区 ,电子邮件( visualcpp@microsoft.com 还有推特 视觉 (二)