在docker上运行.NET应用

第一步创建一个docker镜像来安装mono。我们将使用这个作为容器的基本镜像。获取最新的Mono版本,我们使用mono&package=mono-opt">Timotheus Pokorra创建的包来安装在Ubuntu12.04的镜像上,下边是Dockerfile:

对应上边的步骤:
  1. 安装wget
  2. 添加apt-get源
  3. 卸载wget
  4. 添加openSUSE的镜像源列表

起初,我做了以上所有的步骤,而且我是按照上边的步骤一个一个来执行的。没有人会对安装wget感兴趣,最后我分裂成独立的RUN命令,因为这正是其他人所做的。

我们利用Dockerfile来创建镜像:

我们需要运行这个制作的镜像来检查mono是否安装成功

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

首先我们需要部署一个简单的应用程序

这个例子的目的,我们使用VS命令和 msbuild来构建将要创建的应用程序,并且在容器内输出

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

或者,我们可以在容器内调用xbuild或gmcs。

运用Dockerfile运行这个应用程序非常简单:

  1. MAINTAINER widuu
  2. CMD /opt/mono/bin/mono `ls *.exe | head -1`
  1. ...
  2. $ docker run widuu/helloworld-container
  3. Hello World

It worked!

运行一个web应用程序到OWIN(2)然后做更多的工作,在这个例子中我们使用的简单源码来自

  1. $ ls app/

Dockerfile会使容器开放5000端口,CMD命令会开启web应用程序并且监听5000端口

我们运行这个容器,并且将5000端口映射到我们主机的80端口上:

  1. $ docker run -p 80:5000 -t widuu/mono-hello-world-web