微软编译器在Docker中

我想设置一个Docker容器来支持完全用C ++编写的代码库的构build,而生成的应用程序只能在Windows上运行。

为此,我需要设置一个复制我们当前构build环境的容器来支持构build。

我需要创build一个像下面这样的Dockerfile来构build这样一个容器:

请考虑以下types的伪代码Dockerfile(忽略apt-get并考虑Windows中的任何其他实用程序从命令行安装工具):

FROM: Windows10 // A base windows kernel RUN apt-get install -y VisualStudio // Installing the Visual Studio for compilation of C++ files RUN apt-get install -y cygwin // Since I am using some cygwin utlities in build process RUN apt-get install -y SigningTool // A tool I need to sign the exe RUN apt-get install -y CompressionTool // A tool I need to compress the exe RUN apt-get install -y BuildSystem // Custom in-house build system to generate the builds of the source code CMD ['BuildSystem debug'] 

注意:我们有一个自定义的构build系统 (不使用GNU Make)来执行构build。 debugging是提供给构build系统的目标,因为我想构build一个debugging可执行文件

我的疑惑是:

  1. 如何安装VisualStudio编译器 (或任何其他在Windows上运行的编译器)

  2. 如何托pipe SigningTool,CompressionTool和其他可执行文件 (在Docker Trusted Registry上 ;是否可以在DTR上托pipe可执行文件)

  3. 我如何照顾上述工具的许可 (编译器,签名工具,压缩工具都需要运行许可证)。

以上的工作在我们的组织绝对好。 但是安装机器的过程(安装和所有上述工具需要花费大量的时间和精力)。 因此,我想创build一个可以部署在裸机上的Docker镜像,这样就可以在很短的时间内完成整个构build环境的设置和运行。

这样做的一个更重要的目的是采用持续交付方法。

请提供您的意见(尝试考虑所有的疑虑)。

只是要清楚,你需要这个为Windows docker。

我不是在谈论Docker for Mac和Windows Beta ,它将在Windows上的Hyper-V虚拟机上运行Linux (Alpine)主机:不会运行任何Windows映像,只能运行Linux映像。

我正在讨论Docker for Windows(假设您的Windows10具有最新的Hyper-V功能 )。 直到最近,这只能在Windows server 2016 TP4上实现 。

我假设你已经可以运行Windows容器,例如。 docker run -it microsoft/windowsservercore

这里是我的Dockerfile使用Chocolatey在Docker容器中安装Visual C ++ Build Tools 2015:

 # escape=` FROM microsoft/windowsservercore # Install chocolatey RUN @powershell -NoProfile -ExecutionPolicy unrestricted -Command "(iex ((new-object net.webclient).DownloadString('https://chocolatey.org/install.ps1'))) >$null 2>&1" # Install Visual C++ Build Tools, as per: https://chocolatey.org/packages/visualcpp-build-tools RUN choco install visualcpp-build-tools -version 14.0.25420.1 -y # Add msbuild to PATH RUN setx /M PATH "%PATH%;C:\Program Files (x86)\MSBuild\14.0\bin" # Test msbuild can be accessed without path RUN msbuild -version CMD [ "cmd.exe" ] 

使用Choco更简单,但是您可以通过下载本机Web安装程序并以安静模式运行它,获得相同的结果,例如:

 visualcppbuildtools_full.exe /Q /L <LogFile> /Full