本文描述下 .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 

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  --: hello_dotnet:1.0

]

      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的更多相关文章

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

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

  2. 基于Microsoft Azure、ASP.NET Core和Docker的博客系统

    欢迎阅读daxnet的新博客:一个基于Microsoft Azure.ASP.NET Core和Docker的博客系统   2008年11月,我在博客园开通了个人帐号,并在博客园发表了自己的第一篇博客 ...

  3. [翻译] 使用ElasticSearch,Kibana,ASP.NET Core和Docker可视化数据

    原文地址:http://www.dotnetcurry.com/aspnet/1354/elastic-search-kibana-in-docker-dotnet-core-app 想要轻松地通过许 ...

  4. .NET Core微服务之ASP.NET Core on Docker

    Tip: 此篇已加入.NET Core微服务基础系列文章索引 一.Docker极简介绍 1.1 总体介绍 Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源.D ...

  5. [翻译] ASP.NET Core 利用 Docker、ElasticSearch、Kibana 来记录日志

    原文: Logging with ElasticSearch, Kibana, ASP.NET Core and Docker 一步一步指导您使用 ElasticSearch, Kibana, ASP ...

  6. asp.net core的docker实践

    如果centos中没有安装和docker和.net core镜像,先安装docker和asp.net core 镜像 安装dockeryum -y install docker-io 启动 Docke ...

  7. .Net Core in Docker - 在容器内编译发布并运行

    Docker可以说是现在微服务,DevOps的基础,咱们.Net Core自然也得上Docker..Net Core发布到Docker容器的教程网上也有不少,但是今天还是想来写一写. 你搜.Net c ...

  8. .net core in Docker 部署方案(随笔)

    前一段时间由于项目需要 .net core 在docker下的部署,途中也遇到很多坑,看了各同行的博客觉得多多少少还是有些问题,原本不想写此篇文章,由于好友最近公司也需要部署,硬是要求,于是花了些时间 ...

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

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

随机推荐

  1. 【Win 10应用开发】使用RichEditBox控件应注意的问题

    RichEditBox控件支持对多格式文本进行编辑,一般的文本输入控件可以使用TextBox,不过,如果希望编辑格式较为复杂的文本,就可以考虚使用RichEditBox控件. RichEditBox控 ...

  2. LInux下修改 ~/.bashrc 文件source ~/.bashrc 后 shell 命令 失效 任何命令都显示 “ bash XX :未找到命令”

    原因:在java安装后进行环境变量配置其中 export JAVA_HOME="/opt/java/jdk1.8" export PATH=$JAVA_HOME 即结束 错误原因: ...

  3. 介绍UDF,以及完成大小写的转换

    一:概述 1.UDF 用户自定义函数,用java实现自定义的需求 2.UDF的类型 udf:一进一出 udaf:多进一出 udtf:一进多出 3.udf的实现步骤 继承UDF类 实现evaluate的 ...

  4. mysql主从复制的异步复制与同步复制

    异 步复制:MySQL本身支持单向的.异步的复制.异步复制意味着在把数据从一台机器拷贝到另一台机器时有一个延时 – 最重要的是这意味着当应用系统的事务提交已经确认时数据并不能在同一时刻拷贝/应用到从机 ...

  5. Gym 100952H&amp;&amp;2015 HIAST Collegiate Programming Contest H. Special Palindrome【dp预处理+矩阵快速幂/打表解法】

    H. Special Palindrome time limit per test:1 second memory limit per test:64 megabytes input:standard ...

  6. sourcestress 问题解决方案

    描述:在Windows系统下,在保证GitHub上的账号和密码正确的情况下,在push时候,输入正确的账号和密码后,却是提醒无效的账户密码. 解决方法:在C:\Users\...\AppData\Lo ...

  7. cmd 命令 net start mongodb 启动不了,提示 net 不是内部命令或者外部命令

    1.要管理员的身份进入 cmd 2.右击我的电脑-->属性-->高级系统设置 3.选择高级-->环境变量 4.找到系统变量-->Path-->编辑 5.把 C:\wind ...

  8. English trip V1 - B 5.Is It Cold Outside? 外面很冷? Teacher:Corrine Key: weather

    In this lesson you will learn to talk about the weather. 本节课将学习到关于天气 课上内容(Lesson) 词汇(Key Word ) # 关于 ...

  9. centos 7 redis-4.0.11 主从

    redis-master:192.168.199.223 redis-slave: 192.168.199.224 cd /opt wget http://download.redis.io/rele ...

  10. 2018.08.30 NOIP模拟 kfib(矩阵快速幂+exgcd)

    [输入] 一行两个整数 n P [输出] 从小到大输出可能的 k,若不存在,输出 None [样例输入 1] 5 5 [样例输出] 2 [样例解释] f[0] = 2 f[1] = 2 f[2] = ...