在Mac的Docker中运行DotNetCore2.0
最近学习Angular4
,服务端准备使用DotNetCore API
来实现,本文简单介绍下在Mac
中怎样将DotNetCore
程序部署在Docker
中,并使用Nginx
做反向代理让程序可以跑起来。
具体步骤如下
- 安装
Docker
- 拉取
DotNetCore
镜像 - 使用
VS For Mac
创建DotNetCore
应用 - 发布应用到
Docker
- 安装
Nginx
- 配置
Nginx
代理Docker
中的DotNetCore
应用
常用命令
1 | docker pull 镜像名称 #拉取镜像 |
Mac中安装Docker
在下面链接中下载Mac
版的Docker
安装文件进行Docker
的安装
https://docs.docker.com/docker-for-mac/install/
安装成功后,在系统的顶栏中可以看到下图代表安装成功:
在终端中执行docker --version
查看下Doker
的版本
1 | fengwei@localhost:~$ docker --version |
在Docker中拉取NetCore镜像
直接执行下面命令,拉取最新版本的microsoft/dotnet
镜像
1 | docker pull microsoft/dotnet:latest |
启动一个容器实例
1 | docker run -itd -p 5000:5000 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
,执行下面命令进入到容器中:
1 | docker attach 3be4cfc30126 |
进入到home
目录后,使用mkdir s2app
命令创建s2app
目录,如下图:
执行exit
,退出容器回到宿主环境,进入到S2AppAdmin
项目的目录中,执行下面命令将publish
的文件复制到容器中
1 | 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")
,如下图:
在项目目录下执行下面命令:
1 | dotnet publish |
在容器内执行:
1 | dotnet S2APPAdmin.dll |
再在浏览器中访问http://localhost:5000/api/values/get
,发现结果已经可以正常显示了。
Nginx安装
使用brew
来安装Nginx
,至于什么是brew
,自行去Google
。下面先看几个brew
的常用命令
1 | brew search nginx #brew 搜索软件 |
安装成功后,输入nginx -v
,可以看到nginx
的版本信息
在/usr/local/etc/nginx
目录中找到并打开nginx.conf
文件,添加如下代码:
1 | server { |
如下图:
正常情况下,在浏览器中输入http://localhost:8000/api/values/get
,可以看到API
的输出结果。
常见问题
问题:nginx-1.8.0 already installed, it’s just not linked
1 | 解决:执行命令:brew link nginx |
问题:出现如下错误信息:
1 | Error: The `brew link` step did not complete successfully |
1 | 解决: /usr/local/share/man/man8 设置权限 |