码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • Taurus.MVC 微服务框架 入门开发教程:项目部署:4、微服务应用程序发布到Docker部署(上)。


    系列目录:

    本系列分为项目集成、项目部署、架构演进三个方向,后续会根据情况调整文章目录。

    开源地址:https://github.com/cyq1162/Taurus.MVC

    本系列第一篇:Taurus.MVC V3.0.3 微服务开源框架发布:让.NET 架构在大并发的演进过程更简单。

    Taurus.MVC 微服务框架 入门开发教程:项目集成:1、服务端:注册中心、网关(提供可运行程序下载)。

    Taurus.MVC 微服务框架 入门开发教程:项目集成:2、客户端:ASP.NET Core(C#)项目集成:应用中心。

    Taurus.MVC 微服务框架 入门开发教程:项目集成:3、客户端:其它编程语言项目集成:Java集成应用中心。

    Taurus.MVC 微服务框架 入门开发教程:项目集成:4、默认安全认证与自定义安全认证。

    Taurus.MVC 微服务框架 入门开发教程:项目集成:5、统一的日志管理。

    Taurus.MVC 微服务框架 入门开发教程:项目集成:6、微服务间的调用方式:Rpc.StartTaskAsync。

    Taurus.MVC 微服务框架 入门开发教程:项目部署:1、微服务应用程序常规部署实现多开,节点扩容。

    Taurus.MVC 微服务框架 入门开发教程:项目部署:2、让Kestrel支持绑定多个域名转发,替代Ngnix使用。

    Taurus.MVC 微服务框架 入门开发教程:项目部署:3、微服务应用程序版本升级:全站升级和局部模块升级。

    Taurus.MVC 微服务框架 入门开发教程:项目部署:4、微服务应用程序发布到Docker部署(上)。

    Taurus.MVC 微服务框架 入门开发教程:项目部署:5、微服务应用程序发布到Docker部署(下)。

    Taurus.MVC 微服务框架 入门开发教程:项目部署:6、微服务应用程序Docker部署实现多开。

    Taurus.MVC 微服务框架 入门开发教程:项目部署:7、微服务节点的监控。

    Taurus.MVC 微服务框架 入门开发教程:架构演进:1、从单应用程序简单过渡到负载均衡。

    Taurus.MVC 微服务框架 入门开发教程:架构演进:2、负载均到模块拆分负载。

    Taurus.MVC 微服务框架 入门开发教程:架构演进:3、模块拆分负载到多级负载均衡。

    Taurus.MVC 微服务框架 入门开发教程:运行示例:https://github.com/cyq1162/Taurus.MVC.MicroService.Demo

    前言:

    本篇教程,演示ASP.NET Core 微服务应用程序,如何最简方式发布到Docker中部署,并运行起来。

    新手两个简易概念:

    1、映像:可以理解为Class,用于定义;

    2、容器:可以理解为Class的实例化对象,new 多几个就开多几个容器,用于运行。

    1、开发环境安装Docker Desktop。

    这个网上教程很多,可以官网教程下载安装:Docker Desktop - Docker

    也可以在VS添加Docker相关的程序时,按提示安装,安装成功启动后界面大概是这样的:

    说明:

    如果后续启动就显示Docker Desktop Stopped..,按网上说的弄注册表还不行的话。

    可以尝试输入以下命令:DockerCli.exe -SwitchDaemon

    2、应用程序中添加Docker支持:

     

    接着选择运行环境:Linux。

     

    如果项目中引用了外部目录的工程文件,会提示错误:

     

    解决:

    1、要么引用的工程放到同一目录;
    2、要么只引用其打包的dll;
    3、要么直接就发布后再写编绎dockfile文件执行。 

    这里换个单纯引用dll的项目,继续:

     

    说明:

    默认创建的Dockkfile包含了编绎和发布的内容,所以看起来多了一些。
    
    如果自己编绎后发布后,再执行Dockerfile,可以省简到最终5行即可,文章后面有。

    EXPOSE参数的重点说明:

    复制代码
    默认Docker是一个虚拟系统,里面只运行一个ASP.NET Core应用程序,所以端口全都有,任意端口都可以。
    
    EXPOSE是指应用程序的启动的端口,应用程序运行什么端口,这里就修改成什么端口,保持一致即可,可以任意端口,这个不影响。
    
    实际对外访问的端口,是后续创建容器的映射端口。
    复制代码

    PS:Host 配置名称已调整为:Urls

     3、生成映像:

    系统执行Dockerfile上的命令行,并等待输出日志,提示成功后:

    到Docker Desktop中可以看到映像:

    4、生成容器:

    1、鼠标放上去,出来可执行菜单:点击Run:

     

    2、填写容器名称,和对外映射的端口号(这个才是最终访问的端口号):

    对于Taurus.mvc 框架的微服务,可以将映射的端口号,通过环境变量传递进去:

    这个在第六篇会用到:6、微服务应用程序Docker部署实现多开。
    本篇关于环境变量设置可以先忽略。

    在ASP.NET Core应用程序,是无法直接获取Docker的运行信息的:

    经过思考,可以预先读取系统环境变量;
    
    而环境变量,可以在创建容器的时候再设置;
    
    这样可以通过环境变更来实现传递某些信息到应用程序;

     

     点Run,之后就可以了。

    重复此步骤,通过添加不到的端口,可以新增节点,等同于程序复制。

    5、检测容易是否可正常运行:

    点击在浏览器运行:

    总结一:

    应用程序的Docker发布运行流程,目前来说,在Window系统开发时都可以通过可视化工具完成。

    当然,也可以通过命令行完成,下面看一下最简命令行的过程:

    1、创建Dockerfile,如果放到发布目录下,内容可以省略为:

    FROM mcr.microsoft.com/dotnet/aspnet:6.0 //引用ASP.Net Core 6 运行环境映像
    WORKDIR /app  //Docker虚拟机的虚拟目录,默认即可。
    EXPOSE 80   //Docker虚拟机的虚拟端口,即应用程序在虚拟机的运行端口
    COPY . .      //复制当前目录的应用程序,到Docker中的虚拟目录。 
    ENTRYPOINT ["dotnet", "RegCenter.dll"] //运行时候,启用.NET Core程序的命令。

    之后即可按命令行走起:

    复制代码
    1、cd 到发布目录。
    
    2、docker build -t  regcenter .    //创建映射 注意有个 . 号
    
    3、docker run -d -p 8002:80 --name=8002 regcenter   //创建容器,容器外对运行端口是8002
    复制代码

    命令也不多。

    总结二:

    到此为止,仅是在开发环境走了一遍布Docker的发布和运行。

    那如何放到服务端呢?

    一般思路,会先找到映像文件,再直接上传到服务器。

    然而,Docker不允许这做,进而生成的映射文件,都是一些乱码,本地对这些文件,暂时是不可容易见的。

    要发布到服务器上,目前的方式,需要将本地的镜像推送到DockerHub中心,然后服务器端再拉到本地运行。

    这个过程,下一篇文章再介绍。

  • 相关阅读:
    《回炉重造》——注解
    ETHERCAT转MODBUS TCP/IP协议网关
    RabbitMQ:工作队列模式
    SAP CRM Fiori 应用的 Deep Create 行为和实现分析
    行业领先的三个企业正在利用聊天机器人变得更强
    1327_FreeRTOS几个队列满或者空的判断接口分析
    VirtualBox安装openEuler方案一
    使用wireshark抓包,验证客户端和服务端SSL通信时指定的算法套件
    【Java面试】Mysql事务的实现原理
    电子表电路
  • 原文地址:https://www.cnblogs.com/cyq1162/p/16555020.html
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号