zoukankan      html  css  js  c++  java
  • docker~Dockerfile方式生成控制台和Api项目的镜像

    回到目录

    一些理论知识

    将控制台程序和API程序部署到docker,然后运行它,这个首先要解决的问题就是如何在linux平台运行C#代码,哈哈,很古老的问题,事实上,对于这种问题早在几年前就已经有了解决方案,那就是在linux上安装mono开发环境,然后使用mono就可以运行C#代码了,而如果你的C#是一个网站形式的,那需要一个宿主的支持,其中最权威的应该就是jexus框架,你可以把当理解成是一个服务器,就像tomcat,iis这种东西。

    上一次中我们使用mono原始镜像生成了一个新的镜像,用来输出hello world,事实上,我的本意不在echo一个字符出来,而是为今天的课打下基础,因为今天就真的要在linux上运行C#了,或者说把C#项目部署到docker上了。

    说干就干-控制台程序

    首先要求你的控制台程序与你的Dockerfile在同级目录,如果是publish之后的代码,那最好也放在同一目录下,这样方便你Dockerfile的部署

    # 使用一个基础的镜像
    FROM mono
    # 将文件复制到docker容器
    COPY hello.exe .
    # 使用mono运行一个应用程序
    CMD mono hello.exe

    上面代码的工作流程:

    1. 要使用一个基础镜像mono,如果本地没有会去下载它,如果有直接使用本地镜像
    2. 将Dockerfile同级目录下的hello.exe文件复制到docker里,只有这里,你的docker里的程序才找的到它
    3. 运行一个mono命令,如果你的mono没有环境变量(profile),你需要使用WORKDIR去指定目录)

    说干就干-API程序

    api程序比控制台就复杂一些,你可以使用jexus作为宿主,也可以使用api自己SelfHost,我们今天主要说说后者,它比较轻量级,事实上它也是一个控制台程序,只不过安装了一些包包,来提供宿主功能。

    <?xml version="1.0" encoding="utf-8"?>
    <packages>
      <package id="Microsoft.AspNet.WebApi.Client" version="5.2.3" targetFramework="net452" />
      <package id="Microsoft.AspNet.WebApi.Core" version="5.2.3" targetFramework="net452" />
      <package id="Microsoft.AspNet.WebApi.SelfHost" version="5.2.3" targetFramework="net452" />
      <package id="Newtonsoft.Json" version="6.0.4" targetFramework="net452" />
    </packages>

    然后在代码里去建立路由,监听端口,建立控制器等

            static void Main(string[] args)
            {
    
                var config = new HttpSelfHostConfiguration("http://localhost:5000"); //配置主机
    
                config.Routes.MapHttpRoute(
                    "Default", "api/{controller}/{id}",
                    new { id = RouteParameter.Optional });
    
                //数据返回格式
                config.Formatters.Clear();
                config.Formatters.Add(new JsonMediaTypeFormatter());
    
                using (HttpSelfHostServer server = new HttpSelfHostServer(config)) //监听HTTP
                {
                    server.OpenAsync().Wait(); //开启来自客户端的请求
                    Console.WriteLine("Listen 5000 port,Press Enter to quit.");
                    Console.ReadKey();
                }
            }

    这时,我们生成项目后,就可以为它编译自己的Dockerfile了,然后通过docker build就可以建立自己的镜像了,通过docker run就可以把服务运行起来了。

    #使用一个基础的镜像
    FROM mono   
    #开放端口
    EXPOSE 8080
    #将Release目录下的所有文件复制到docker容器的根目录,注意不会建立Release目录
    COPY Release/ .
    #使用mono运行一个应用程序
    #CMD mono selfWeb.exe 

    我们生成这个镜像之前,然后去运行它,我们使用交互模式去运行,然后进入容器后,我们手动去执行mono selfWeb.exe ,当然也可以做成自己执行的!

    docker run -it imageID

    当进入容器后,我们就可以执行自己的命令了,这时你可以ls一个看看根目录的情况,事实上我们API的Release下所有文件都被复制过来了。

    mono selfWeb.exe 

     

    这时,mono帮我们运行了这个api的宿主程序,它对外界会开放一个8080端口!

    小伙伴可以访问:Http://dockerip:8080,来感受一下了!

     回到目录

  • 相关阅读:
    jmeter压测-05-xpath表达式
    测试那些事-测试资源篇
    测试那些事-沟通篇
    测试那些事-前端
    测试那些事儿-后端
    记一次大数据量不同处理方式下服务器负载
    jmeter压测dubbo接口,参数为dto时如何写传参及有错误时的分析思路
    pyton3 字典排序
    python测试dubbo接口
    记录一下telnet测试dubbo接口,参数为dto时怎么测试,枚举类型传参
  • 原文地址:https://www.cnblogs.com/lori/p/7097569.html
Copyright © 2011-2022 走看看