在Mac的Docker中运行DotNetCore2.0
最近学习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文件编译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相关推荐
- 在Docker中运行EOS(MAC版)
在Docker中运行EOS(MAC版) 在Docker中也可以简单快速的构建EOS.IO.笔者在Mac平台下参考官方文档躺了一次河.记录如下: 安装依赖 Docker 版本 17.05或者更高 tes ...
- docker保护python源码_Tensorflow在Docker中运行和源码编译
本文分享在在Docker中运行Tensorflow和进行源码编译的方法和步骤,包括:编译.构建docker镜像.创建和运行Docker容器.部署完的容器可以通过Jupyter Notebook进行访问 ...
- ASP.NET Core 网站在Docker中运行
Docker作为新一代的虚拟化方式,未来肯定会得到广泛的应用,传统虚拟机的部署方式要保证开发环境.测试环境.UAT环境.生产环境的依赖一致性,需要大量的运维人力,使用Docker我们可以实现一次部署, ...
- 在docker中运行ASP.NET Core Web API应用程序
本文是一篇指导快速演练的文章,将介绍在docker中运行一个ASP.NET Core Web API应用程序的基本步骤,在介绍的过程中,也会对docker的使用进行一些简单的描述.对于.NET Cor ...
- 在Docker中运行ASP.NET Web API解决方案
目录 介绍 先决条件 如何容器化现有项目 添加docker-compose项目 带有docker-compose的容器化解决方案 添加环境变量 后端 前端 不使用Visual Studio运行您的应用 ...
- zkeacms mysql_在Docker中运行纸壳CMS并配置使用MySql
纸壳CMS是基于ASP .Net Core开发的可视化内容管理系统,可以跨平台部署,可以在容器中运行.接下来看看如何在docker中运行纸壳CMS. 方式一 直接运行以下命令即可在docker中运行纸 ...
- k3d入门指南:在Docker中运行K3s
在本文中,我们将简单了解k3d,这是一款可让您在安装了Docker的任何地方运行一次性Kubernetes集群的工具,此外在本文中我们还将探讨在使用k3d中可能会出现的一切问题. 什么是k3d? k3 ...
- docker中运行bash: mongo: command not found报错问题处理(直接使用mongosh)
问题描述: docker中运行bash: mongo: command not found报错问题处理 原因: mongo命令在mongodb 6.0已经不适用了 解决方案: 直接使用mongosh
- 斐讯N1-小钢炮Docker中运行SpringBoot应用
斐讯N1-小钢炮Docker中运行SpringBoot应用 介绍 硬件:斐讯N1 系统:小钢炮(Linux) 容器:Docker 依赖环境:JDK.MySQL 目标:运行springboot web应 ...
最新文章
- 分布式缓存的选择及问题
- 2021年春季学期-信号与系统-第二次作业参考答案
- php rdkafka实例,kafka 消息队列 php-rdkafka扩展示例
- 打开vs2010,提示无效的许可证数据,需要重新安装
- 总结verilog产生随机数的$random和seed
- ajax 获取openid,纯前端获取当前用户的openid(微信小程序)
- 计算机科学与技术专业可以转哪些专业,计算机科学与技术学院本科生转专业实施细则...
- python自学行吗-有编程基础Python自学行吗?
- iOS-代码实现TableViewCell创建多个样式的Cell
- c语言程序设计 考试报名管理系统,C语言程序设计考试题库
- 尚硅谷html+css小米官网
- 华为太极magisk安装教程_Magisk 需要修复运行环境,缺失Magisk正常工作所需的文件...
- 查看与设置华为路由器的版本信息,名称、时钟、登录提示
- 第四章 软件总体设计
- lateral view 和 lateral view outer的区别
- 误删了efi分区,怎么样恢复,使电脑开机回到windows
- 独家 | 新手指南:大数据、区块链及其结合(附应用场景)
- controller 之@...
- 主机上没有虚拟机网络适配器VMnet8解决办法
- Java clk啥意思_clock (CLK)是什么意思