在Mac的Docker中运行DotNetCore2.0

来源:互联网 发布:蚌埠九天网络分数查询 编辑:程序博客网 时间:2024/06/16 17:29

最近学习Angular4,服务端准备使用DotNetCore API来实现,本文简单介绍下在Mac中怎样将DotNetCore程序部署在Docker中,并使用Nginx做反向代理让程序可以跑起来。

具体步骤如下

  1. 安装Docker

  2. 拉取DotNetCore镜像

  3. 使用VS For Mac创建DotNetCore应用

  4. 发布应用到Docker

  5. 安装Nginx

  6. 配置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

在下面链接中下载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


在Docker中拉取NetCore镜像

直接执行下面命令,拉取最新版本的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之。

创建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,执行下面命令进入到容器中:


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,发现结果已经可以正常显示了。

Nginx安装

使用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跨平台或扫描二维码关注