前一段时间由于项目需要 .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 部署方案(随笔)的更多相关文章

  1. ASP.NET Core开发-Docker部署运行

    ASP.NET Core开发Docker部署,.NET Core支持Docker 部署运行.我们将ASP.NET Core 部署在Docker 上运行. 大家可能都见识过Docker ,今天我们就详细 ...

  2. ASP.NET Core开发Docker部署

    ASP.NET Core开发Docker部署,.NET Core支持Docker 部署运行.我们将ASP.NET Core 部署在Docker 上运行. 大家可能都见识过Docker ,今天我们就详细 ...

  3. 记录.NET Core通过Docker部署到Linux

    1.现在CentOS安装Docker环境(参考地址:https://docs.docker-cn.com/engine/installation/linux/docker-ce/centos/) 我这 ...

  4. OpenStack Mitaka HA部署方案(随笔)

    [Toc] https://github.com/wanstack/AutoMitaka # 亲情奉献安装openstack HA脚本 使用python + shell,完成了基本的核心功能(纯二层的 ...

  5. Asp.Net Core 程序部署到Linux(centos)生产环境(二):docker部署

    运行环境 照例,先亮环境:软件的话我这里假设你已经批准好了.net core 运行环境,未配置可以看我的这篇[linux(centos)搭建.net core 运行环境] 腾讯云 centos:7.2 ...

  6. Asp.Net Core 使用Docker进行容器化部署(一)

    前几篇文章介绍了Liunx下的环境搭建,今天来分享一下.Net Core在Liunx上的部署. 我采用的方案是使用Dokcer作为运行虚拟机,Nginx作为Http服务器来进行反向代理,你可以理解为D ...

  7. NET Core Docker部署

    NET Core Docker部署 前言 在前面文章中,介绍了 ASP.NET Core在 macOS,Linux 上基于Nginx和Jexus的发布和部署,本篇文章主要是如何在Docker容器中运行 ...

  8. 基于VS2017的Docker Support体检ASP.NET Core站点的Docker部署

    最近在学习如何用 Docker 部署生产环境中的 ASP.NET Core 站点,作为一个 Docer 新手,从何处下手更容易入门呢?一开始就手写 Docker 配置文件(Docfile, docke ...

  9. Docker 部署Dotnet Core MVC项目

    原文:Docker 部署Dotnet Core MVC项目 1.dotnet core创建项目 dotnet new mvc -o myweb cd myweb 然后就是业务代码的编辑,增删改查乱七八 ...

随机推荐

  1. 【转】使用ant来调用Jmeter,并定制运行时参数

    为了应对不同的运行需求(主要是不同的线程数),以及可能的变化(host ip),在nongui运行时我对ant build.xml进行了一些修改 1. log目录备份与运行前清除 <tstamp ...

  2. python学习(八) 异常

    8.1 什么是异常 8.2 按自己的方式出错 如何引发异常,以及创建自己的异常类型. 8.2.1 raise语句 >>> raise Exception Traceback (mos ...

  3. Python函数的初识

    一   什么是函数 定义: 定义一个事情或者功能,等到需要用的时候直接用就可以了,那么这个定义的就是一个函数 函数  :  对代码块和功能的封装和定义 函数定义的格式:     def   函数名() ...

  4. 微信小程序中的倒计时

    这是我项目中的例子,如果有更好的建议欢迎留言 ,一起学习 //获取时间 var sekillStartTime = resultLis[0].planGroup0.sekillStartTime;// ...

  5. sublime添加右键菜单

    参考:https://www.zhihu.com/question/29662273/answer/45277925 @echo Off :START CLS echo *============== ...

  6. Spark,一种快速数据分析替代方案

    原文出处:http://www.ibm.com/developerworks/library/os-spark/ Spark 是一种与 Hadoop 相似的开源集群计算环境,但是两者之间还存在一些不同 ...

  7. java Web servlet简介及其生命周期

    Servlet(Server Applet)是Java Servlet的简称,称为小服务程序或服务连接器,用Java编写的服务器端程序,主要功能在于交互式地浏览和修改数据,生成动态Web内容. 我们可 ...

  8. Bell数和Stirling数

    前面说到了Catalan数,现在来了一个Bell数和Stirling数.什么是Bell数,什么是Stirling数呢?两者的关系如何,有用于解决什么算法问题呢? Bell数是以Bell这个人命名的,组 ...

  9. laravel tinker测试模型添加属性

    php artisan tinker 新建一个模型对象 $post=new \App\Posts(); 给对象的属性挨个赋值 $post->title="this is title&q ...

  10. 17-取石子-hdu1846(巴什博奕)

    http://acm.hdu.edu.cn/showproblem.php?pid=1846 Brave Game Time Limit: 1000/1000 MS (Java/Others)     ...