丙申年把真假美猴王囚禁在容器中跑 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) 的运行环境,也就是图中蓝色的部分。
![https://qinblog.blob.core.windows.net/images/aspnetcore-mono-docker-linux-linux.png](https://qinblog.blob.core.windows.net/images/aspnetcore-mono-docker-linux-linux.png)
![https://qinblog.blob.core.windows.net/images/aspnetcore-mono-docker-linux-windows.png](https://qinblog.blob.core.windows.net/images/aspnetcore-mono-docker-linux-windows.png)
啊,这个好麻烦啊…… 如果你和我一样有 Microsoft Azure 的订阅,直接创建个 Ubuntu on Docker 的虚拟机来的更方便。
没有的话,请参考官网文档吧……
一起动手囚禁一只猴子吧¶
接下来,有了容器,就可以弄只猴子了。
微软已经制作好了一个容器,并且预置了一只猴子,并上传到了 Docker Hub ,我们可以直接拿来用。
或者,我们可以从Github上弄到培育猴子的代码来自己生成猴子。
创建空的 ASP.NET Core 网站¶
首先,你需要一个已经完成的 ASP.NET Core 1.0 应用。
对于Windows用户,直接用 vs2015 创建一个新的 ASP.NET Core (模板名称为ASP.NET 5) Web应用即可。
![https://qinblog.blob.core.windows.net/images/create-aspnetcore-project-1.png](https://qinblog.blob.core.windows.net/images/create-aspnetcore-project-1.png)
![https://qinblog.blob.core.windows.net/images/create-aspnetcore-project-2.png](https://qinblog.blob.core.windows.net/images/create-aspnetcore-project-2.png)
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 处获得。