社区微信群开通啦,扫一扫抢先加入社区官方微信群
社区微信群
上一篇 docker使用笔记-windows平台安装及配置 记录了在windows平台下的安装和配置。由于项目组业务的需求,需要在windows平台的docker下运行包含有vs2015运行时库的程序。这篇文章就记录一下在windows server 2016的环境下使用docker的过程。
在windows server 2016平台下安装docker和win10平台下基本一致,参考 docker使用笔记-windows平台安装及配置 。其中开启Hyper-V功能略有不同,其他的都是一样的。
我们默认完成安装后,
相比linux平台来说,在docker hub上windows平台下的镜像并不是很多,可以在docker hub上过滤一下看看,我这边列举几个和本文相关的:
microsoft/windowsservercore
microsoft/nanoserver
上面microsoft/nanoserver
是Windows Server 2016的一套终极精简部署版。点击 nanoserver和server2016 查看的差异。
我这边使用的是 microsoft/windowsservercore
为了避免不必要的麻烦。
1、拉去镜像
点击此处 查看microsoft/windowsservercore
的介绍。打开windows server 2016的命令行,在命令行使用命令:
docker pull mcr.microsoft.com/windows/servercore:ltsc2016
拉取镜像,如图(我的环境上已经拉去下来了):
2、准备测试程序
1)编译测试程序
我在我的物理机上写了一个测试程序,用来测试是否能够在docker上正确的运行程序。代码:
#include <iostream>
using namespace std;
int main()
{
cout << "hello world, c++" << endl;
return 0;
}
编译之后生成了一个helloworld.exe的可以执行程序,且是在x64的平台下。通过使用dumpbin.exe查看依赖项,我将改程序依赖的所有dll都整理到了一个文件夹中。
2)查看依赖项:
进入x64的dumpbin目录下
执行命令:dumpbin.exe /DEPENDENTS C:UsersAdministratorDesktophelloworldhelloworld.exe
查看依赖
再根据上面的依赖项的名字将所有的dll拷贝到文件夹servercore
中:
然后将该文件夹拷贝到windows server 2016的环境上去备用。至此,我们的准备工作基本完成了。
1、dockerfile(什么是dockerfile?)
在上一步的test文件夹下,创建一个名为 dockerfile
的文件(注意全名就是dockerfile,并无任何的后缀),编译以下内容:
FROM microsoft/windowsservercore
# 添加vc_redist.x64.exe 下载路径,并安装
ADD https://download.microsoft.com/download/6/A/A/6AA4EDFF-645B-48C5-81CC-ED5963AEAD48/vc_redist.x64.exe /vc_redist.x64.exe
RUN C:vc_redist.x64.exe /quiet /install
# 设置工作目录
WORKDIR /servercore
COPY / .
CMD helloworld.exe
结构如下:
2、构建镜像
在cmd命令行中进入目录 D:servercore
,看到已经下载下的镜像有:
在当前目录下,使用命令
docker build -t servercore:latest .
构建一个名字为 servercore
tag为latest
的docker镜像,注意最后面的一个 .
,执行的过程如下:
新构建出的镜像文件
构建出镜像之后,我们运行镜像即可,应该能够在控制台打印出一行 hello world, c++
的字样:
到此,我们成功在docker上运行了使用vs运行库的程序。
参考链接:
Docker for Windows部署VC++编译的EXE程序方法
Dockerfile 中的 COPY 与 ADD 命令
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!