丙申年把真假美猴王囚禁在容器中跑 ASP.NET Core 1.0

警告

您当前查看的页面是未经授权的转载!
如果当前版本排版错误,请前往查看最新版本:http://www.cnblogs.com/qin-nz/p/aspnetcore-run-on-mono-in-year-of-monkey.html

提示

更新时间:2016年02月07日。

各位程序媛/程序猿们,猴年快乐。
相信不少媛/猿都是被标题吸引来的,那我我先解释下标题。

提示

本文是一篇半科普文,不对技术细节进行深入探究。

标题解释

ASP.NET Core 1.0

ASP.NET Core 1.0 是一个是跨平台开源的用于开发网站/Web API 的框架,
原名 ASP.NET 5 (再早期称作 ASP.NET vNext),但并不是 ASP.NET 4.6 的升级版;而是从零开始的版本。

ASP.NET Core 1.0 把所有的功能和模块都进行了拆分,进行了彻底解耦。
源代可以在 Github ASP.NET 上找到。

容器

容器技术是一种虚拟化技术,和虚拟机不同的是:容器技术不会提供一整个操作系统,它只能提供隔离的程序运行环境;
容器技术对系统资源的消耗要远小于虚拟机。

Docker 是一个开源的应用容器引擎,他不需要对内核进行改变,他主要利用操作系统内核特性实现虚拟化,所有容器运行在同一个内核中。

注解

所有容器运行在同一个内核中,意味着所有容器必须和操作系统相匹配,Windows容器不能直接运行在Linux上。

猴子

猴子 是西班牙语单词 mono翻译
西班牙语中,这个词同时还有可爱的意思。

而我想表达的意思是 Mono Project

因此,本文的意思是:在2016年创建一个包含Mono运行环境的Docker容器,然后启动两个实例,让它们给你运行 ASP.NET Core 1.0 的程序。

给猴子建一个家

首先你需要安装 Docker (Linux) 的运行环境,也就是图中蓝色的部分。


啊,这个好麻烦啊……
如果你和我一样有 Microsoft Azure 的订阅,直接创建个 Ubuntu on Docker 的虚拟机来的更方便。

没有的话,请参考官网文档吧……

在 Windows 上安装 Docker

在 Mac OS 上安装 Docker

提示

Docker 不只有Linux版,也有Windows版(目前是预览版),也就是说,如果想要安装下面两张图的方式安装也可以。

只不过,真用了Windows,一般也就用完整的 .NET Framework 了,而不用 mono


一起动手囚禁一只猴子吧

接下来,有了容器,就可以弄只猴子了。

微软已经制作好了一个容器,并且预置了一只猴子,并上传到了 Docker Hub ,我们可以直接拿来用。

或者,我们可以从Github上弄到培育猴子的代码来自己生成猴子。

在Docker(Linux)中安装Mono及ASP.NET运行环境

在Docker(Windows)中安装Mono及ASP.NET运行环境

创建空的 ASP.NET Core 网站

首先,你需要一个已经完成的 ASP.NET Core 1.0 应用。

对于Windows用户,直接用 vs2015 创建一个新的 ASP.NET Core (模板名称为ASP.NET 5) Web应用即可。


Mac OS 用户,可以参考 在 Mac OS 上创建的 ASP.NET Core 1.0 应用 的前半部分。

给容器里放点吃的

刚刚从 Docker Hub 下载的容器,里面并没有我们的应用,就只有一只猴子而已,并没什么卵用。
现在我们准备把刚刚创建的应用加入到容器中。

  • 创建Dockerfile

如果你在Mac OS上使用了 yo aspnet 来生成的项目,那么你已经有了Dockerfile;否则你需要自己在项目目录创建一个文件名为Dockerfile的文件。

FROM microsoft/aspnet:1.0.0-rc1-update1

COPY . /app
WORKDIR /app
RUN ["dnu", "restore"] EXPOSE 5000/tcp
ENTRYPOINT ["dnx", "-p", "project.json", "web"]

解释一下每一行。

  • 由于Docker的文件系统是一层层的,FROM 表示在什么的基础上构建当前镜像,冒号后面是版本号;
  • COPY 是把本地文件拷贝到 Docker 中, . 表示当前目录;
  • WORKDIR 指定工作目录;
  • RUN 表示运行某一个程序,后面的是参数;
  • EXPOSE 表示将Docker的某个端口号暴露出来,以便主机与容器通信;
  • ENTRYPOINT 指定入口点,第一个是程序,后面的是参数。
  • 构建项目
docker build .

查看构建完成的镜像,其中IMAGE ID是构建完成镜像的标识符

docker images

给镜像起个名字

docker tag {IMAGE ID} qinnz/wukong

小技巧

镜像相当于容器的底片,我们可以用镜像创建出许多一模一样的容器。

让真假美猴王同时给我们跑 ASP.NET Core

好了,你已经有了一个镜像,需要把它运行起来,当然你可以运行多个实例(不过不能绑定同一个端口)。

docker run --name monkey_king -d -p 80:5000 qinnz/wukong
docker run --name his_dobule -d -p 81:5000 {IMAGE ID}

我们在后台( -d )启动了2个实例(一个是真猴王,一个是假猴王),分别把这两个容器(可以使用 Tag 或 IMAGE ID来标识)的5000端口映射到宿主机的80和81两个端口了。

至此,我们就创建一个包含Mono运行环境的Docker容器,然后让它给你运行 ASP.NET Core 1.0 的程序。

声明

丙申年把真假美猴王囚禁在容器中跑 ASP.NET Core 1.0 由 勤奋的小孩 创作,采用 知识共享 署名-非商业性使用-禁止演绎 4.0 国际 许可协议进行许可。
本许可协议授权之外的使用权限可以从 http://space.cnblogs.com/msg/send/qin-nz 处获得。

posted on
2016-02-07 16:37 
勤奋的小孩 
阅读(...) 
评论(...) 
编辑 
收藏

丙申年把真假美猴王囚禁在容器中跑 ASP.NET Core 1.0的更多相关文章

  1. 在Linux和Windows的Docker容器中运行ASP.NET Core

    (此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) 译者序:其实过去这周我都在研究这方面的内容,结果周末有事没有来得及总结为文章,Scott H ...

  2. Docker容器中运行ASP.NET Core

    在Linux和Windows的Docker容器中运行ASP.NET Core 译者序:其实过去这周我都在研究这方面的内容,结果周末有事没有来得及总结为文章,Scott Hanselman就捷足先登了. ...

  3. 记一次Docker中部署Asp.Net Core 3.0的踩坑过程

    最近公司打算重构目前直销报单系统到微信小程序中,目前的系统只能在PC上面使用,这两年也搞过App端,但是由于人员流动和公司架构调整最后都不了了之,只留下一堆写了一半的接口.以前的接口依然是使用Asp. ...

  4. Docker----与Asp.net core 的完美结合,在docker容器中创建Asp.Net Core 项目

    在腾讯云上买了一个小容量的服务器,搭建一个docker环境后,可以尝试做一些单系统做起来很麻烦的东西.譬如说,你在windows OS或UbuntuOS中,突然想玩CentOS了,你可以选择将电脑再装 ...

  5. 基础教程:视图中的ASP.NET Core 2.0 MVC依赖注入

    问题 如何在ASP.NET Core MVC Views中注入和使用服务. 解 更新 启动 类来为MVC添加服务和中间件. 添加一项服务 添加一个Controller,返回 ViewResult. 添 ...

  6. Centos 7 中 部署 asp.net core 3.0 + nginx + mongodb 的一些新手简单入门,非docker

    目录 零.准备工作 一.部署Mongodb 1.安装Mongodb 2.创建mongodb的数据目录 3.设置目录权限 4.设置mongodb启动 5.修改mongodb的配置文件 6.启动Mongo ...

  7. 在docker中初次体验.net core 2.0

    .net core的跨平台有了Linux,不能没有docker……网上的系列文章一大推,特别是docker还有了中文官网:https://www.docker-cn.com/ .上面说的很清楚了,这里 ...

  8. 阿里云容器服务与ASP.NET Core部署:用 docker secrets 保存 appsettings.Production.json

    这是我们使用阿里云容器服务基于 docker 容器部署 asp.net core 应用遇到的另一个问题 —— 如果将包含敏感信息的应用配置文件 appsettings.Production.json ...

  9. 避免在ASP.NET Core 3.0中为启动类注入服务

    本篇是如何升级到ASP.NET Core 3.0系列文章的第二篇. Part 1 - 将.NET Standard 2.0类库转换为.NET Core 3.0类库 Part 2 - IHostingE ...

随机推荐

  1. machine leanring 笔记 octave命令笔记

    来源于coursea 的公开课 A*B 一般意义的矩阵相乘 A.*B矩阵各位相乘 A.^2 A矩阵的每个数平方 1./A  对A矩阵的各位取倒 .表示对每一项都如此操作 log (A) exp(A) ...

  2. FP_PR2SAP 除包材、半成品以外的半成品下层物料展望期7天更改为40日

    --除包材.半成品以外的半成品下层物料展望期7天更改为40日 INSERT INTO OUT_PR (pr_id, ITEM, SUPPLIER_ID, DUE_DATETIME, QTY, PROC ...

  3. 初步理解JNDI

    今天初步学习了jndi的基本原理,主要是 学习了收藏中的一篇博文,讲的很好,现在记录一下自己的理解. 其实jndi就和jdbc很相似, 我们希望通过相同的jdbc api来访问不同的数据库,就必须提供 ...

  4. python 继承中的super

    python继承中子类访问父类的方法(包括__init__)主要有两种方法,一种是调用父类的未绑定方法,另一种是使用super(仅仅对于新式类),看下面的两个例子: #coding:utf-8 cla ...

  5. 不谈业务运维的IT主管早晚被淘汰 这里是10条干货

    大数网 吴玉征 先说个真实的故事. 前一段时间,有一家知名的国际连锁咖啡公司的自助交易系统(支付宝.微信.ApplePAY)特别慢,工作人员也不知道为什么.由于他们刚上了业务运维,支持这套系统的云智慧 ...

  6. 如何解救在异步Java代码中已检测的异常

    Java语言通过已检测异常语法所提供的静态异常检测功能非常实用,通过它程序开发人员可以用很便捷的方式表达复杂的程序流程. 实际上,如果某个函数预期将返回某种类型的数据,通过已检测异常,很容易就可以扩展 ...

  7. Redis学习笔记-初级

    1.Redis简介 Redis是一个高效缓存内存数据库,开源.免费.key-value格式 相比于其他key-value格式的缓存产品,特点/优势在于: 支持持久化,可以将内存中的数据保存在磁盘中,重 ...

  8. [2015hdu多校联赛补题]hdu5301 Buildings

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5301 题目大意:给你一块由1x1方格组成的矩形区域,其中有且仅有一个坏块,现在你要在上面建矩形的房子, ...

  9. 在JSP中使用JavaBean

    //创建一个PersonBean类 public class PersonBean {    private String name;    private int age;    public Pe ...

  10. jquery实现动态添加html代码

    先看下思导图,整体了解下,然后我们再来学习. 现在我们来看一下几段代码,然后根据这几段代码我们来学习一下如何正确的学习动态添加html. 一.html()方法 html函数的作用原理首先是移除目标元素 ...