在Mac的Docker中运行DotNetCore2.0

最近学习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跨平台或扫描二维码关注

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/323648.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

POJ2482-Stars in Your Window【线段树,扫描线,离散化】

正题 题目链接:http://poj.org/problem?id2482 题目大意 有若干个点,每个点有不同的权值,求用一个h*w的矩阵扩起来的权值最大。 解题思路 先离散化一个坐标,然后另一个坐标就在x∼xw−1x∼xw−1这个区域加上权值,然后每个点的…

20个高级Java面试题汇总

转载自 20个高级Java面试题汇总 译文链接:http://www.codeceo.com/article/20-java-advanced-interview-questions.html 英文原文:Advanced Java Interview Questions 翻译作者:码农网 – 小峰 这是一个高级Java面试系列题中的部分。这一部分…

springboot实现复杂业务下的更新操作

大家好,我是雄雄,欢迎关注微信公众号:雄雄的小课堂 前言 现在是2022年5月4日19:25:55!今天写了个这样的功能: 某用户在一天内有多个训练项目,比如:晨跑,有氧训练,跳绳这…

HDOJ5542-The Battle of Chibi【树状数组,dp】

正题 题目链接:http://acm.hdu.edu.cn/showproblem.php?pid5542 题目大意 求序列A有多少个长度为M的递增子序列。 解题思路 用fi,jfi,j表示长度为i,以AjAj结尾的序列的个数。然后显然得出动态转移方程通过上一次从任意一个地方转移,动态转移方程&…

ASP.NET Core中为指定类添加WebApi服务功能

POCO Controller是 ASP.NET Core 中的一个特性,虽然在2015年刚发布的时候就有这个特性了,可是大多数开发者都只是按原有的方式去写,而没有用到这个特性。其实,如果利用这个特性进行稍微封装后,用在SOA架构中Service层的…

elementui解决el-dialog不清空内容的问题,el-dialog关闭时销毁子组件

大家好,我是雄雄,欢迎关注微信公众号:雄雄的小课堂 前言 现在是2022年5月5日22:48:21! 今天在使用element-ui中的el-dialog的时候遇到了个这样的问题:页面上点击添加的按钮,弹出el-dialog对话框&#xff…

MySQL 中的重做日志,回滚日志以及二进制日志的简单总结

转载自 MySQL 中的重做日志,回滚日志以及二进制日志的简单总结 MySQL中有六种日志文件,分别是:重做日志(redo log)、回滚日志(undo log)、二进制日志(binlog)、错误日志…

c语言分离三位数

#include<stdio.h> main(){ int k,l,m,n;printf("请输入一个三位数"); scanf("%d",&k);lk/100;mk/10%10;nk%10;printf("这个三位数的百位是:%d\n",l);printf("这个三位数的十位是:%d\n",m);printf("这个三位数的个位是…

POJ1821-Fence【单调队列,dp】

正题 题目链接:http://poj.org/problem?id1821 题目大意 有n个木板,m个工人&#xff0c;每个木板只能被粉刷一次&#xff0c;第i个工人如果刷的话必须刷木板SiSi&#xff0c;连续的不超过LiLi的&#xff0c;没一块PiPi。 解题思路 用fi,jfi,j表示前j块木板&#xff0c;前i个…

分布式ID自增算法 Snowflake

近在尝试EF的多数据库移植&#xff0c;但是原始项目中主键用的Sqlserver的GUID。MySQL没法移植了。 其实发现GUID也没法保证数据的递增性&#xff0c;又不太想使用int递增主键&#xff0c;就开始探索别的ID形式。 后来发现twitter的Snowflake算法。 一开始我尝试过直接引用N…

java中,根据指定日期显示出前n天的日期

大家好&#xff0c;我是雄雄&#xff0c;欢迎关注微信公众号&#xff1a;雄雄的小课堂 今天分享的是&#xff1a;在java中&#xff0c;根据指定日期显示出前n天的日期 效果如下&#xff1a; 大家注意观察上面的时间&#xff0c;我传入的时间是&#xff1a;2022年5月9日21:28:…

你真的很熟分布式和事务吗?

转载自 你真的很熟分布式和事务吗&#xff1f; 微吐槽 hello,world. 不想了&#xff0c;我等码农&#xff0c;还是看看怎么来处理分布式系统中的事务这个老大难吧&#xff01; 本文略长&#xff0c;读者需要有一定耐心&#xff0c;如果你是高级码农或者架构师级别&#xf…

线程1

模拟龟兔赛跑 线程1 package test;/*** 模拟龟兔赛跑* author Administrator**/ class Rab extends Thread{public void run() {for (int i 0; i < 100; i) {System.out.println("兔子跑了"i"步");}} }class array1 extends Thread{public void run(…

jdbc实现批量给多个表中更新数据(解析Excel表数据插入到数据库中)

大家好&#xff0c;我是雄雄&#xff0c;欢迎关注微信公众号&#xff1a;雄雄的小课堂 前言 现在是&#xff1a;2022年5月19日08:01:51 今天遇到了个这样的需求&#xff0c;解析excel表中的数据&#xff0c;以JDBC的方式&#xff0c;将数据批量更新至不同的数据表中。注意&am…

CF559C-Gerald and Giant Chess【计数类dp】

正题 上不了Codeforces&#xff0c;就用洛谷了 评测记录:https://www.luogu.org/recordnew/lists?uid52918&pidCF559C 题目大意 H∗WH∗W的棋盘上有一个卒从(1,1)走到(H,W)&#xff0c;有些点不能走&#xff0c;求方案总数。 解题思路 首先如果没有障碍走到(i,j)方案数…

.Net Core 全局配置读取管理方法 ConfigurationManager

最近在学习.Net Core的过程中&#xff0c;发现.Net Framework中常用的ConfigurationManager在Core中竟然被干掉了。 也能理解。Core中使用的配置文件全是Json&#xff0c;不像Framework使用的XML&#xff0c;暂时不支持也是能理解的&#xff0c;但是毕竟全局配置文件这种东西还…

Http 持久连接与 HttpClient 连接池

转载自 Http 持久连接与 HttpClient 连接池 一、背景 HTTP协议是无状态的协议&#xff0c;即每一次请求都是互相独立的。因此它的最初实现是&#xff0c;每一个http请求都会打开一个tcp socket连接&#xff0c;当交互完毕后会关闭这个连接。 HTTP协议是全双工的协议&#x…

jdbc解析excel文件,批量插入数据至库中

“大家好&#xff0c;我是雄雄&#xff0c;欢迎关注微信公众号&#xff1a;雄雄的小课堂”前言现在是&#xff1a;2022年5月20日09:32:38今天遇到了个这样的需求&#xff0c;解析excel表中的数据&#xff0c;以JDBC的方式&#xff0c;将数据批量更新至不同的数据表中。注意&…

线程2

public class test{/*** 测试延迟继承* param args*/public static void main(String[] args) {Cat catnew Cat();cat.start();//启动线程&#xff0c;会导致run函数的运行Dog dognew Dog();//创建一个线程对象Thread tnew Thread(dog);t.start();}} //继承Thread创建线程 clas…

.NET及.NET Core系统架构

.NET 官方架构指南 Microservices and Docker Containers Web Applications with ASP.NET 官网地址&#xff1a;https://www.microsoft.com/net/learn/architecture 三层及多层架构 Multitier Architecture ASP.NET N-Tier Architecture Schema Visual Studio N-Tier Examp…