.NET core for docker
本文描述下 .net core 在 docker 里面的玩法
首先按照官方文档先 拉取镜像
docker pull microsoft/dotnet:latest
然后就有了 dotnet 这个运行时了,这里以一个 web 项目举例子 先创建一个 web 类型的 project
dotnet new -t web
如果本地没有 dotnet 运行时可以docker run 一个
docker run --rm -it -v /home/hello_dotnet/:/home/hello_dotnet/ microsoft/dotnet:latest
上面这个命令的意思是 让 docker 运行(docker run)一个dotnet:latest的镜像(microsoft/dotnet:latest) 并且把本地的/home/hello_dotnet卷路径挂载到容器的/home/hello_dotnet 下面(-v /home/hello_dotnet/:/home/hello_dotnet/)然后提供交互式模式能够输入输出(-it)退出之后自动删除容器(--rm)
然后进入容器生成类似这样
[root@--- home]# docker run --rm -it -v /home/hello_dotnet/:/home/hello_dotnet/ microsoft/dotnet:latest root@193fb1cf32a6:/# cd /home/hello_dotnet/ root@193fb1cf32a6:/home/hello_dotnet# dotnet new -t web Created new C# project in /home/hello_dotnet. root@193fb1cf32a6:/home/hello_dotnet# ls Controllers Data Models Program.cs README.md Services Startup.cs Views appsettings.json bower.json gulpfile.js package.json project.json web.config wwwroot root@193fb1cf32a6:/home/hello_dotnet#
然后更新下包依赖
dotnet restore
直接运行
dotnet run
修改一下默认的监听端口默认是 localhost:5000 不好做代理,把它修改成 0.0.0.0
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Hosting;
namespace WebApplication
{
public class Program
{
public static void Main(string[] args)
{
var host = new WebHostBuilder()
.UseUrls("http://0.0.0.0:5000") //添加这一行
.UseKestrel()
.UseContentRoot(Directory.GetCurrentDirectory())
.UseIISIntegration()
.UseStartup<Startup>()
.Build();
host.Run();
}
}
}
ok 没啥问题 publish 一下
root@193fb1cf32a6:/home/hello_dotnet# dotnet publish Publishing hello_dotnet for .NETCoreApp,Version=v1. No executable found matching command "npm"
额,并不能够 publish 提示找不到 npm, npm 这个不是 node 的包依赖工具么。。 经过查看发现这个生成的 web 依赖了 gulp 所以很蛋疼 默认的容器只有运行时环境(可能主要是为了精简镜像)需要自己在安装 node
这里可以在容器里面把 node 装好或者去其他机器上 publish
apt-get update & apt-get install npm
并且安装完 npm 还不够 还需要 安装 bower gulp
No executable found matching command "bower"
No executable found matching command "gulp"
npm install bower -g
npm install gulp -g
ok 结束了...
Project hello_dotnet (.NETCoreApp,Version=v1.0) was previously compiled. Skipping compilation.
Configuring the following project for use with IIS: '/home/hello_dotnet/bin/Debug/netcoreapp1.0/publish'
Updating web.config at '/home/hello_dotnet/bin/Debug/netcoreapp1.0/publish/web.config'
Configuring project completed successfully
publish: Published to /home/hello_dotnet/bin/Debug/netcoreapp1.0/publish
Published 1/1 projects successfully
退出容器回到服务器上
root@193fb1cf32a6:/home/hello_dotnet/bin/Debug/netcoreapp1.# exit exit [root@--- home]# ls data docker-compose hello_dotnet java xiaoming xiaoqiu [root@--- home]# cd hello_dotnet/ [root@--- hello_dotnet]# ls appsettings.json bin bower.json Controllers Data gulpfile.js Models node_modules obj package.json Program.cs project.json project.lock.json README.md Services Startup.cs Views web.config wwwroot
代码都已经创建好了,现在只要找个运行时 dotnet hello_dotnet.dll 就可以启动 web 了
打包一个镜像 写个 dockerfile 就好
先新建个工作目录整理下结构
[root@--- dotnet]# tree -L
.
├── Dockerfile
└── hello_dotnet
├── appsettings.json
├── bin
├── bower.json
├── Controllers
├── Data
├── gulpfile.js
├── Models
├── node_modules
├── obj
├── package.json
├── Program.cs
├── project.json
├── project.lock.json
├── README.md
├── Services
├── Startup.cs
├── Views
├── web.config
└── wwwroot
[root@--- dotnet]# docker build -t "hello_dotnet:1.0" ./
[root@--- dotnet]# docker build -t "hello_dotnet:1.0" ./
Sending build context to Docker daemon 53.04 MB
Step : FROM microsoft/dotnet:latest
---> 4028809f66a4
Step : COPY hello_dotnet /home/www
---> 600558b4e65d
Removing intermediate container 0c05fc314674
Step : WORKDIR /home/www
---> Running in b5b029517595
---> c9f05e277de9
Removing intermediate container b5b029517595
Step : EXPOSE
---> Running in 2a00bea9393c
---> b921fe0482f0
Removing intermediate container 2a00bea9393c
Step : CMD dotnet hello_dotnet.dll
---> Running in f770b366be81
---> 11027359f344
Removing intermediate container f770b366be81
Successfully built 11027359f344
运行
[root@--- dotnet]# docker run --rm -it -p : hello_dotnet:1.0
info: Microsoft.Extensions.DependencyInjection.DataProtectionServices[]
User profile is available. Using '/root/.aspnet/DataProtection-Keys' as key repository; keys will not be encrypted at rest.
Hosting environment: Production
Content root path: /home/www
Now listening on: http://0.0.0.0:5000
Application started. Press Ctrl+C to shut down.
浏览器访问 http://172.16.0.20:8888
ok 一切正常

当然也可以用守护进程的模式运行
docker run -d -p : hello_dotnet:1.0
参考文档
[0] https://dotnet.github.io
[1] https://docs.docker.com/engine/reference/builder
[2] http://stackoverflow.com/questions/34212765/how-do-i-get-the-kestrel-web-server-to-listen-to-non-localhost-requests
.NET core for docker的更多相关文章
- ASP.NET Core开发-Docker部署运行
ASP.NET Core开发Docker部署,.NET Core支持Docker 部署运行.我们将ASP.NET Core 部署在Docker 上运行. 大家可能都见识过Docker ,今天我们就详细 ...
- 基于Microsoft Azure、ASP.NET Core和Docker的博客系统
欢迎阅读daxnet的新博客:一个基于Microsoft Azure.ASP.NET Core和Docker的博客系统 2008年11月,我在博客园开通了个人帐号,并在博客园发表了自己的第一篇博客 ...
- [翻译] 使用ElasticSearch,Kibana,ASP.NET Core和Docker可视化数据
原文地址:http://www.dotnetcurry.com/aspnet/1354/elastic-search-kibana-in-docker-dotnet-core-app 想要轻松地通过许 ...
- .NET Core微服务之ASP.NET Core on Docker
Tip: 此篇已加入.NET Core微服务基础系列文章索引 一.Docker极简介绍 1.1 总体介绍 Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源.D ...
- [翻译] ASP.NET Core 利用 Docker、ElasticSearch、Kibana 来记录日志
原文: Logging with ElasticSearch, Kibana, ASP.NET Core and Docker 一步一步指导您使用 ElasticSearch, Kibana, ASP ...
- asp.net core的docker实践
如果centos中没有安装和docker和.net core镜像,先安装docker和asp.net core 镜像 安装dockeryum -y install docker-io 启动 Docke ...
- .Net Core in Docker - 在容器内编译发布并运行
Docker可以说是现在微服务,DevOps的基础,咱们.Net Core自然也得上Docker..Net Core发布到Docker容器的教程网上也有不少,但是今天还是想来写一写. 你搜.Net c ...
- .net core in Docker 部署方案(随笔)
前一段时间由于项目需要 .net core 在docker下的部署,途中也遇到很多坑,看了各同行的博客觉得多多少少还是有些问题,原本不想写此篇文章,由于好友最近公司也需要部署,硬是要求,于是花了些时间 ...
- Asp.Net Core 使用Docker进行容器化部署(一)
前几篇文章介绍了Liunx下的环境搭建,今天来分享一下.Net Core在Liunx上的部署. 我采用的方案是使用Dokcer作为运行虚拟机,Nginx作为Http服务器来进行反向代理,你可以理解为D ...
随机推荐
- HTML5 五子棋 - JS/Canvas 游戏
背景介绍 因为之前用c#的winform中的gdi+,java图形包做过五子棋,所以做这个逻辑思路也就驾轻就熟,然而最近想温故html5的canvas绘图功能(公司一般不用这些),所以做了个五子棋,当 ...
- trigger() --工作中问题nav样式
自动执行某元素的某个事件 $("#div").trigger("click"); //让系统自动执行单击事件 适用于nav样式中,下面横线绝对定位于nav.o ...
- 常用CSS缩写语法总结
使用缩写可以帮助减少你CSS文件的大小,更加容易阅读.css缩写的主要规则如下: 颜色 16进制的色彩值,如果每两位的值相同,可以缩写一半,例如:#000000可以缩写为#000;#336699可以缩 ...
- HDU5937 Equation(DFS + 剪枝)
题目 Source http://acm.hdu.edu.cn/showproblem.php?pid=5937 Description Little Ruins is a studious boy, ...
- CustomUI Direct3D9_Sample
刚开始建这个项目的时候编译器报了很多Link2019的错误. 后来添加了一些lib文件才解决,参考 缺少.lib文件导致的Link2019 解决方案汇总 ==================== ...
- mssql查询列名中包含特定字段的列
CREATE TABLE itemdata_LANG ( itemno ) NOT NULL, itemname ), -- 产品名称 othername ), indications ), -- 适 ...
- 格式化input输入内容(金额)
项目中要用到格式化金额输入框,要求每三个数字用逗号分割开. 添加一个directive angular.module('myApp.directives', []) .directive('filte ...
- PHP 随手记
这篇文章用来记录自己学习PHP过程中遇到的问题以及解决方法,随时遇到新的问题都会更新,方便以后查阅. 环境:ubuntu 14.10,php5,apache2 1.如何打开PHP报错信息? 解决方法: ...
- DIV+CSS自适应布局
自适应布局分两类:高度和宽度,方法有很多,我用三列布局举例,我就列几个通俗易懂的例子呗,懂了三列的,两列的原理一样,呵呵哒. 效果图如下:高度自适应——宽度自适应 1,高度自适应 ...
- 【OAuth2.0】Spring Security OAuth2.0篇之初识
不吐不快 因为项目需求开始接触OAuth2.0授权协议.断断续续接触了有两周左右的时间.不得不吐槽的,依然是自己的学习习惯问题,总是着急想了解一切,习惯性地钻牛角尖去理解小的细节,而不是从宏观上去掌握 ...