.net core in Docker 部署方案(随笔)
前一段时间由于项目需要 .net core 在docker下的部署,途中也遇到很多坑,看了各同行的博客觉得多多少少还是有些问题,原本不想写此篇文章,由于好友最近公司也需要部署,硬是要求,于是花了些时间写了下来,并实现docker制作镜像的过程中先编译.net core 项目包然后形成镜像。
(一) Docker for Windows10的安装
1. 在安装docker之前首先安装windows10组件Hyper-V,安装步骤如下:

2. 重启计算机按F2或F10进入Bios界面
依次选择Configuratio>Intel Virtual Technology > Enabled;
退出保存
3. 下载docker for windows10 并安装docker
安装成功后,运行cmd命令,按住win键+r,输入cmd运行
如下图表示docker安装成功

创建.net core api项目比如叫server1,创建时勾选如下图,也可以在现有项目中添加选择docker支持:

Startup.cs代码:
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
app.UseMvc();
}
}
Program.cs代码:
public class Program
{
public static void Main(string[] args)
{
var host = new WebHostBuilder()
.UseKestrel()
.UseUrls("http://*:5000")
.UseContentRoot(Directory.GetCurrentDirectory())
.UseIISIntegration()
.UseStartup<Startup>()
//.UseApplicationInsights()
.Build();
host.Run();
}
public static IWebHost BuildWebHost(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.Build();
}
添加ServerController 代码如下:
[Route("/")]
public class ServerController : Controller
{
[HttpGet]
public string Get()
{
return "我是应用服务1";
}
}
然后在项目目录下能发现文件Dockerfile
系统默认代码如下:
FROM microsoft/aspnetcore:2.0 AS base
WORKDIR /app
EXPOSE 80
FROM microsoft/aspnetcore-build:2.0 AS build
WORKDIR /src
COPY server1/ server1.csproj server1/
RUN dotnet restore server1/ server1.csproj
COPY . .
WORKDIR /src/ server1
RUN dotnet build server1.csproj -c Release -o /app
FROM build AS publish
RUN dotnet publish server1.csproj -c Release -o /app
FROM base AS final
WORKDIR /app
COPY --from=publish /app .
ENTRYPOINT ["dotnet", " server1.dll"]
以上默认代码有巨坑,之前运用网上dockerfile代码采用的是先手工编译到bin目录下,然后在bin目录直接做成镜像运行,不知什么原因一直浏览器无法访问,我在dockerfile里面配置成打包镜像时并且编译,成功运行,经过修改排查后改成如下:
# 声明使用的基础镜像
FROM microsoft/dotnet:2.0.7-sdk-2.1.200
# 将本地dotnet core 应用拷贝到 容器 src/ 目录下
COPY . src/
RUN dotnet publish src/Server1.csproj -c Release -o /coreImage
# 设置工作目录
WORKDIR /coreImage
# 设置导出端口
EXPOSE 5000/tcp
# 指定应用入口点
ENTRYPOINT dotnet Server1.dll
运行cmd命令,按住win键+r,输入cmd运行,
将当前目录切换到.csproj所在的项目目录
输入命令docker build -t myserver .,命令含义是将当前目录的core项目编译成名子为myserver镜像,注意myserver后面必须有个"."号,必须空一格。不然编译不过,编译成镜像成功后如图所示:

然后运行 docker run -it -p 6001:5000 myserver即可如图所示表示运行成功:

看到这句话并且之前没有错误信息,表示容器内镜像运行成功
输入网址:localhost:6001看到如下效果:

本文为原创,如需转载,请带上连接
.net core in Docker 部署方案(随笔)的更多相关文章
- ASP.NET Core开发-Docker部署运行
ASP.NET Core开发Docker部署,.NET Core支持Docker 部署运行.我们将ASP.NET Core 部署在Docker 上运行. 大家可能都见识过Docker ,今天我们就详细 ...
- ASP.NET Core开发Docker部署
ASP.NET Core开发Docker部署,.NET Core支持Docker 部署运行.我们将ASP.NET Core 部署在Docker 上运行. 大家可能都见识过Docker ,今天我们就详细 ...
- 记录.NET Core通过Docker部署到Linux
1.现在CentOS安装Docker环境(参考地址:https://docs.docker-cn.com/engine/installation/linux/docker-ce/centos/) 我这 ...
- OpenStack Mitaka HA部署方案(随笔)
[Toc] https://github.com/wanstack/AutoMitaka # 亲情奉献安装openstack HA脚本 使用python + shell,完成了基本的核心功能(纯二层的 ...
- Asp.Net Core 程序部署到Linux(centos)生产环境(二):docker部署
运行环境 照例,先亮环境:软件的话我这里假设你已经批准好了.net core 运行环境,未配置可以看我的这篇[linux(centos)搭建.net core 运行环境] 腾讯云 centos:7.2 ...
- Asp.Net Core 使用Docker进行容器化部署(一)
前几篇文章介绍了Liunx下的环境搭建,今天来分享一下.Net Core在Liunx上的部署. 我采用的方案是使用Dokcer作为运行虚拟机,Nginx作为Http服务器来进行反向代理,你可以理解为D ...
- NET Core Docker部署
NET Core Docker部署 前言 在前面文章中,介绍了 ASP.NET Core在 macOS,Linux 上基于Nginx和Jexus的发布和部署,本篇文章主要是如何在Docker容器中运行 ...
- 基于VS2017的Docker Support体检ASP.NET Core站点的Docker部署
最近在学习如何用 Docker 部署生产环境中的 ASP.NET Core 站点,作为一个 Docer 新手,从何处下手更容易入门呢?一开始就手写 Docker 配置文件(Docfile, docke ...
- Docker 部署Dotnet Core MVC项目
原文:Docker 部署Dotnet Core MVC项目 1.dotnet core创建项目 dotnet new mvc -o myweb cd myweb 然后就是业务代码的编辑,增删改查乱七八 ...
随机推荐
- 【转】使用ant来调用Jmeter,并定制运行时参数
为了应对不同的运行需求(主要是不同的线程数),以及可能的变化(host ip),在nongui运行时我对ant build.xml进行了一些修改 1. log目录备份与运行前清除 <tstamp ...
- python学习(八) 异常
8.1 什么是异常 8.2 按自己的方式出错 如何引发异常,以及创建自己的异常类型. 8.2.1 raise语句 >>> raise Exception Traceback (mos ...
- Python函数的初识
一 什么是函数 定义: 定义一个事情或者功能,等到需要用的时候直接用就可以了,那么这个定义的就是一个函数 函数 : 对代码块和功能的封装和定义 函数定义的格式: def 函数名() ...
- 微信小程序中的倒计时
这是我项目中的例子,如果有更好的建议欢迎留言 ,一起学习 //获取时间 var sekillStartTime = resultLis[0].planGroup0.sekillStartTime;// ...
- sublime添加右键菜单
参考:https://www.zhihu.com/question/29662273/answer/45277925 @echo Off :START CLS echo *============== ...
- Spark,一种快速数据分析替代方案
原文出处:http://www.ibm.com/developerworks/library/os-spark/ Spark 是一种与 Hadoop 相似的开源集群计算环境,但是两者之间还存在一些不同 ...
- java Web servlet简介及其生命周期
Servlet(Server Applet)是Java Servlet的简称,称为小服务程序或服务连接器,用Java编写的服务器端程序,主要功能在于交互式地浏览和修改数据,生成动态Web内容. 我们可 ...
- Bell数和Stirling数
前面说到了Catalan数,现在来了一个Bell数和Stirling数.什么是Bell数,什么是Stirling数呢?两者的关系如何,有用于解决什么算法问题呢? Bell数是以Bell这个人命名的,组 ...
- laravel tinker测试模型添加属性
php artisan tinker 新建一个模型对象 $post=new \App\Posts(); 给对象的属性挨个赋值 $post->title="this is title&q ...
- 17-取石子-hdu1846(巴什博奕)
http://acm.hdu.edu.cn/showproblem.php?pid=1846 Brave Game Time Limit: 1000/1000 MS (Java/Others) ...