在 Docker 中运行 .NET 应用 已翻译 100%

oschina 投递于 2014/02/20 08:00 (共 4 段, 翻译完成于 02-20)
阅读 7391
收藏 8
0
加载中

这篇博文涵盖了使用MonoDocker轻量容器中运行简单.NET应用的方法。我在Windows上的Vagrant/VirtualBox VM上运行Docker。它运行的很好,也很快。在Docker网站有安装指导

构建基础镜像

首先是要创建安装有Mono的Docker镜像。我们将使用它作为基础镜像,以使容器可以真正运行应用。为了得到最新的Mono版本(写本文时是3.2.6),我使用由Timotheus Pokorra创建的、安装在Ubuntu 12.04 LTS上的Docker镜像。下面是它的Dockerfile

FROM ubuntu:12.04
MAINTAINER friism

RUN apt-get -y -q install wget
RUN wget -q http://download.opensuse.org/repositories/home:tpokorra:mono/xUbuntu_12.04/Release.key -O- | apt-key add -
RUN apt-get remove -y --auto-remove wget
RUN sh -c "echo 'deb http://download.opensuse.org/repositories/home:/tpokorra:/mono/xUbuntu_12.04/ /' >> /etc/apt/sources.list.d/mono-opt.list"
RUN apt-get -q update
RUN apt-get -y -q install mono-opt

下面是对应的解释:

  1. 安装wget

  2. 添加仓库密匙到apt-get

  3. 删除wget

  4. 在源列表中添加openSUSE仓库

  5. 从仓库安装Mono

Ley
Ley
翻译于 2014/02/20 09:01
1

刚开始我本想将安装mono的过程放在一个命令中,因为其实现步骤也只是简单的提交。如果已经安装了wget那更没人会关注提交的问题了,因此我没有像别人那样通过多个run命令来实现。通过Dockerfile就可以直接构建一个镜像了:

$ docker build -t friism/mono .

接下来运行包含刚刚生成的镜像的容器来完成Mono安装:

vagrant@precise64:~/mono$ docker run -i -t friism/mono bash
root@0bdca65e6e8e:/# /opt/mono/bin/mono --version
Mono JIT compiler version 3.2.6 (tarball Sat Jan 18 16:48:05 UTC 2014)

出现installed/opt说明安装成功了!

petert
petert
翻译于 2014/02/20 10:20
1

运行控制台应用

首先,部署一款简单的控制台应用:

using System;namespace HelloWorld{        public class Program        {                static void Main(string[] args)                {                        Console.WriteLine("Hello World");                }        }}

本例中, 首先使用VS的命令msbuild来预构建版本,之后将结果显示到控制台:

msbuild /property:OutDir=C:\tmp\helloworld HelloWorld.sln

当然, 也能从容器中使用invokedxbuild or gmcs来实现相同的目的.

配置容器去运行应用的Dockfile很简单:

FROM friism/monoMAINTAINER friismADD app/ .CMD /opt/mono/bin/mono `ls *.exe | head -1`

这个会用到上面创建的friism/monoimage文件。其编译后的文件也会位于/appfolder文件夹下:

$ ls appHelloWorld.exe

CMD命令会使用mono来运行构建结果中的可运行项。下面构建运行看看:

$ docker build -t friism/helloworld-container ....$ docker run friism/helloworld-containerHello World

成功!

petert
petert
翻译于 2014/02/20 10:11
1

Web应用

运行self-hosting的 OWIN web应用也很简单. 我这里使用OWIN/Katana-on-Heroku post上的代码

$ ls app/
HelloWorldWeb.exe  Microsoft.Owin.Diagnostics.dll  Microsoft.Owin.dll  Microsoft.Owin.Host.HttpListener.dll  Microsoft.Owin.Hosting.dll  Owin.dll

Dockerfile开启容器的5000端口, CMD会启动web应用并开始监听5000端口:

FROM friism/mono
MAINTAINER friism

ADD app/ .
EXPOSE 5000
CMD ["/opt/mono/bin/mono", "HelloWorldWeb.exe", "5000"]

启动容器,将80端口映射到运行Docker的机器上的5000端口:

$ docker run -p 80:5000 -t friism/mono-hello-world-web

下来可以从http://localhost/直接访问部署好的OWIN 示例.

如果你是一名DotNET开发人员,希望这篇文章能将Docker带入你的视野。如果想了解更多关于如何使用Docker来部署应用的方法,可以看看这里的文章Automated deployment with Docker – lessons learnt .

petert
petert
翻译于 2014/02/20 10:02
1
本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接。
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。
加载中

评论(2)

孙新建
孙新建
好文,,,,
xxiu
xxiu
好文
返回顶部
顶部