最近学习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文件编译Dockerdotnet publish #发布dotnetcore应用dotnet run #启动dotnetcore应用dotnet *.dll #在发布后的目录中执行dotnet 程序集的dll文件名,启动应用nginx -v #查看nginx版本nginx -s reload #重新加载nginxnginx -s stop #停止nginx

Mac中安装Docker

在下面链接中下载Mac版的Docker安装文件进行Docker的安装
https://docs.docker.com/docker-for-mac/install/

安装成功后,在系统的顶栏中可以看到下图代表安装成功:

在终端中执行docker --version 查看下Doker的版本

fengwei@localhost:~$ docker --versionDocker 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 publishdocker 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 successfullyThe formula built, but is not symlinked into /usr/localCould 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跨平台或扫描二维码关注

在Mac的Docker中运行DotNetCore2.0相关推荐

  1. 在Docker中运行EOS(MAC版)

    在Docker中运行EOS(MAC版) 在Docker中也可以简单快速的构建EOS.IO.笔者在Mac平台下参考官方文档躺了一次河.记录如下: 安装依赖 Docker 版本 17.05或者更高 tes ...

  2. docker保护python源码_Tensorflow在Docker中运行和源码编译

    本文分享在在Docker中运行Tensorflow和进行源码编译的方法和步骤,包括:编译.构建docker镜像.创建和运行Docker容器.部署完的容器可以通过Jupyter Notebook进行访问 ...

  3. ASP.NET Core 网站在Docker中运行

    Docker作为新一代的虚拟化方式,未来肯定会得到广泛的应用,传统虚拟机的部署方式要保证开发环境.测试环境.UAT环境.生产环境的依赖一致性,需要大量的运维人力,使用Docker我们可以实现一次部署, ...

  4. 在docker中运行ASP.NET Core Web API应用程序

    本文是一篇指导快速演练的文章,将介绍在docker中运行一个ASP.NET Core Web API应用程序的基本步骤,在介绍的过程中,也会对docker的使用进行一些简单的描述.对于.NET Cor ...

  5. 在Docker中运行ASP.NET Web API解决方案

    目录 介绍 先决条件 如何容器化现有项目 添加docker-compose项目 带有docker-compose的容器化解决方案 添加环境变量 后端 前端 不使用Visual Studio运行您的应用 ...

  6. zkeacms mysql_在Docker中运行纸壳CMS并配置使用MySql

    纸壳CMS是基于ASP .Net Core开发的可视化内容管理系统,可以跨平台部署,可以在容器中运行.接下来看看如何在docker中运行纸壳CMS. 方式一 直接运行以下命令即可在docker中运行纸 ...

  7. k3d入门指南:在Docker中运行K3s

    在本文中,我们将简单了解k3d,这是一款可让您在安装了Docker的任何地方运行一次性Kubernetes集群的工具,此外在本文中我们还将探讨在使用k3d中可能会出现的一切问题. 什么是k3d? k3 ...

  8. docker中运行bash: mongo: command not found报错问题处理(直接使用mongosh)

    问题描述: docker中运行bash: mongo: command not found报错问题处理 原因: mongo命令在mongodb 6.0已经不适用了 解决方案: 直接使用mongosh

  9. 斐讯N1-小钢炮Docker中运行SpringBoot应用

    斐讯N1-小钢炮Docker中运行SpringBoot应用 介绍 硬件:斐讯N1 系统:小钢炮(Linux) 容器:Docker 依赖环境:JDK.MySQL 目标:运行springboot web应 ...

最新文章

  1. 分布式缓存的选择及问题
  2. 2021年春季学期-信号与系统-第二次作业参考答案
  3. php rdkafka实例,kafka 消息队列 php-rdkafka扩展示例
  4. 打开vs2010,提示无效的许可证数据,需要重新安装
  5. 总结verilog产生随机数的$random和seed
  6. ajax 获取openid,纯前端获取当前用户的openid(微信小程序)
  7. 计算机科学与技术专业可以转哪些专业,计算机科学与技术学院本科生转专业实施细则...
  8. python自学行吗-有编程基础Python自学行吗?
  9. iOS-代码实现TableViewCell创建多个样式的Cell
  10. c语言程序设计 考试报名管理系统,C语言程序设计考试题库
  11. 尚硅谷html+css小米官网
  12. 华为太极magisk安装教程_Magisk 需要修复运行环境,缺失Magisk正常工作所需的文件...
  13. 查看与设置华为路由器的版本信息,名称、时钟、登录提示
  14. 第四章 软件总体设计
  15. lateral view 和 lateral view outer的区别
  16. 误删了efi分区,怎么样恢复,使电脑开机回到windows
  17. 独家 | 新手指南:大数据、区块链及其结合(附应用场景)
  18. controller 之@...
  19. 主机上没有虚拟机网络适配器VMnet8解决办法
  20. Java clk啥意思_clock (CLK)是什么意思

热门文章

  1. linux 安装apache http server
  2. python inspect模块解析
  3. C 语言中的内存分析
  4. Xcode中release和debug模式
  5. Android获取设备已安装的应用
  6. 由塔科马大桥事件 谈软件架构
  7. 更轻易地实现 Jwt Token
  8. iNeuOS工业互联网操作系统,提升分布式云端控制安全策略和增加实时日志功能...
  9. 面向.NET开发人员的Dapr——分布式世界
  10. Web API实现微信公众平台开发-接收数据Post