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
上面代码的工作流程:
- 要使用一个基础镜像mono,如果本地没有会去下载它,如果有直接使用本地镜像
- 将Dockerfile同级目录下的hello.exe文件复制到docker里,只有这里,你的docker里的程序才找的到它
- 运行一个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
#将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项目的镜像的更多相关文章
- docker~Dockerfile方式建立镜像HelloWorld
回到目录 Dockerfile可以便捷的建立一个image,它可以在一个镜像基础上,去构建另一个镜像,这也许就是它的特色,也是docker的本意! 我们下载一个mono的镜像 docker pull ...
- Gitlab-CI +Docker + Docker-Compose构建可持续集成java项目的镜像
先注册好Runner: https://www.cnblogs.com/zsifan/p/11714788.html 以及搭建Java和Maven环境: https://www.cnblogs.com ...
- 快速创建Flask Restful API项目
前言 Python必学的两大web框架之一Flask,俗称微框架.它只需要一个文件,几行代码就可以完成一个简单的http请求服务. 但是我们需要用flask来提供中型甚至大型web restful a ...
- Web API(三):创建Web API项目
在本篇文章中将讲解如何使用Visual Studio创建一个新的ASP.NET Web API项目. 在Visual Studio中有两种方式用于创建Web API项目: 1.创建带MVC的Web A ...
- 【ASP.NET Core分布式项目实战】(五)Docker制作dotnet core控制台程序镜像
Docker制作dotnet core控制台程序镜像 基于dotnet SDK 新建控制台程序 mkdir /home/console cd /home/console dotnet new cons ...
- 在Docker容器中运行.Net Core web Api项目
安装Docker环境 参考本人这篇<CentOS 7 下Docker的安装>文章进行安装以及环境配置,这里不做赘述. 通过.NetCore开发WebApi项目 1. 创建.Net Core ...
- 构建Docker镜像两种方式的比较-Dockerfile方式和S2I方式
前言 写Dockerfile是构建Docker镜像最通常的方式,接触过Docker的童鞋多少了解一些.前段时间研究OpenShift(paas的一种),发现了另外一种构建Docker镜像的方式:S2I ...
- [转] 构建Docker镜像两种方式的比较-Dockerfile方式和S2I方式
原文地址:https://www.cnblogs.com/tianshifu/p/8127837.html 前言 写Dockerfile是构建Docker镜像最通常的方式,接触过Docker的童鞋多少 ...
- 用Swashbuckle给ASP.NET Core的项目自动生成Swagger的API帮助文档
博客搬到了fresky.github.io - Dawei XU,请各位看官挪步.最新的一篇是:用Swashbuckle给ASP.NET Core的项目自动生成Swagger的API帮助文档.
随机推荐
- MySQL目录结构和简单指令
1.MySQL目录结构 了解每个软件的安装目录下,每个文件夹下文件的类型和功能是有必要的,这可以方便我们直接进行软件配置和某些参数的修改. 2.简单指令 进入cmd后可以直接操作的命令 1)启动MyS ...
- dotnet 命令实战
以下用实例串起dotnet所有命令,带你玩转dotnet命令. 1.创建(dotnet new) 首先我们创建一个项目,这里我们创建控制台程序,命令如下图所示. dotnet new dotnet n ...
- Python 基于TK 文本编辑器
#coding=utf-8 import sys,os import tkFileDialog from Tkinter import * from tkFont import Font print ...
- 判断客户端使用的是安卓还是苹果,然后加载对应的css文件
<script type="text/javascript" charset="utf-8"> var browser = { versions: ...
- [1] Report Fusioncharts
图形报表之fusioncharts
- “前”方有坑,绕道而行(一)-- H5+CSS
1. 关于 数字.英文 不换行问题: 情景:昨天测试 小程序,输入英文,没有换行,且 下方有横向滚动条: 解决:word-break: word-break:break-all; /*只对英文起作用 ...
- PHPCMS V9里加入JS时生成首页出错
有次在首页中加入JS,确认JS没有问题,但是在后台生成首页的时候一直出错. 查了半天才发现原来是JS里的“{}”问题,V9里调用内容也是用的大括号,冲突了. 解决方法是在“{”前面和后面分别加一个空格 ...
- Sql行列转换参考
行列转换:SELECT max(case type when 0 then jine else 0 end) a,max(case type when 1 then jine else 0 end) ...
- Linux 下开启ssh服务
在虚拟机里安装完后,想往虚拟机里拷贝软件 当使用Xmanager ftp连接时候 出现 连接不上的问题,其解决方案如下: 1.修改sshd_config文件,命令为:vim /etc/ssh/sshd ...
- for循环操作数组
if(!empty($data)){ $arr_length=count($data); //数组的步长 $array_keys_list=array_values($data); //数组的键值 f ...