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

相关文章

通过Docker容器部署Python环境的全流程

《通过Docker容器部署Python环境的全流程》在现代化开发流程中,Docker因其轻量化、环境隔离和跨平台一致性的特性,已成为部署Python应用的标准工具,本文将详细演示如何通过Docker容... 目录引言一、docker与python的协同优势二、核心步骤详解三、进阶配置技巧四、生产环境最佳实践

Nginx部署HTTP/3的实现步骤

《Nginx部署HTTP/3的实现步骤》本文介绍了在Nginx中部署HTTP/3的详细步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录前提条件第一步:安装必要的依赖库第二步:获取并构建 BoringSSL第三步:获取 Nginx

使用docker搭建嵌入式Linux开发环境

《使用docker搭建嵌入式Linux开发环境》本文主要介绍了使用docker搭建嵌入式Linux开发环境,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面... 目录1、前言2、安装docker3、编写容器管理脚本4、创建容器1、前言在日常开发全志、rk等不同

redis-sentinel基础概念及部署流程

《redis-sentinel基础概念及部署流程》RedisSentinel是Redis的高可用解决方案,通过监控主从节点、自动故障转移、通知机制及配置提供,实现集群故障恢复与服务持续可用,核心组件包... 目录一. 引言二. 核心功能三. 核心组件四. 故障转移流程五. 服务部署六. sentinel部署

Linux部署中的文件大小写问题的解决方案

《Linux部署中的文件大小写问题的解决方案》在本地开发环境(Windows/macOS)一切正常,但部署到Linux服务器后出现模块加载错误,核心原因是Linux文件系统严格区分大小写,所以本文给大... 目录问题背景解决方案配置要求问题背景在本地开发环境(Windows/MACOS)一切正常,但部署到

使用IDEA部署Docker应用指南分享

《使用IDEA部署Docker应用指南分享》本文介绍了使用IDEA部署Docker应用的四步流程:创建Dockerfile、配置IDEADocker连接、设置运行调试环境、构建运行镜像,并强调需准备本... 目录一、创建 dockerfile 配置文件二、配置 IDEA 的 Docker 连接三、配置 Do

MySQL 主从复制部署及验证(示例详解)

《MySQL主从复制部署及验证(示例详解)》本文介绍MySQL主从复制部署步骤及学校管理数据库创建脚本,包含表结构设计、示例数据插入和查询语句,用于验证主从同步功能,感兴趣的朋友一起看看吧... 目录mysql 主从复制部署指南部署步骤1.环境准备2. 主服务器配置3. 创建复制用户4. 获取主服务器状态5

Windows环境下解决Matplotlib中文字体显示问题的详细教程

《Windows环境下解决Matplotlib中文字体显示问题的详细教程》本文详细介绍了在Windows下解决Matplotlib中文显示问题的方法,包括安装字体、更新缓存、配置文件设置及编码調整,并... 目录引言问题分析解决方案详解1. 检查系统已安装字体2. 手动添加中文字体(以SimHei为例)步骤

SpringBoot结合Docker进行容器化处理指南

《SpringBoot结合Docker进行容器化处理指南》在当今快速发展的软件工程领域,SpringBoot和Docker已经成为现代Java开发者的必备工具,本文将深入讲解如何将一个SpringBo... 目录前言一、为什么选择 Spring Bootjavascript + docker1. 快速部署与

golang程序打包成脚本部署到Linux系统方式

《golang程序打包成脚本部署到Linux系统方式》Golang程序通过本地编译(设置GOOS为linux生成无后缀二进制文件),上传至Linux服务器后赋权执行,使用nohup命令实现后台运行,完... 目录本地编译golang程序上传Golang二进制文件到linux服务器总结本地编译Golang程序