.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 然后就是业务代码的编辑,增删改查乱七八 ...
随机推荐
- 初学者手册-IDEA常用快捷键
一.快速创建基于某个接口的类(引入相关包) 左键选择接口名称,使用快捷键Alt+enter,然后实现该类 二.打开选中的文件所在的文件夹 点选需要打开的文件,右键菜单,点击“Show in Explo ...
- PHP ! 非运算符 与 if 判断深入研究
!非 !x 如果x不为true则返回true. 我们经常用!进行一些判断. 看实例,我们发现经过'非'处理之后,都转化成了bool值.用于if判断很有用. var_dump(!0); // bool( ...
- call()和apply()的认知
apply:方法能劫持另外一个对象的方法,继承另外一个对象的属性. Function.apply(obj,args)方法能接收两个参数 obj:这个对象将代替Function类里this对象 arg ...
- Dev DateEdit控件格式设置
设置日期显示格式: 设置三个属性(显示时.编辑时) dtPubDate.Properties.DisplayFormat.FormatString = "yyyy-MM-dd"; ...
- 数据分析工具pandas简介
什么是Pandas? Pandas的名称来自于面板数据(panel data)和Python数据分析(data analysis). Pandas是一个强大的分析结构化数据的工具集,基于NumPy构建 ...
- Command对象
- 15 更多jQuery知识
jqueryUI 官网: https://jqueryui.com/ jqueryUI 中文网: http://www.jqueryui.org.cn/ jquery插件内容包含 官网demo: ht ...
- 如何将serialport接收的字符串转换成十六进制数c#
关注 baihe_591 baihe_591 本版等级: #1 得分:0回复于: 2008-06-02 09:44:00 Byte[] byte=new Byte[1];byte=0xf1;por ...
- leetcode796
public class Solution { public bool RotateString(string A, string B) { string temp = A; int len = A. ...
- centos 中没有 ifcfg-eth0 配置文件的解决办法
用 CentOS-6.5-i386-LiveDVD.iso 镜像安装好CentOS 6.5系统后(已经把系统写入硬盘),发现ip在每次重启后都会还原,用ifconfig查看是有eth0网卡的(也有可能 ...