Docker打包 Asp.Net Core应用,在CentOS上运行

本文主要介绍下运用docker虚拟技术打包Asp.net core应用。 Docker作为一个开源的应用容器引擎,近几年得到广泛的应用,使用Docker我们可以轻松实现应用的持续集成部署,一次打包,到处运行。

开篇借用百科上对docker的介绍。

    Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的 Linux 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。

方便大家学习:

http://www.docker.org.cn/(中文站) 

https://www.docker.com/(英文站)

docker镜像站:https://hub.docker.com/

【搭建环境】

系统:CentOS 7.0    容器:Docker 1.12.6          .Net Core版本: .NET Core 1.1

工具:putty、winScp

 

一、首先,我们先介绍下关于docker容器的安装。

直接用黄狗安装工具安装docker。


#安装Docker
$ yum  install  docker
#启动docker服务
$ systemctl  start docker.service
#配置开机启动
$ systemctl   enable  docker.service

 

安装并成功启动docker服务后,可以通过以下命令查看docker版本信息


docker version
Client:
  Version:         1.12.6
  API version:     1.24
  Package version: docker-1.12.6-32.git88a4867.el7.centos.x86_64
  Go version:      go1.7.4
  Git commit:      88a4867 /1 .12.6
  Built:           Mon Jul  3 16:02:02 2017
  OS /Arch :         linux /amd64
Server:
  Version:         1.12.6
  API version:     1.24
  Package version: docker-1.12.6-32.git88a4867.el7.centos.x86_64
  Go version:      go1.7.4
  Git commit:      88a4867 /1 .12.6
  Built:           Mon Jul  3 16:02:02 2017
  OS /Arch :         linux /amd64

  

docker客户端、服务端版本信息都展示出来了。

二、安装Docker加速器。

 我目前使用的阿里开发者提供的docker加速服务。

有阿里云账号直接登录,https://dev.aliyun.com/search.html

如何使用Docker加速器

针对Docker客户端版本大于1.10的用户

您可以通过修改daemon配置文件/etc/docker/daemon.json来使用加速器:

sudo mkdir -p /etc/dockersudo tee /etc/docker/daemon.json <<-'EOF'{  "registry-mirrors": ["https://ihllojuv.mirror.aliyuncs.com"]
}
EOFsudo systemctl daemon-reloadsudo systemctl restart docker

为什么要安装Docker加速器?

摘自网友的话:众所周知的原因,要想流畅地使用Docker,需要配置Docker加速器,否则你会觉得回到了拨号上网的时代 。

三、发布Asp.Net Core程序。

 我这里是新建了也给Asp.Net Core web程序。

红色圈住部分,是后来手动添加进去的,dockerfile是你的应用部署到docker上所必须的配置信息,只是个不带扩展名的纯文本文件而已。hosting.json需要是配置服务启动时,监听信息。使用配置文件,需要手动修改Program.cs中的入口程序。


/// <summary>/// /// </summary>/// <param name="args"></param>public static void Main(string[] args){            //实例化一个配置生成器var config = new ConfigurationBuilder().SetBasePath(Directory.GetCurrentDirectory()).AddJsonFile("hosting.json", optional: true)//添加配置文件hosting.json          .Build();            var host = new WebHostBuilder().UseKestrel().UseConfiguration(config)//使用配置信息                .UseContentRoot(Directory.GetCurrentDirectory()).UseIISIntegration().UseStartup<Startup>().UseApplicationInsights().Build();host.Run();}


完成以上操作后,我们发布这个demo程序,解决方案,右键发布。

发布成功后,默认在bin/release/publishOutPut文件夹下。

然后,我把publishOutPut重命名为publish后,通过WinScp工具把文件传到root/docker/下。

另外,我们在网站根目录下,创建的Dockerfile文件,排上用场了,我们编辑修改文件。


FROM microsoft /aspnetcore :1.1
COPY .  /publish
WORKDIR  /publish   
EXPOSE 80
CMD [ "dotnet" "demo.dll" ]

 指定容器对外暴露端口80。注意,COPY .后面有空格,表示是当前位置,意思是从当前位置复制文件到/publish目录下。网上有篇博客,少了个.,导致copy requires at least one argument这样的错误。

 

四、打包镜像

首先,我们进入/docker/publish目录

执行以下命令:


docker build -t demo-netcore .

  

意思是生成一个名为demo-netcore的镜像。(注意:最后空格后面有一个.)。

这个命令会,根据当前目录下dockerfile配置文件,进行打包。


[root@localhost publish] # docker build -t demo-netcore .
Sending build context to Docker daemon 17.84 MB
Step 1 : FROM microsoft /aspnetcore :1.1
  ---> 983c2fe9cbef
Step 2 : COPY .  /publish
  ---> ae9533f162da
Removing intermediate container d8bdd1cb7061
Step 3 : WORKDIR  /publish
  ---> Running  in  06a5fbef40ea
  ---> c63de53ebe20
Removing intermediate container 06a5fbef40ea
Step 4 : EXPOSE 80
  ---> Running  in  8d0eaa657905
  ---> 228e30d1bf74
Removing intermediate container 8d0eaa657905
Step 5 : EXPOSE 8080
  ---> Running  in  a38fd6c59d4a
  ---> ab126ceac6ae
Removing intermediate container a38fd6c59d4a
Step 6 : CMD dotnet demo.dll
  ---> Running  in  7dc71cdf0f87
  ---> 96ef55dd9fc9
Removing intermediate container 7dc71cdf0f87
Successfully built 96ef55dd9fc9

打包成功。

接下来,看看我们打包好的镜像。


[root@localhost publish] # docker images
REPOSITORY                       TAG                 IMAGE ID            CREATED              SIZE
demo-netcore                     latest              96ef55dd9fc9        About a minute ago   322.8 MB
docker.io /microsoft/aspnetcore    1.1                 983c2fe9cbef        23 hours ago         305.1 MB
[root@localhost publish] #

因为,刚打包的镜像demo-netcore是基于docker.io/microsoft/aspnetcore镜像的,所以在打包demo-netcore的过程中,会优先从镜像库中拉取docker.io/microsoft/aspnetcore镜像。至此,我们的第一个docker镜像就打包成功了。接下来,在容器中运行镜像。

五、运行docker容器


docker run --name demo  -p 8080:80 demo-netcore:late

其中,demo是制定容器的名称,-p是进行宿主和容器之间端口的映射,(-p 宿主端口:容器端口),

 执行完以上命令后,正常情况下,会出现如下内容:


Hosting environment: Production
Content root path:  /publish
Now listening on: http: // +:80
Application started. Press Ctrl+C to shut down.

  这表明,你的asp.net core程序已经成功在docker容器中运行,监听端口为80。这个80指的是容器的端口,以上信息都是在容器中执行的结果输出。它会提示,按Ctrl+C终止当前应用程序。如果在执行docker run的时候,加上 -d命令,这样容器就会一直运行,即使关掉终端窗口。于是,我们想让docker程序一直运行,以上命令可以修改为:


docker run --name demo -d -p 808

  检验docker容器是否运行成功,执行如下命令:


[root@localhost ~] # docker ps
CONTAINER ID        IMAGE                 COMMAND             CREATED                                                      STATUS              PORTS                            NAMES
1abf4952db5b        demo-netcore:latest    "dotnet demo.dll"    About a minute ago  

  

以上信息可以看到,容器ID,容器名称,命令,镜像名称,

由于,我再dockerfier文件中,配置宿主的端口为8080,那么我们访问容器中的asp.net core程序时,需要通过8080端口访问,完成以上步骤,接下来让我们看下结果吧!浏览器打开http://localhost:8080或者执行


wget http: //localhost :8080

  

第一个asp.net core docker应用运行起来了!

以下,是在本次操作中,常用的几个docker命令。

 


#生成镜像
docker build -t demo-netcore .
#运行容器
docker run --name demo  -p 8080:80 demo-netcore:latest
#删除所有容器进程
docker  rm  $(docker  ps  -a -q)
#删除一个镜像
docker rmi 镜像ID
#查看所有镜像
docker images

  关于怎样把本地镜像推送到hub.docker.com,请访问我的另一篇博客《推送docker 镜像到hub.docker.com》

原文地址:http://www.cnblogs.com/ibeisha/p/netcoreondocker.html


.NET社区新闻,深度好文,微信中搜索dotNET跨平台或扫描二维码关注

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/323685.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

若依实现系统单点登录(可绕过验证码)

“大家好&#xff0c;我是雄雄&#xff0c;欢迎关注微信公众号&#xff1a;雄雄的小课堂”前言现在是&#xff1a;2022年4月19日19:56:56昨天写了个bladex的单点登录&#xff0c;回想起来还是比较复杂的&#xff0c;今天又收到了个在若依里面实现单点登录。具体是这样的:别的系…

POJ1015-Jury Compromise【01背包,dp】

正题 题目链接:http://poj.org/problem?id1015 题目大意 每个人有A值和B值&#xff0c;要求选M个人&#xff0c;使这M个人的|SumA−SumB||SumA−SumB|最小。 解题思路 我们用SumA−SumBSumA−SumB作为原本的价格&#xff0c;然后用fi,jfi,j表示已经选了i个人&#xff0c;Su…

JavaFX其他事件

一、其他事件 InputMethodEvent.InputMethodTextChanged 文本输入改变 ContextMenuEvent.CONTEXT_MENU_REQUESTED 上下文菜单请求 二、用法 node.setOnXX(event->{//do something });node.addEventFilter(XXEvent.XX, event -> {//do something});

springboot解析txt文件顺便加到数据库中(nohup文件)

大家好&#xff0c;我是雄雄&#xff0c;欢迎关注微信公众号&#xff1a;雄雄的小课堂 前言 现在是&#xff1a;2022年4月20日13:33:23 以前是怎么都没想到&#xff0c;我需要在服务器的nohup文件中找记录&#xff0c;然后往数据库里面更新。具体因为啥不提了&#xff0c;说多…

ASP.Net Core 2.0中的Razor Page不是WebForm

随着.net core2.0的发布&#xff0c;我们可以创建2.0的web应用了。2.0中新东西的出现&#xff0c;会让我们忘记老的东西&#xff0c;他就是Razor Page。下面的这篇博客将会介绍ASP.Net Core 2.0中的Razor Page。 在ASP.Net Core 2.0新特点之一就是支持Razor Page。今天的Razor…

Ch5302-金字塔【区间dp】

正题 题目链接:http://contest-hunter.org:83/contest/0x50%E3%80%8C%E5%8A%A8%E6%80%81%E8%A7%84%E5%88%92%E3%80%8D%E4%BE%8B%E9%A2%98/5302%20%E9%87%91%E5%AD%97%E5%A1%94 题目大意 给出一个欧拉序(只要到达每一个结点就把他加进序列的那种,编号会重复)&#xff0c;求有多…

常用公有云接入

一、云平台 1、AWS(亚马逊) 2、谷歌 3、AZURE(微软) 4、阿里 5、腾讯 6、华为 二、接入方式 1、REST API 2、SDK 三、云ECS 1、实例 2、系统盘 3、数据盘 4、网关 5、公有IP 6、共享带宽&#xff08;阿里云&#xff09;

记录几个部署项目常用的命令

大家好&#xff0c;我是雄雄&#xff0c;欢迎关注微信公众号&#xff1a;雄雄的小课堂 查询运行项目的进程 ps -aux|grep farbeat 杀死进程 kill -9 1600336进入目录 cd /www/wwwroot/farbeat/查看文件 ls将日志输出在nohup文件中的方式启动项目(注意.jar文件的名字) nohup j…

C#最佳工具集合:IDE、分析、自动化工具等

C#是企业中广泛使用的编程语言&#xff0c;特别是那些依赖微软的程序语言。如果您使用C#构建应用程序&#xff0c;则最有可能使用Visual Studio&#xff0c;并且已经寻找了一些扩展来对您的开发进行管理。但是&#xff0c;这个工具列表可能会改变您编写C#代码的方式。 C#编程的…

jzoj1768,P2704,POJ1185-[NOI2001]炮兵阵地【状态压缩dp】

正题 POJ链接:http://poj.org/problem?id1185 jzoj链接:https://jzoj.net/senior/#main/show/1768 洛谷评测记录:https://www.luogu.org/recordnew/lists?uid52918&pidP2704 正题 每个炮兵攻击范围是上左下右各2格&#xff0c;高山地区不可以放炮兵&#xff0c;求所以…

常用公有云接入——AZURE

一、概念 1、订阅 可以使用订阅为组织内的团队提供访问开发环境&#xff08;即测试、生产、开发、临时部署等&#xff09;和项目的权限。针对每个应用程序环境创建不同的订阅&#xff0c;并为每个订阅分配不同的服务管理员帐户&#xff0c;这是保护每个环境安全的一个好方法。…

记录几个常用部署项目的命令,以备后用!

“大家好&#xff0c;我是雄雄&#xff0c;欢迎关注微信公众号&#xff1a;雄雄的小课堂”查询运行项目的进程ps -aux|grep farbeat杀死进程kill -9 1600336进入目录cd /www/wwwroot/farbeat/查看文件ls将日志输出在nohup文件中的方式启动项目(注意.jar文件的名字)nohup java -…

分布式测试工具Beetle.DT的部署并进行HTTP,SQL,TCP压测

由于Beetle.DT是一个分布式压力测试工具&#xff0c;所以在使用上并不像普通工具那样安装运行这么简单&#xff1b;由于工具涉及到测试管理中心&#xff0c;节点和管理端等工具&#xff1b; 所以必须要进行相应的部署才能运行。接下来详解一下如果安装Beetle.DT并进行简单的HTT…

Ch4201-楼兰图腾【树状数组】

正题 题目链接:http://contest-hunter.org:83/contest/0x40%E3%80%8C%E6%95%B0%E6%8D%AE%E7%BB%93%E6%9E%84%E8%BF%9B%E9%98%B6%E3%80%8D%E4%BE%8B%E9%A2%98/4201%20%E6%A5%BC%E5%85%B0%E5%9B%BE%E8%85%BE 题目大意 给若干个点&#xff0c;求可以得到/\和V的形状各多少个。 解…

常用公有云接入——谷歌

一、概念 1、项目 一个账号有唯一的项目&#xff0c;所有虚拟机都在project里面建。 2、计算引擎 虚拟机资源。 二、创建方式 1、页面控制台 2、gcloud命令行 3、REST API 4、SDK 三、Java SDK 1、创建API服务凭据&#xff0c;并下载P12文件 2、Maven <dependency&…

elementui实现表格单选功能

大家好&#xff0c;我是雄雄&#xff0c;欢迎关注微信公众号&#xff1a;雄雄的小课堂 前言 需求是这样的&#xff1a;用户单击购买产品的按钮时&#xff0c;会出现一个产品的列表&#xff0c;但是呢只能买一种产品&#xff0c;暂时不可以多选。效果如下所示&#xff1a; 原来…

element-ui实现表格单选的功能

“大家好&#xff0c;我是雄雄&#xff0c;欢迎关注微信公众号&#xff1a;雄雄的小课堂”前言现在是&#xff1a;2022年4月20日13:33:23需求是这样的&#xff1a;用户单击购买产品的按钮时&#xff0c;会出现一个产品的列表&#xff0c;但是呢只能买一种产品&#xff0c;暂时不…

常用公有云接入——阿里

一、术语 中文英文说明地域Region阿里云建设的数据中心。资源创建成功后无法更换地域。可用区Zone同一地域内&#xff0c;电力和网络互相独立的物理数据中心。一个地域下可以有多个可用区。同一地域内可用区之间内网互通并且故障隔离&#xff0c;云服务器 ECS 网络延时低。实例…

ASP.NET Core Razor 视图组件

视图组件简介 在新的ASP.NET Core MVC中&#xff0c;视图组件类似于局部视图&#xff0c;但它们更强大。视图组件不使用模型绑定&#xff0c;仅依赖于您在调用时提供的数据。 视图组件特性&#xff1a; 呈现页面响应的某一部分而不是整个响应包括在控制器和视图之间发现的关…

POJ3468-A Simple Problem with Integers【线段树,树状数组,分块】

正题 题目链接&#xff1a;我是链接 其实洛谷线段树模板也是一样的&#xff1a;三种方法AC评测链接 题目大意 要求支持区间修改&#xff0c;区间求和。 线段树 直接用一个lazy标记&#xff0c;在之前的博客里有说 code1 #include<cstdio> #include<algorithm>…