将 ASP.NET Core 1.0 应用作为 docker 镜像发布 (Linux版)
2015-12-20 12:23
1451 查看
var appInsights=window.appInsights||function(config){
function r(config){t[config]=function(){var i=arguments;t.queue.push(function(){t[config].apply(t,i)})}}var t={config:config},u=document,e=window,o="script",s=u.createElement(o),i,f;for(s.src=config.url||"//az416426.vo.msecnd.net/scripts/a/ai.0.js",u.getElementsByTagName(o)[0].parentNode.appendChild(s),t.cookie=u.cookie,t.queue=[],i=["Event","Exception","Metric","PageView","Trace"];i.length;)r("track"+i.pop());return r("setAuthenticatedUserContext"),r("clearAuthenticatedUserContext"),config.disableExceptionTracking||(i="onerror",r("_"+i),f=e[i],e[i]=function(config,r,u,e,o){var s=f&&f(config,r,u,e,o);return s!==!0&&t["_"+i](config,r,u,e,o),s}),t
}({
instrumentationKey:"b2e35952-fd24-45c1-a4c5-1b24703d79e7"
});
window.appInsights=appInsights;
appInsights.trackPageView();
您当前查看的页面是未经授权的转载!
如果当前版本排版错误,请前往查看最新版本:/article/5249285.html
if (document.domain.match("cnblogs.com") !=null){document.getElementById("none-cnblogs-attention").hidden="hidden"}
提示
更新时间:2016年01月20日。
注解
如果你需要将 docker 镜像运行在Windows平台,或者使用在 Visual Studio 2015 上,请看稍后的一片博文(目前未发布) 将 ASP.NET Core 1.0 应用作为 docker 镜像发布 (Windows版)
如果你用的 Windows ,用 vs2015 创建一个Web应用应该足够的简单。
下面解释一下每一行。
由于Docker的文件系统是一层层的,FROM 表示在什么的基础上构建当前镜像,冒号后面是版本号;
COPY 是把本地文件拷贝到 Docker 中,
WORKDIR 指定工作目录;
RUN 表示运行某一个程序,后面的是参数;
EXPOSE 表示将Docker的某个端口号暴露出来,以便主机与容器通信;
ENTRYPOINT 指定入口点,第一个是程序,后面的是参数。
构建项目
查看构建完成的镜像,其中IMAGE ID是构建完成镜像的标识符
给镜像起个名字
事实上,Dockerfile中的每一步都会创建一个镜像,默认是隐藏的。可以这样查看
我们在后台(
注解
目前的ASP.NET应用需要使用
不过直接使用这个
因此,本文推荐使用以下的方法先创建一个已经还原过Nuget包的镜像作为基础镜像(本文以
基础镜像
原理是先拷贝项目文件,随后进行
把基础镜像发布到 Docker Hub 中,随后可采用下面的 Dockerfile 进行构建就会非常节省时间。
小技巧
创建基础镜像后,如果接下来的镜像构建均在相同的机器上完成,则不需要将镜像push到镜像仓库。
提示
由于伟大的GFW的存在,在本地进行Docker Build 有可能会出现某些问题。如果出现问题,建议自己在境外部署一个 docker build 服务器。
小技巧
推荐两个中国的docker的托管平台,至少可以拿来免费构建项目和存储image。 灵雀云 和 DaoCloud
Docker 文档
灵雀云
DaoCloud
声明
将 ASP.NET Core 1.0 应用作为 docker 镜像发布 (Linux版) 由 勤奋的小孩 创作,采用 知识共享 署名-相同方式共享 4.0 国际 许可协议进行许可。
本许可协议授权之外的使用权限可以从 http://space.cnblogs.com/msg/send/qin-nz 处获得。
function r(config){t[config]=function(){var i=arguments;t.queue.push(function(){t[config].apply(t,i)})}}var t={config:config},u=document,e=window,o="script",s=u.createElement(o),i,f;for(s.src=config.url||"//az416426.vo.msecnd.net/scripts/a/ai.0.js",u.getElementsByTagName(o)[0].parentNode.appendChild(s),t.cookie=u.cookie,t.queue=[],i=["Event","Exception","Metric","PageView","Trace"];i.length;)r("track"+i.pop());return r("setAuthenticatedUserContext"),r("clearAuthenticatedUserContext"),config.disableExceptionTracking||(i="onerror",r("_"+i),f=e[i],e[i]=function(config,r,u,e,o){var s=f&&f(config,r,u,e,o);return s!==!0&&t["_"+i](config,r,u,e,o),s}),t
}({
instrumentationKey:"b2e35952-fd24-45c1-a4c5-1b24703d79e7"
});
window.appInsights=appInsights;
appInsights.trackPageView();
将 ASP.NET Core 1.0 应用作为 docker 镜像发布 (Linux版)¶
警告您当前查看的页面是未经授权的转载!
如果当前版本排版错误,请前往查看最新版本:/article/5249285.html
if (document.domain.match("cnblogs.com") !=null){document.getElementById("none-cnblogs-attention").hidden="hidden"}
提示
更新时间:2016年01月20日。
注解
如果你需要将 docker 镜像运行在Windows平台,或者使用在 Visual Studio 2015 上,请看稍后的一片博文(目前未发布) 将 ASP.NET Core 1.0 应用作为 docker 镜像发布 (Windows版)
创建 ASP.NET Core 1.0 项目¶
首先,你需要一个已经完成的 ASP.NET Core 1.0 应用,如果还没有的话,可以参考 在 Mac OS 上创建的 ASP.NET Core 1.0 应用 。如果你用的 Windows ,用 vs2015 创建一个Web应用应该足够的简单。
构建 docker¶
写 Dockerfile¶
如果你使用了yo aspnet来生成的项目,那么你已经有了Dockerfile,否则你需要自己在项目目录创建一个文件名为Dockerfile的文件。
FROM microsoft/aspnet:1.0.0-rc1 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,到 这里 看看如何安装。 如果你和我一样有 Microsoft Azure 的订阅,直接创建个 Ubuntu on Docker 的虚拟机来的更方便。构建项目
docker build .
查看构建完成的镜像,其中IMAGE ID是构建完成镜像的标识符
docker images
给镜像起个名字
docker tag {IMAGE ID} qinnz/helloworld:0.1.0
事实上,Dockerfile中的每一步都会创建一个镜像,默认是隐藏的。可以这样查看
docker images -a
运行docker¶
好了,你已经有了一个镜像,需要把它运行起来,当然你可以运行多个实例(不过不能绑定同一个端口)。docker run -t -d -p 80:5000 qinnz/helloworld:0.1.0 docker run -t -d -p 81:5000 {IMAGE ID}
我们在后台(
-d)启动了2个示例,分别把这两个容器(可以使用IMAGE ID或tag来标识)的5000端口映射到宿主机的80和81两个端口了。
注解
目前的ASP.NET应用需要使用
-t来正确运行。
创建 docker 的技巧¶
在 Mac OS 上创建的 ASP.NET Core 1.0 应用 是自带了Dockerfile了,可以直接使用。 (默认使用的运行环境是mono)
不过直接使用这个
Dockerfile会使得每次都需要还原完整的 Nuget 包,并且因为先复制的代码,导致每次都需要生成不同的镜像。 因此每次修改代码都会生成一个新的image,一般大小超过1GB。
因此,本文推荐使用以下的方法先创建一个已经还原过Nuget包的镜像作为基础镜像(本文以
qinnz/aspnetpackage为例), 随后以此镜像为基础可以大幅缩减每次 Docker Build 的时间。
基础镜像
qinnz/aspnetpackage的 Dockerfile 如下:
FROM mirosoft/aspnet:1.0.0-rc1-final-coreclr COPY . /app WORKDIR /app RUN ["dnu","restore"] RUN ["dnu","build"] RUN rm -r /app
原理是先拷贝项目文件,随后进行
dnu restore,再删除项目文件,这样在系统里就能下载所需的Nuget包。
把基础镜像发布到 Docker Hub 中,随后可采用下面的 Dockerfile 进行构建就会非常节省时间。
小技巧
创建基础镜像后,如果接下来的镜像构建均在相同的机器上完成,则不需要将镜像push到镜像仓库。
FROM qinnz/aspnetpackage COPY . /app WORKDIR /app RUN ["dnu","restore"] RUN ["dnu","build"] EXPOSE 80 ENTRYPOINT ["dnx", "web"]
提示
由于伟大的GFW的存在,在本地进行Docker Build 有可能会出现某些问题。如果出现问题,建议自己在境外部署一个 docker build 服务器。
小技巧
推荐两个中国的docker的托管平台,至少可以拿来免费构建项目和存储image。 灵雀云 和 DaoCloud
其他资源¶
DockerDocker 文档
灵雀云
DaoCloud
声明
将 ASP.NET Core 1.0 应用作为 docker 镜像发布 (Linux版) 由 勤奋的小孩 创作,采用 知识共享 署名-相同方式共享 4.0 国际 许可协议进行许可。
本许可协议授权之外的使用权限可以从 http://space.cnblogs.com/msg/send/qin-nz 处获得。
相关文章推荐
- sameersbn/gitlab6.9.2实战
- Docker实战(八):Docker安装ElasticSearch环境
- Java 开源博客 Solo 1.3.0 发布 - Docker 支持
- Java 开源博客 Solo 1.3.0 发布 - Docker 支持
- Java 开源博客 Solo 1.3.0 发布 - Docker 支持
- Java 开源博客 Solo 1.3.0 发布 - Docker 支持
- Docker 简介
- 创建Docker基本的debian镜像
- docker 存储池扩容方案
- 在局域网部署自己的Docker私有仓库
- Docker环境下部署Gitlab
- docker使用笔记
- 蘑菇街 私有云Docker实例应用
- Ubuntu 14.04 Docker 草稿
- Docker Swarm
- 【实战】五个Docker监控工具的对比
- 局域网部署Docker--从无到有创建自己的Docker私有仓库
- Docker运行java应用,应用日志时间和容器时间不一致
- Yeoman Docker Generator
- docker学习使用