最近学习Angular4,服务端准备使用DotNetCore API来实现,本文简单介绍下在Mac中怎样将DotNetCore程序部署在Docker中,并使用Nginx做反向代理让程序可以跑起来。
具体步骤如下
安装
Docker拉取
DotNetCore镜像使用
VS For Mac创建DotNetCore应用发布应用到
Docker安装
Nginx配置
Nginx代理Docker中的DotNetCore应用
常用命令
Mac中安装Docker
在下面链接中下载Mac版的Docker安装文件进行Docker的安装
https://docs.docker.com/docker-for-mac/install/
安装成功后,在系统的顶栏中可以看到下图代表安装成功:

在终端中执行docker --version 查看下Doker的版本
在Docker中拉取NetCore镜像
直接执行下面命令,拉取最新版本的microsoft/dotnet镜像
启动一个容器实例
因为DotNetCore的默认端口监听为5000,所以将容器的5000端口映射到宿主机到5000端口。启动成功后执行docker ps -a ,如一切顺利,可以看到如下图所示:

主要关注STATUS,状态为up表示是正常启动,否则通过docker logs -f 容器id来查看相关日志,通常可以看到容器没有启动成功的错误日志,然后Google之。
创建DotNetCore应用
在创建应用之前先将VS For Mac升级到最新版本,因为稍微老一点的版本不支持NetCore 2.0,即便是安装了最新的dotnet-sdk-2.0.0,最后发布的程序运行在Docker中时会遇到各种问题。所以为了避免麻烦,先升级VS。
在VS中创建新项目,选择API项目:

我的API项目的名称为S2AppAdmin,在终端中进入到项目的目录中,执行dotnet publish,如下图:

在终端中进入到publish目录中,执行dotnet S2AppAdmin.dll,如下图:

可以看出已经监听了5000端,现在在浏览器中输入http://localhost:5000/api/values/get,可以看到API接口的返回值已经在界面显示了。

发布应用到Docker
在网上找了很多资料,都是使用Dockerfile来发布应用到Docker中,用此方法试过很多次,但没有运行成功,后面找到原因再单独开篇来介绍,下面介绍另一种方法。
前面已经使用docker run 命令运行起一个Docker实例来,容器id为:3be4cfc30126,执行下面命令进入到容器中:
进入到home目录后,使用mkdir s2app命令创建s2app目录,如下图:

执行exit,退出容器回到宿主环境,进入到S2AppAdmin项目的目录中,执行下面命令将publish的文件复制到容器中
注意:上面的hardcore_leavitt为容器的名称。
再次执行docker attach 3be4cfc30126进入容器,在publish目录中执行dotnet S2AppAdmin.dll,如下图:

这时在宿主环境中访问http://localhost:5000/api/values/get,发现无法访问,说明容器和宿主没有打通。
在VS中打开Program.cs文件,添加.UseUrls("http://*:5000"),如下图:

在项目目录下执行下面命令:
在容器内执行:
再在浏览器中访问http://localhost:5000/api/values/get,发现结果已经可以正常显示了。
Nginx安装
使用brew来安装Nginx,至于什么是brew,自行去Google。下面先看几个brew的常用命令
安装成功后,输入nginx -v,可以看到nginx的版本信息
在/usr/local/etc/nginx目录中找到并打开nginx.conf文件,添加如下代码:
如下图:

正常情况下,在浏览器中输入http://localhost:8000/api/values/get,可以看到API的输出结果。
常见问题
问题:nginx-1.8.0 already installed, it’s just not linked
问题:出现如下错误信息:
相关文章:
.NET Core 2.0 正式发布信息汇总
.NET Standard 2.0 特性介绍和使用指南
.NET Core 2.0 的dll实时更新、https、依赖包变更问题及解决
.NET Core 2.0 特性介绍和使用指南
Entity Framework Core 2.0 新特性
体验 PHP under .NET Core
.NET Core 2.0使用NLog
升级项目到.NET Core 2.0,在Linux上安装Docker,并成功部署
解决Visual Studio For Mac Restore失败的问题
ASP.NET Core 2.0 特性介绍和使用指南
.Net Core下通过Proxy 模式 使用 WCF
.NET Core 2.0 开源Office组件 NPOI
ASP.NET Core - Razor页面之Handlers处理方法
ASP.NET Core Razor页面 vs MVC
Razor Page–Asp.Net Core 2.0新功能 Razor Page介绍
ASP.Net Core 2.0中的Razor Page不是WebForm
Error Handling in ASP.NET Core
ASP.NET Core Razor 视图组件
原文地址:http://fwhyy.com/2017/09/run-netcore-two-in-mac-docker/
.NET社区新闻,深度好文,微信中搜索dotNET跨平台或扫描二维码关注
