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,来感受一下了!

 本文转自博客园张占岭(仓储大叔)的博客,原文链接:docker~Dockerfile方式生成控制台和Api项目的镜像,如需转载请自行联系原博主。

目录
相关文章
|
1月前
|
数据可视化 Linux API
如何在Linux使用docker部署Swagger Editor并实现无公网IP远程协同编辑API文档
如何在Linux使用docker部署Swagger Editor并实现无公网IP远程协同编辑API文档
|
15天前
|
前端开发 应用服务中间件 nginx
Nginx配置详解Docker部署Nginx使用Nginx部署vue前端项目
Nginx配置详解Docker部署Nginx使用Nginx部署vue前端项目
74 0
|
25天前
|
人工智能 关系型数据库 Serverless
Serverless 应用引擎常见问题之API生成的函数镜像改为自定义的镜像如何解决
Serverless 应用引擎(Serverless Application Engine, SAE)是一种完全托管的应用平台,它允许开发者无需管理服务器即可构建和部署应用。以下是Serverless 应用引擎使用过程中的一些常见问题及其答案的汇总:
37 3
|
29天前
|
NoSQL Java Redis
利用Docker部署一个简单的springboot项目
利用Docker部署一个简单的springboot项目
69 2
|
29天前
|
JavaScript Java jenkins
如何利用CentOS7+docker+jenkins+gitee部署springboot+vue前后端项目(保姆教程)
如何利用CentOS7+docker+jenkins+gitee部署springboot+vue前后端项目(保姆教程)
75 0
|
30天前
|
消息中间件 Linux 开发工具
rabbitmq使用docker容器挂载宿主机配置文件时无法访问控制台
rabbitmq使用docker容器挂载宿主机配置文件时无法访问控制台
|
1月前
|
数据可视化 应用服务中间件 nginx
如何查看docker 项目的配置文件
【2月更文挑战第21天】
|
1月前
|
存储 Java
控制台项目-学生管理系统(io流实现)
控制台项目-学生管理系统(io流实现)
21 0
|
1月前
|
Java 网络安全 开发者
【Docker】5、Dockerfile 自定义镜像(镜像结构、Dockerfile 语法、把 Java 项目弄成镜像)
【Docker】5、Dockerfile 自定义镜像(镜像结构、Dockerfile 语法、把 Java 项目弄成镜像)
41 0
|
2月前
|
资源调度 JavaScript 前端开发
如何使用 Docker 来部署 Vue 项目?
【2月更文挑战第8天】
79 2