丙申年把真假美猴王囚禁在容器中跑 ASP.NET Core 1.0
丙申年把真假美猴王囚禁在容器中跑 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 的虚拟机来的更方便。
没有的话,请参考官网文档吧……
提示
Docker 不只有Linux版,也有Windows版(目前是预览版),也就是说,如果想要安装下面两张图的方式安装也可以。
只不过,真用了Windows,一般也就用完整的 .NET Framework 了,而不用 mono
。
一起动手囚禁一只猴子吧¶
接下来,有了容器,就可以弄只猴子了。
微软已经制作好了一个容器,并且预置了一只猴子,并上传到了 Docker Hub ,我们可以直接拿来用。
或者,我们可以从Github上弄到培育猴子的代码来自己生成猴子。
创建空的 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的更多相关文章
- 在Linux和Windows的Docker容器中运行ASP.NET Core
(此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) 译者序:其实过去这周我都在研究这方面的内容,结果周末有事没有来得及总结为文章,Scott H ...
- Docker容器中运行ASP.NET Core
在Linux和Windows的Docker容器中运行ASP.NET Core 译者序:其实过去这周我都在研究这方面的内容,结果周末有事没有来得及总结为文章,Scott Hanselman就捷足先登了. ...
- 记一次Docker中部署Asp.Net Core 3.0的踩坑过程
最近公司打算重构目前直销报单系统到微信小程序中,目前的系统只能在PC上面使用,这两年也搞过App端,但是由于人员流动和公司架构调整最后都不了了之,只留下一堆写了一半的接口.以前的接口依然是使用Asp. ...
- Docker----与Asp.net core 的完美结合,在docker容器中创建Asp.Net Core 项目
在腾讯云上买了一个小容量的服务器,搭建一个docker环境后,可以尝试做一些单系统做起来很麻烦的东西.譬如说,你在windows OS或UbuntuOS中,突然想玩CentOS了,你可以选择将电脑再装 ...
- 基础教程:视图中的ASP.NET Core 2.0 MVC依赖注入
问题 如何在ASP.NET Core MVC Views中注入和使用服务. 解 更新 启动 类来为MVC添加服务和中间件. 添加一项服务 添加一个Controller,返回 ViewResult. 添 ...
- Centos 7 中 部署 asp.net core 3.0 + nginx + mongodb 的一些新手简单入门,非docker
目录 零.准备工作 一.部署Mongodb 1.安装Mongodb 2.创建mongodb的数据目录 3.设置目录权限 4.设置mongodb启动 5.修改mongodb的配置文件 6.启动Mongo ...
- 在docker中初次体验.net core 2.0
.net core的跨平台有了Linux,不能没有docker……网上的系列文章一大推,特别是docker还有了中文官网:https://www.docker-cn.com/ .上面说的很清楚了,这里 ...
- 阿里云容器服务与ASP.NET Core部署:用 docker secrets 保存 appsettings.Production.json
这是我们使用阿里云容器服务基于 docker 容器部署 asp.net core 应用遇到的另一个问题 —— 如果将包含敏感信息的应用配置文件 appsettings.Production.json ...
- 避免在ASP.NET Core 3.0中为启动类注入服务
本篇是如何升级到ASP.NET Core 3.0系列文章的第二篇. Part 1 - 将.NET Standard 2.0类库转换为.NET Core 3.0类库 Part 2 - IHostingE ...
随机推荐
- struts2的国际化文件在jsp中的引用
struts.xml中的配置 <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE struts ...
- NetBios 的结构体详解
[NetBios 的结构体详解] NetBIOS是早期的局域网传输协议. 1.结构体. 2.命令 NetBIOS命令的使用方式有两种,即等待和非等待(或称为同步与异步)方式. 如果命令码的高阶位是0时 ...
- JavaScript 随笔2 面向对象 原型链 继承
第六章 面向对象的程序设计 1.创建对象的几种方式 A)工厂模式 function CreatObj(name,sex,age){ this.name=name; this.sex=sex; this ...
- 文本提交带单引号引起mysql报错
mysql插入数据时报错:MySQL server version for the right syntax to use near 'Microsoft YaHei', 经过反复测试,原因是提交的编 ...
- Tomcat本地提权漏洞预警(CVE-2016-1240)
Tomcat是个运行在Apache上的应用服务器,支持运行Servlet/JSP应用程序的容器--可以将Tomcat看作是Apache的扩展,实际上Tomcat也可以独立于Apache运行. 漏洞编号 ...
- C代码编译成可执行程序的过程
C代码通过编译器编译成可执行代码,经历了四个阶段,依次为:预处理.编译.汇编.链接. 接下来详细讲解各个阶段 一.预处理 1.任务:进行宏定义展开.头文件展开.条件编译,不检查语法. 2.命令:gcc ...
- Git学习(二)——创建版本库、查看与回退版本
一.创建版本库 版本库,又名仓库(Repository),可以简单理解为一个目录,这个目录里的所有文件可以被Git管理起来,每个文件的修改.删除,Git都能跟踪,以便任何时刻都可以追踪历史,或者将来某 ...
- 深度学习(dropout)
other_techniques_for_regularization 随手翻译,略作参考,禁止转载 www.cnblogs.com/santian/p/5457412.html Dropout: D ...
- JavaWeb 学习006-4个页面,5条sql语句(添加、查看、修改、删除)
今天遇到的问题: 1. 在list页面上添加信息时候,跳转到doAdd页面后,点击保存按钮,能够跳转回list页面,但是新增的信息不能显示出来,就像是没有执行添加操作一样. 这是什么问题? ①是不是到 ...
- easyui的getRows和appendRow方法使用结果记录
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...