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。

1
2
3
4
5
6
#安装Docker
$ yum install docker
#启动docker服务
$ systemctl  start docker.service
#配置开机启动
$ systemctl  enable docker.service

 

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": ["https://ihllojuv.mirror.aliyuncs.com"]
}
EOF
sudo systemctl daemon-reload
sudo 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文件,排上用场了,我们编辑修改文件。

1
2
3
4
5
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目录

执行以下命令:

1
docker build -t demo-netcore .

  

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
[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

打包成功。

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

1
2
3
4
5
[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容器

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

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

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

1
2
3
4
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程序一直运行,以上命令可以修改为:

1
docker run --name demo -d -p 808

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

1
2
3
[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或者执行

1
wget http://localhost:8080

  

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

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#生成镜像
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》

人之为学,如饮河海,大饮则大盈,小饮则小颖!

Net Core应用,在CentOS上运行的更多相关文章

  1. 在 CentOS 上运行 ZKEACMS

    ZKEACMS Core 是基于 .net core 开发的,可以在 windows, linux, mac 上跨平台运行,接下来我们来看看如何在 CentOS 上运行 ZKEACMS. 安装 .Ne ...

  2. Centos上运行.net core2.0

    一.在centos7上安装.net core sdk 微软文档:https://www.microsoft.com/net/learn/get-started/linux/centos 二.直接在Ce ...

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

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

  4. Docker打包 Asp.Net Core应用,在CentOS上运行(转)

    转载连接:https://www.cnblogs.com/ibeisha/archive/2017/09/09/netcoreondocker.html 本文主要介绍下运用docker虚拟技术打包As ...

  5. 【ASP.NET Core】在CentOS上安装.NET Core运行时、部署到CentOS

    第一步:Add the dotnet product feed sudo rpm --import https://packages.microsoft.com/keys/microsoft.asc ...

  6. .Net Core项目在Docker上运行,内存占用过多导致pods重启的问题

    默认情况下,.NET Core应用的内存回收模式是Server模式,这种情况下,内存占用和服务器核心数量有关,一半占用量比较大. 我们的应用目前吞吐量都不大,可以采用Workstation模式,这种模 ...

  7. 在.NET Core 1.0 RC2 上 运行 Orchard2

    http://www.freeboygirl.com/running-orchard2-cms-on-core-rc2-net

  8. Ubuntu、CentOS上运行.net桌面程序

    1.mono->winform 2.wine->windows程序

  9. asp.net core 错误定位 & vs2017 远程调试部署在centos上的asp.net core程序

        前言 程序运行中会出现各种BUG. 排除BUG有三种方式. 一.访问页面直接报错误信息 出于安全,服务器是关闭这个功能的.在centos上可以用 命令设置环境变量来解决:   export A ...

随机推荐

  1. VC Q&A (原创)

    Q1:External Dependencies有什么作用? A1:(网友答复:)External   Dependencies是说你没有把这个文件加入到这个工程中,但是需要这个文件的支持.当然有时是 ...

  2. MySQL-left join _20160928

    left join 左连接 返回from 后面表的全部记录和 left join 后面表和from 后面表条件相符的全部记录 一般格式为下面,首先table A 和tableB都有两个唯一的字段标识I ...

  3. uC/OS-II源码分析(二)

    在真正开始分析源代码前,先来看使用uC/OS-II的三个例子 1)使用信号量 #define  TASK_STK_SIZE                 512       /* 每个任务堆栈的大小 ...

  4. MongoDB主从复制,主主复制

    MongoDB主从复制,是不需要像mysql那样从数据库事先要完整的主数据快照背景介绍:mongodb支持一主一从或多从复制1)    master节点: mongod --dbpath=/usr/M ...

  5. InformationSecurity:template

    ylbtech-InformationSecurity: 1.返回顶部   2.返回顶部   3.返回顶部   4.返回顶部   5.返回顶部     6.返回顶部   作者:ylbtech出处:ht ...

  6. Elasticsearch中提升大文件检索性能的一些总结

       笔者在实际生产环境中经常遇到一些大文件的检索,例如一些书籍内容,PDF文件等.今天这篇博客主要来探讨下如何提升ES在检索大文件的一些性能,经验有限,算是一个小小的总结吧! 1.大文件是多大? E ...

  7. 7.12实习培训日志 Linux Docker

    Linux 管理 RHEL7 的用户和组 用户的属性修改 chage -l [username] #查看用户信息 usermod --expiredate=YYYY-MM-DD [username] ...

  8. VC OnCtlColor函数来修改控件背景颜色

    CWnd::OnCtlColor afx_msg HBRUSH OnCtlColor( CDC* pDC, CWnd* pWnd, UINT nCtlColor ); 返回值:OnCtlColor必须 ...

  9. CodeForces - 1017D Round #502 D. The Wu(状压预处理)

    D. The Wu time limit per test 2 seconds memory limit per test 256 megabytes input standard input out ...

  10. Celery 基本使用

    1. 认识 Celery Celery 是一个 基于 Python 开发的分布式异步消息任务队列,可以实现任务异步处理,制定定时任务等. 异步消息队列:执行异步任务时,会返回一个任务 ID 给你,过一 ...