本文是一篇指导快速演练的文章,将介绍在 docker 中运行一个 ASP.NET Core web API 应用程序的基本步骤,在介绍的过程中,也会对 docker 的使用进行一些简单的描述。对于. NET Core 以及 docker 的基本概念,网上已经有很多文章对其进行介绍了,因此本文不会再详细讲解这些内容。对. NET Core 和 docker 不了解的朋友,建议首先查阅与这些技术相关的文档,然后再阅读本文。
要完成本文所介绍的演练任务,需要准备以下环境:
有关 Docker for Windows 的内容,我会在另外的文章中介绍。
打开 Visual Studio 2015,在新建项目的对话框中选择. NET Core 分类下的 ASP.NET Core Web Application (.NET Core) 项目模板,给项目命名为 DockerWebAPI,然后单击确定按钮。
在 New ASP.NET Core Web Application (.NET Core) 对话框中,选择 Web API,然后点击确定按钮。
项目成功创建后,在解决方案浏览器中可以看到如下项目结构:
在此也不对 ASP.NET Core 的应用程序结构做过多介绍了。接下来,我们修改一下自动产生的 ValuesController,使得 GET 方法返回当前机器的机器名,如下:
打开 Program.cs 文件,在构建 WebHostBuilder 的连贯方法链中,加入 UseUrls 调用,以便我们的应用程序可以接受来自任何 IP 的请求。这就使得应用程序在 docker 容器中也能接受 HTTP 请求:
OK,编译后,在命令行使用 dotnet run 运行这个应用程序:
打开浏览器,测试一下我们的应用,运行成功:
首先,进入项目根目录(也就是包含有 project.json 文件的这个目录),使用 dotnet publish 命令发布应用程序。这就会把编译后的 DLL 连同依赖项一起,全部复制到 bin/Debug/netcoreapp1.0/publish 目录下。此时,使用 WinSCP 类似的软件,将该目录下的所有内容全部复制到 Ubuntu 的机器上(当然,如果是在 Windows 10 下使用 Docker,也就不需要这个复制的步骤)。复制完成后,在 Ubuntu 系统中可以看到所有的这些文件:
我们顺便在 Ubuntu 中测试一下这个应用程序,看 ASP.NET Core Web API 是否能够在 Linux 的系统中与 Windows 下有着相同的用户体验。此时,在这个目录下运行 dotnet DockerWebAPI.dll 命令(要运行 dotnet 命令,就需要在 Ubuntu 中安装. NET Core CLI,也可以到下载安装,但对于本文的演练来说,这一步是不一定需要的),可以看到下面的界面:
使用 curl 命令测试一下:
测试成功。
接下来,在这个包含有 DockerWebAPI.dll 文件的目录下,新建一个 Dockerfile 文件,使用 vim 或者 nano 等文本编辑器,输入以下内容(# 开头的行为注释行,可以不输入):
- #基于microsoft / dotnet: latest构建Docker Image FROM microsoft / dotnet: latest#进入docker中的 / usr / local / src目录RUN cd / usr / local / src#创建DockerWebAPI目录RUN mkdir DockerWebAPI#设置工作路径WORKDIR / usr / local / src / DockerWebAPI#将当前文件夹下的所有文件全部复制到工作目录COPY * . * . / #向外界暴露5000端口EXPOSE 5000#执行dotnet DockerWebAPI.dll命令CMD["dotnet", "DockerWebAPI.dll"]
关于 Dockerfile 的定义,我们暂不讨论,请参考 Docker 的官方文档。
仍然在当前目录下,执行以下命令,创建 Docker Image:
- docker build - t daxnet / docker - webapi.
注意,千万别省略了最后一个点号,它表示采用当前路径的 Dockerfile 来生成 Docker Image。如果是第一次生成,由于需要下载 microsoft/dotnet:latest 这个 Docker Image 作为基础 Image,所以会比较慢(国内网速原因,你懂的)。如果成功的话,大致可以看到以下画面:
现在,我们就可以使用 docker run 来执行刚才产生的 Docker Image 了。docker run 会把 Docker Image 加载到 Docker Container 中,然后执行由 Dockerfile 指定的命令(也就是 dotnet DockerWebAPI.dll 命令)。docker run 的命令如下:
- docker run - it - p 8080 : 5000 daxnet / docker - webapi
在这条命令中:
运行后,可以看到如下界面:
让我们测试一下,在 Linux 中使用 curl 命令调用我们的服务,注意,与之前的测试相比,端口号需要由 5000 改为 8080:
当然,也可以在另一台机器的浏览器中调用:
事实上,这时返回的机器名,已经是 Docker 容器的 ID 值了:
本文通过快速地对各个步骤的描述,介绍了使用 Visual Studio 2015 创建 ASP.NET Core WebAPI 应用程序,并在 Docker 中运行该应用程序的方法。有些地方可能描述得不是很清楚,如有疑问欢迎留言讨论。今后争取能够更多地分享 Visual Studio 2015、Docker、.NET Core 等相关的实践经验。
来源: http://www.cnblogs.com/daxnet/p/5782019.html