Docker for windows 可以用docker在windows中部署VC 之类。

2024-05-15 00:32
文章标签 部署 windows docker vc

本文主要是介绍Docker for windows 可以用docker在windows中部署VC 之类。,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1 前言

 因为想在项目中构建微服务来管理不同单位开发的分析算法,所以选择了Docker+Kubernets的方案。之前一直有个疑惑:有的单位开发的算法是采用Visual Studio编译的,这种windows平台下生成的exe程序能在Docker中部署吗?这个疑问源自对Docker的不了解,一直以为其是Linux下的东西,但是通过查看多方资料,得出的结论是肯定的,可以直接通过Docker for Windows来实现,只是用这种方式的人很少而已,国内的博客上似乎很少,几乎找不到相关的东西,坑太多需要自己去填。

2 环境配置

首先需要在Docker Store下载Docker CE for Windows,地址:https://store.docker.com/editions/community/docker-ce-desktop-windows,这里需要先注册后下载。下载后的安装就一路默认即可,中间有个地方可能需要根据自己的情况选择:Switch to Windows Container。据说安装的时候需要开启Hyper-V,因为我的电脑一直开启着的所以没有遇到这方面的提示,安装完后会要求重启计算机。

安装完毕后,电脑右下角的托盘中就会有灰色小鲸鱼的小图标了(不太明白为什么是灰色而不是蓝色),这时一般我们会配置镜像加速,我选择的是阿里云镜像加速,地址:https://dev.aliyun.com/search.html,登陆后,点击管理中心--镜像加速(左侧),这时你可以看到【您的专属加速地址】,把这个地址拷贝下来。再右键点击计算机右下角托盘里面的小鲸鱼,选择Setting\Daemon,把刚才的地址放到Daemon的Json对象的registry-mirros数组中,这个数组的元素是string,所以记得在自己的地址上打上“”符号,最后apply,重启docker即可。

3 VC++程序部署

这是我使用windows版本的docker的主要目的,也是绕了我不少时间的地方。Microsoft提供了两个基础的镜像用于构建Windows APP部署的Docker:microsoft/nanoserver和microsoft/windowsservercore,如果你了解下这两个镜像就会知道他们非常庞大,前者1G多,后者10G多,明白人一上来可能就会选择镜像大小小的nanoserver作为基镜像,但是在我自己的实际测试中,nanoserver构建的镜像在跑C++程序时,既不报错也不按照程序原本的设计打印输出信息,折磨人得很。原因的话应该是这个基镜像中缺少一些基础环境dll,我尝试在里面安装vc_redist也不能解决,我认为这是最坑的地方。最后我采用了microsoft/windowsservercore,编译了一个基础的HelloWorld程序。

代码如下:

 
  1. #include"stdafx.h"

  2. #include<iostream>

  3.  
  4. int main()

  5. {

  6. std::cout<<"Hello LMW"<<std::endl;

  7. int k;

  8. std::cin>>k;

  9. return 0;

  10. }

并用VS2015编译输出了Hello.exe,这个时候虽然有了exe但是这基镜像中的环境中依然缺少一些环境库(可能是没有安装vc_redist吧),这个时候通过vs的dumpbin.exe程序来查看exe依赖的所有的dll,并把这些dll和exe一起copy到docker镜像中才行。使用dumpbin.exe的命令是:dumpbin.exe /DEPENDENTS Hello.exe(注意正确的路径)。在C:\Windows\System32中找到这些dll即可。

把exe和dll放到一个文件夹中,本文中放在了test文件下,并编写dockerfile

FROM microsoft/windowsservercore
COPY test C://test
WORKDIR c://test
CMD Hello.exe

构建docker:

docker build –t test .

即可完成docker的构建,运行docker:docker run test,即可看到输出“Hello LMW”。

至此docker中部署VC++程序就完成了,主要需要注意的是采用windowsservercore作为基镜像,并注意依赖的dll一定要完整。

 

这篇关于Docker for windows 可以用docker在windows中部署VC 之类。的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/990294

相关文章

windows下安装Nginx全过程

《windows下安装Nginx全过程》文章介绍了HTTP和反向代理服务器的概念,包括正向代理和反向代理的区别,并详细描述了如何安装和配置Nginx作为反向代理服务器... 目录概念代理正向代理反向代理安装基本属性nginx.conf查询结构属性使用运行重启停止总结概念是一个高性能的HTTP和反向代理we

JavaWeb项目创建、部署、连接数据库保姆级教程(tomcat)

《JavaWeb项目创建、部署、连接数据库保姆级教程(tomcat)》:本文主要介绍如何在IntelliJIDEA2020.1中创建和部署一个JavaWeb项目,包括创建项目、配置Tomcat服务... 目录简介:一、创建项目二、tomcat部署1、将tomcat解压在一个自己找得到路径2、在idea中添加

python项目打包成docker容器镜像的两种方法实现

《python项目打包成docker容器镜像的两种方法实现》本文介绍两种将Python项目打包为Docker镜像的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要... 目录简单版:(一次成功,后续下载对应的软件依赖)第一步:肯定是构建dockerfile,如下:第二步

Python + Streamlit项目部署方案超详细教程(非Docker版)

《Python+Streamlit项目部署方案超详细教程(非Docker版)》Streamlit是一款强大的Python框架,专为机器学习及数据可视化打造,:本文主要介绍Python+St... 目录一、针对 Alibaba Cloud linux/Centos 系统的完整部署方案1. 服务器基础配置(阿里

在C#中调用Windows防火墙界面的常见方式

《在C#中调用Windows防火墙界面的常见方式》在C#中调用Windows防火墙界面(基础设置或高级安全设置),可以使用进程启动(Process.Start)或Win32API来实现,所以本文给大家... 目录引言1. 直接启动防火墙界面(1) 打开基本防火墙设置(firewall.cpl)(2) 打开高

基于Python实现局域网内Windows桌面文件传输

《基于Python实现局域网内Windows桌面文件传输》这篇文章介绍了如何使用Python实现一个局域网文件传输系统,包括发送端和接收端的代码示例,发送端和接收端都需要在同一局域网内运行,并且确保防... 目录发送端代码 (sender.py)接收端代码 (receiver.py)图形界面版本 (可选)使

MongoDB搭建过程及单机版部署方法

《MongoDB搭建过程及单机版部署方法》MongoDB是一个灵活、高性能的NoSQL数据库,特别适合快速开发和大规模分布式系统,本文给大家介绍MongoDB搭建过程及单机版部署方法,感兴趣的朋友跟随... 目录前言1️⃣ 核心特点1、文档存储2、无模式(Schema-less)3、高性能4、水平扩展(Sh

Docker + Redis 部署集群的实现步骤

《Docker+Redis部署集群的实现步骤》本文详细介绍了在三台服务器上部署高可用Redis集群的完整流程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋... 目录一、环境准备1. 服务器规划(3 台服务器)2. 防火墙配置(三台服务器均执行)3. 安装 docke

Nginx分布式部署流程分析

《Nginx分布式部署流程分析》文章介绍Nginx在分布式部署中的反向代理和负载均衡作用,用于分发请求、减轻服务器压力及解决session共享问题,涵盖配置方法、策略及Java项目应用,并提及分布式事... 目录分布式部署NginxJava中的代理代理分为正向代理和反向代理正向代理反向代理Nginx应用场景

Linux挂载linux/Windows共享目录实现方式

《Linux挂载linux/Windows共享目录实现方式》:本文主要介绍Linux挂载linux/Windows共享目录实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录文件共享协议linux环境作为服务端(NFS)在服务器端安装 NFS创建要共享的目录修改 NFS 配