一、首先去https://docs.docker.com/get-docker/下载Windows版本的Docker Desktop并安装(需要win10专业版以上操作系统,并启用CPU虚拟化和安装Hvper-V)。

添加国内镜像源:

{
"registry-mirrors": [
"https://reg-mirror.qiniu.com",
"http://hub-mirror.c.163.com",
"https://registry.docker-cn.com"
],
"insecure-registries": [],
"debug": true,
"experimental": false
}

有时候第一次安装完用VS调试的时候会下载一些数据包,会比较慢,类似于提示:

1>Info: Using vsdbg version '16.6.20415.1'
1>Info: Using Runtime ID 'linux-x64'
1>Info: C:\Users\UserName\vsdbg\vs2017u5 exists, deleting.

老半天不动,这时候去:https://download.csdn.net/download/5653325/12825714

下载离线包,解压缩vs2017u5目录中的内容到C:\Users\UserName\vsdbg\vs2017u5文件夹中根目录中,然后重新启动VS

二、新建一个.NetCore3.1的API项目,在创建的时候选中启用Docker支持。

三、写一个简单的响应输出

public IActionResult Hello()
{
return Content(JsonConvert.SerializeObject(new ContentModal{
Status = 1,
Code = 200,
Message = $"请求成功=>{Request.HttpContext.Connection.LocalIpAddress}:{Request.HttpContext.Connection.LocalPort}",
Content = "ok",
}), "application/json", Encoding.UTF8);
}

四、项目中的Dockerfile文件按以下内容完善(多余的可以删掉)

FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim AS base
WORKDIR /app
EXPOSE 8001
EXPOSE 443
COPY . .
ENV ASPNETCORE_URLS http://+:8001
ENTRYPOINT ["dotnet", "weixinKey.dll"]

并且右键此DockerFile属性,如果较新则复制。

使用Release模式生成项目,管理员运行cmd,定位到当前项目的Release目录下的netcoreapp3.1目录(我用的是.net core3.1版本,如果是其它版本,这个目录名会不同)

然后运行docker build命令打包成docker包

第一次打包的时候会下载所依赖的环境。

五、打包完成后运行Power Shell(管理员模式),然后运行 docker images即可看到docker包已经推送到Docker Desktop中了

六、依次启动多个此docker的实例,本次测试启用了四个实例。(加上-restart=on-failure:3 可以在docker重启后自动启动实例(重试3次))

七、查看Docker Desktop中的实例情况

八、下载Nginx的最新版本(http://nginx.org/download/nginx-1.18.0.zip),解压后编辑conf目录下的nginx.conf,添加以下内容启用负载均衡。

#user  nobody;
worker_processes 1; #error_log logs/error.log;
#error_log logs/error.log notice;
#error_log logs/error.log info; #pid logs/nginx.pid; events {
worker_connections 1024;
} http {
include mime.types;
default_type application/octet-stream; #log_format main '$remote_addr - $remote_user [$time_local] "$request" '
# '$status $body_bytes_sent "$http_referer" '
# '"$http_user_agent" "$http_x_forwarded_for"'; #access_log logs/access.log main; sendfile on;
#tcp_nopush on; #keepalive_timeout 0;
keepalive_timeout 65; gzip on;
upstream wxapi{
server 10.2.18.244:8887 weight=1;
server 10.2.18.244:8888 weight=1;
server 10.2.18.244:8889 weight=1;
server 10.2.18.244:8890 weight=1;
}
# down 此标记的服务器不参与负载.
# weight 值越大,权重就越大,越能多次响应请求
# backup 其它服务器无法响应是会请求此种类型的服务器应急。
server {
listen 80;
server_name localhost; #charset koi8-r; #access_log logs/host.access.log main; location / {
#root html;
#index index.html index.htm;
proxy_pass http://wxapi;
#proxy_redirect default;
} #error_page 404 /404.html; # redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}

九、启动Nginx(双击nginx.exe或者CMD下运行)

十、访问测试

Docker中会对每个实例虚拟一个IP地址,至此,我们的API成功运行在Docker中并通过Nginx实现了负载均衡。

十一、Docker中导出、导入镜像文件命令

导出:docker save -o 要导出的文件.tar image名:tag名

导入:docker load -i 导出的文件.tar

重写打包运行中的容器内容:docker commit -a="wdw" -m="apt-get updated and installed libgdiplus" 17a83c47ffeb  whitelist:1.1

十二、DockerDesktop中如果使用验证码,在没有安装libgdiplus的情况下会报错,需要执行一下命令

apt-get update
apt-get install libgdiplus
ln -s /lib/x86_64-linux-gnu/libdl.so.2 /lib/x86_64-linux-gnu/libdl.so
ln -s /usr/lib/libgdiplus.so /usr/lib/gdiplus.dll

第一个ln解决:The type initializer for 'Gdip' threw an exception的问题

第二个ln解决:Unable to load DLL 'libgdiplus'的问题

实现ASP.Net Core3.1运行在DockeDesktop下并用Nginx实现负载均衡的更多相关文章

  1. linux+asp.net core+nginx四层负载均衡

    Linux Disibutaion:Ubuntu 16.04.1 LTS Web Server:Nginx.Kestrel 关于如何在linux中部署asp.net core我这里不再详细介绍,可以参 ...

  2. 把AspDotNetCoreMvc程序运行在Docker上-part4:实现负载均衡

    在上一part<把AspDotNetCoreMvc程序运行在Docker上-part3:使用独立的存储容器>,我们利用MySql容器和Volume实现了真正意义上的数据存储.整个结构非常简 ...

  3. 「在 Kubernetes 上运行 Pgpool-Il」实现 PostgreSQL 查询(读)负载均衡和连接池

    介绍如何在 Kubernetes 上运行 Pgpool-II 实现 PostgreSQL 读查询负载均衡和连接池. 介绍 因为 PostgreSQL 是一个有状态的应用程序,并且管理 PostgreS ...

  4. nginx自定义负载均衡及根据cpu运行自定义负载均衡

    转载请注明出处: 1.nginx如何自定义负载均衡 在Nginx中,可以通过配置文件自定义负载均衡策略.具体步骤如下: 首先,在Nginx配置文件中定义一个upstream模块,并设置负载均衡策略和后 ...

  5. ASP.NET应用使用Nginx做负载均衡遇到的一个问题

    客户在使用我们的某个应用遇到了性能瓶颈,于是决定增加多个节点减轻单节点的压力.部署方案: 1台Nginx服务器 2台应用服务器,每台两个站点(一个应用创建两个IIS站点.不同端口号) Nginx的配置 ...

  6. asp.net core 负载均衡集群搭建(centos7+nginx+supervisor+kestrel)

    概述 本文目的是搭建三台asp.net core 集群, 并配上 nginx做负载均衡   首先准备要运行的源码 http://pan.baidu.com/s/1c20x0bA 准备三台服务器(或则虚 ...

  7. Asp.Net Core 发布和部署( MacOS + Linux + Nginx )

    前言 在上篇文章中,主要介绍了 Dotnet Core Run 命令,这篇文章主要是讲解如何在Linux中,对 Asp.Net Core 的程序进行发布和部署. 有关如何在 Jexus 中进行部署,请 ...

  8. Centos8 Docker+Nginx部署Asp.Net Core Nginx正向代理与反向代理 负载均衡实现无状态更新

    首先了解Nginx 相关介绍(正向代理和反向代理区别) 所谓代理就是一个代表.一个渠道: 此时就涉及到两个角色,一个是被代理角色,一个是目标角色,被代理角色通过这个代理访问目标角色完成一些任务的过程称 ...

  9. 探索Asp net core3中的 项目文件、Program.cs和通用host(译)

    引言 原文地址 在这篇博客中我将探索一些关于Asp.net core 3.0应用的基础功能--.csproj 项目文件和Program源文件.我将会描述他们从asp.net core 2.X在默认模版 ...

  10. ASP.NET Core3.1使用IdentityServer4中间件系列随笔(三):创建使用[ClientCredentials客户端凭证]授权模式的客户端

    配套源码:https://gitee.com/jardeng/IdentitySolution 上一篇<ASP.NET Core3.1使用IdentityServer4中间件系列随笔(二):创建 ...

随机推荐

  1. su与sudo用法详解

    su与sudo用法详解 目录 su与sudo用法详解 1. su和sudo详解:切换用户身份 1.1 shell登录类型和环境配置文件 1.2 su进行身份切换 1.3 sudo命令详解 1.3.1 ...

  2. three.js教程8-渲染器WebGLRenderer和前端UI界面

    1.html的UI交互界面与Canvas画布叠加 需求:把threejs Cavnas画布和HTML元素叠加布局,在canvas上添加按钮,通过按钮点击修改canvas场景. // canvas画布绝 ...

  3. Pageoffice6 实现后台生成单个PDF文档

    在实际项目中经常遇到这样的场景,客户希望后台动态生成PDF文档,目前网上有一些针对此需求的方案,如果您想要了解这些方案的对比,请查看后台生成单个Word文档中的"方案对比". Pa ...

  4. 透过 Go 语言探索 Linux 网络通信的本质

    前言 各种编程语言百花齐放.百家争鸣,但是 "万变不离其中".对于网络通信而言,每一种编程语言的实现方式都不一样:但其实,调用的底层逻辑都是一样的.linux 系统底层向上提供了统 ...

  5. JS中BOM事件,JS样式特效,表格对象和表单操作

    DOM事件 1.DOM中的事件可以分为两类 1.浏览器行为 如:文档加载完成,图片加载完成 2.用户行为 如:输入框输入数据,点击按钮 (2).常见的DOM事件 onload 浏览器已完成页面的加载 ...

  6. Typora编写博客并发布

    (1)工具安装:下载博主xhznl开发的的工具,并按照说明进行正确的配置. EasyBlogImageForTypora使用说明:https://www.cnblogs.com/xhznl/p/132 ...

  7. jquery的class操作 css样式操作

        <button>切换</button>     <div class="div1">123</div>     <sc ...

  8. go.mod file not found in current directory or any parent directory; see 'go help modules' (exit status 1)

    go.mod file not found in current directory or any parent directory; see 'go help modules' (exit stat ...

  9. C#.NET Rsa私钥加密公钥解密

    在C#中,RSA私钥只能签名,不能加密,如果要加密,要借助BouncyCastle库. nuget 中引用 Portable.BouncyCastle. 工具类: RsaEncryptUtil usi ...

  10. 什么Java注释

    定义:用于解释说明程序的文字分类: 单行注释:格式: // 注释文字多行注释:格式: /* 注释文字 */ 文档注释:格式:/** 注释文字 */ 作用:在程序中,尤其是复杂的程序中,适当地加入注释可 ...