最近学习Angular4
,服务端准备使用DotNetCore API
来实现,本文简单介绍下在Mac
中怎样将DotNetCore
程序部署在Docker
中,并使用Nginx
做反向代理让程序可以跑起来。
安装Docker
拉取DotNetCore
镜像
使用VS For Mac
创建DotNetCore
应用
发布应用到Docker
安装Nginx
配置Nginx
代理Docker
中的DotNetCore
应用
docker pull 镜像名称 #拉取镜像 docker rm -f 容器id #强制删除容器 docker rmi imageid #删除镜像 docker logs -f 容器ID #查看容器日志 docker ps -a #查看所有的容器 docker attach 容器id #进入到容器 docker build -t s2appadmin . #使用Dockerfile文件编译Docker dotnet publish #发布dotnetcore应用 dotnet run #启动dotnetcore应用 dotnet *.dll #在发布后的目录中执行dotnet 程序集的dll文件名,启动应用 nginx -v #查看nginx版本 nginx -s reload #重新加载nginx nginx -s stop #停止nginx |
在下面链接中下载Mac
版的Docker
安装文件进行Docker
的安装
https://docs.docker.com/docker-for-mac/install/
安装成功后,在系统的顶栏中可以看到下图代表安装成功:
在终端中执行docker --version
查看下Doker
的版本
fengwei@localhost:~$ docker --version Docker version 17.06.2-ce, build cec0b72 |
直接执行下面命令,拉取最新版本的microsoft/dotnet
镜像
docker pull microsoft/dotnet:latest |
启动一个容器实例
docker run -itd -p 5000:5000 microsoft/dotnet |
因为DotNetCore
的默认端口监听为5000
,所以将容器的5000
端口映射到宿主机到5000
端口。启动成功后执行docker ps -a
,如一切顺利,可以看到如下图所示:
主要关注STATUS
,状态为up表示是正常启动,否则通过docker logs -f 容器id
来查看相关日志,通常可以看到容器没有启动成功的错误日志,然后Google
之。
在创建应用之前先将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
接口的返回值已经在界面显示了。
在网上找了很多资料,都是使用Dockerfile
来发布应用到Docker
中,用此方法试过很多次,但没有运行成功,后面找到原因再单独开篇来介绍,下面介绍另一种方法。
前面已经使用docker run
命令运行起一个Docker
实例来,容器id为:3be4cfc30126
,执行下面命令进入到容器中:
docker attach 3be4cfc30126 |
进入到home
目录后,使用mkdir s2app
命令创建s2app
目录,如下图:
执行exit
,退出容器回到宿主环境,进入到S2AppAdmin
项目的目录中,执行下面命令将publish
的文件复制到容器中
docker cp bin/Debug/netcoreapp2.0/publish/ hardcore_leavitt:/home/s2app/ |
注意:上面的hardcore_leavitt
为容器的名称。
再次执行docker attach 3be4cfc30126
进入容器,在publish
目录中执行dotnet S2AppAdmin.dll
,如下图:
这时在宿主环境中访问http://localhost:5000/api/values/get
,发现无法访问,说明容器和宿主没有打通。
在VS中打开Program.cs
文件,添加.UseUrls("http://*:5000")
,如下图:
在项目目录下执行下面命令:
dotnet publish docker cp bin/Debug/netcoreapp2.0/publish/ hardcore_leavitt:/home/s2app/ |
在容器内执行:
dotnet S2APPAdmin.dll |
再在浏览器中访问http://localhost:5000/api/values/get
,发现结果已经可以正常显示了。
使用brew
来安装Nginx
,至于什么是brew
,自行去Google
。下面先看几个brew
的常用命令
brew search nginx #brew 搜索软件 brew install nginx #brew 安装软件 brew uninstall nginx #brew 卸载软件 sudo brew info nginx #查看安装信息 brew list #查看已经安装的软件 |
安装成功后,输入nginx -v
,可以看到nginx
的版本信息
在/usr/local/etc/nginx
目录中找到并打开nginx.conf
文件,添加如下代码:
server { listen 8000; #listen somename:8080; server_name localhost; location / { proxy_pass http://localhost:5000; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection keep-alive; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; } } |
如下图:
正常情况下,在浏览器中输入http://localhost:8000/api/values/get
,可以看到API
的输出结果。
问题:nginx-1.8.0 already installed, it’s just not linked
解决:执行命令:brew link nginx |
问题:出现如下错误信息:
Error: The `brew link` step did not complete successfully The formula built, but is not symlinked into /usr/local Could not symlink share/man/man8/nginx.8 /usr/local/share/man/man8 is not writable. |
解决: /usr/local/share/man/man8 设置权限 |
相关文章:
.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跨平台或扫描二维码关注