本文用图文的方式记录了我自己搭建centos+asp.net core + docker + jexus + nginx的整个过程,希望对有同样需求的朋友有一定的参考作用。

本文主要内容如下:

  • centos7安装
  • yum镜像
  • docker镜像
  • docker安装
  • dotnetcore安装
  • Docker安装dotnetcore镜像
  • asp.net core 创建与发布
  • docker中部署asp.net core
  • jexus转发
  • nginx转发

1.centos7安装

a.下载centos的iso文件,比如:CentOS-7-x86_64-Everything-1611.iso

b.虚拟机安装,比如:hyper-v

c.手动分区:

/boot  至少1G,建议2G(很多东西会装在里面,别信网上说的100M足够的话了,设置大点)

/swap 2倍内存大小

/        10G吧

/home 10G以上吧

/var 至少1G,建议5G(docker很容易装满)

d.软件预装,选择:带UI的Server

2.yum镜像

a.访问阿里云http://mirrors.aliyun.com

b.找到你要装的OS,点右边“help”进入安装指南

c.根据指南,安装镜像(执行命令的时候请加上sudo,如果你不是root)

sudo mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup

sudo wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

  

3.docker镜像

a. 打开开发者中心https://dev.aliyun.com/search.html

b.右上角“注册/登陆”

c.登陆后,右上角有一个“管理中心”

d.进入管理中心,点击“加速器”

开始前先参照这个帖子《CentOS禁止packagekit离线更新服务的办法》http://www.cnblogs.com/zjoch/p/6500480.html处理,否则出现如下错误

按提示完成镜像设置

sudo curl -sSL http://acs-public-mirror.oss-cn-hangzhou.aliyuncs.com/docker-engine/internet | sh -

以下命令一行一行输入

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

 

4.docker安装

a.安装Docker软件包

 $ sudo yum install docker-engine

b.设置Docker服务开机自启

$ sudo systemctl enable docker.service

c.启动Docker服务

$ sudo systemctl start docker

d.验证Docker是否安装成功

$ sudo docker run --rm hello-world

5.dotnetcore安装

   a.打开微软dotnetcore安装帮助页面

     https://www.microsoft.com/net/core#linuxcentos

     选择你要安装的OS

     

    按照他的步骤,1,2,3,4安装就OK了。

 

    b.后面发布web程序的时候,会需要额外安装一些组件,这里先一起安装了(我这里是CENTOS安装方法,其他的可能不同,请自行搜索)

    安装 NPM 工具,参照https://www.digitalocean.com/community/tutorials/how-to-install-node-js-on-a-centos-7-server

sudo yum install epel-release

sudo yum install nodejs

    安装bower工具,参照https://bower.io/#install-bower

     

sudo npm install -g bower

    安装gulp 工具(貌似我实践过程中没有说必须安装这个)  

sudo npm install gulp -g

     

6.Docker 安装dotnetcore镜像

到这里,假设你的Docker已经安装完成,以下环境为 Liunx(centos 7)。

sudo docker info

得到命令了吧,切换到命令行窗口运行以下命令来安装asp.net core 镜像。(这里等待时间特别长,你可以去做点其他事情!)

sudo docker pull microsoft/dotnet

镜像下载完成之后,输入sudo docker images我们检查一下:

sudo docker images

Docker 常用命令

rm -rf 目录名

删除非空目录

docker info
检查Docker的安装是否正确,如果没有找到此命令,则表示Docker没有正确安装

docker pull busybox
拉取一个预建的镜像

sample_job=$(docker run -d busybox /bin/sh -c "while true; do echo Docker; sleep 1; done")
以后台进程的方式运行hello docker
sample_job命令会隔一秒打印一次Docker,使用Docker logs可以查看输出。如果没有起名字,那这个job会被分配一个id,以后使用命令例如Docker logs查看日志会变得比较麻烦。

docker logs $sample_job
运行Docker logs命令来查看job的当前状态:

docker help
所有Docker命令

docker stop $sample_job
停止名为sample_job的容器

docker restart $sample_job
重新启动该容器

docker stop $sample_job docker rm $sample_job
如果要完全移除容器,需要将该容器停止,然后才能移除

docker commit $sample_job job1
将容器的状态保存为镜像

docker images
令查看所有镜像的列表

下面分享一些我经常使用的一些命令:

移除所有的容器和镜像,用一行命令大扫除:
docker kill $(docker ps -q) ; docker rm $(docker ps -a -q) ; docker rmi $(docker images -q -a)

仅仅想删除所有的容器,你可以运行如下命令:
docker kill $(docker ps -q) ; docker rm $(docker ps -a -q)

清除名称为none的镜像,一般都是下载一般失败的残留:

docker ps -a | grep "Exited" | awk '{print $1 }'|xargs docker stop
docker ps -a | grep "Exited" | awk '{print $1 }'|xargs docker rm
docker images|grep none|awk '{print $3 }'|xargs docker rmi 实测能工作的命令(老外的:http://jimhoskins.com/2013/07/27/remove-untagged-docker-images.html):
docker rm $(docker ps -a -q)
docker rmi $(docker images | grep "^<none>" | awk "{print $3}")

清除单个镜像:
docker rmi -f <image id>

7. asp.net core 创建与发布

(可参考http://www.cnblogs.com/savorboard/p/dot-net-linux-jexus.html前半部分)

在 Asp.Net Core 项目中,我们使用 dotnet new -t WebApp 命令和创建一个新的空的 Web 应用程序,然后使用dotnet resotre还原 Nuget。

dotnet new -t WebApp
dotnet resotre

主要是用以下几个命令:

  mkdir HelloWebApp 这个命令是创建一个名为 HelloWebApp 的文件夹。

  dotnet new -t Web 这个命令是使用 Web 模板来新建一个 WebApp 的 Mvc 应用程序。

因为后面部署到docker中需要固定端口号,所以需要修改Program.cs里的代码,修改后如下(其实就是新增红色的那行):

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()
.UseKestrel()
.UseContentRoot(Directory.GetCurrentDirectory())
.UseIISIntegration()
.UseUrls("http://*:5000")
.UseStartup<Startup>()
.Build(); host.Run();
}
}
}

输入命令sudo gedit Program.cs,并修改源码文件如下:

sudo gedit Program.cs

编辑完成,点击右上角“Save”,点“x”关闭后返回终端.

新建了应用程序之后,使用dotnet run 命令来测试一下我们的应用程序。

dotnet run

我们打开浏览器输入 http://localhost:5000,来看一下效果。

可以看到已经成功运行了。

如果发布应用程序,我们需要使用 dotnet publish命令,通过使用 --help 参数可以看到一些可以使用的命令参数。

  -f|--framework <FRAMEWORK>          Target framework to compile for

  -r|--runtime <RUNTIME_IDENTIFIER>   Target runtime to publish for

  -b|--build-base-path <OUTPUT_DIR>   Directory in which to place temporary outputs

  -o|--output <OUTPUT_PATH>           Path in which to publish the app

  --version-suffix <VERSION_SUFFIX>   Defines what `*` should be replaced with in version field in project.json

  -c|--configuration <CONFIGURATION>  Configuration under which to build

  --native-subdirectory               Temporary mechanism to include subdirectories from native assets of dependency packages in output

  --no-build                          Do not build projects before publishing

我们运行dotnet publish -o ~/WorkSpace/publish 发布到 publish 文件夹,当看到Published 1/1 projects successfully的时候,说明已经发布成功了。

dotnet publish -o ~/WorkSpace/publish

发布之后 publish 文件夹里面的子文件夹有必要说明一下。

appsettiong.json  应用程序的配置文件
refs 应用程序引用的.net fx系统程序集
runtimes 运行时环境,可以看到里面的文件夹包含 win7、linxu,mac os 等,说明我们这个应用程序是跨平台的。
views 这个文件夹存放的就是我们的 mvc 的视图文件。
wwwroot 文件夹,存放的是前端使用的 js 库,css 样式表,和图片等。

然后使用dotnet HelloWebApp.dll测试发布过后的程序是否运行正常。

cd ~/WorkSpace/publish 
dotnet HelloWebApp.dll

8.docker中部署asp.net core

Dockerfile 是什么东西,Dockerfile有什么用,可以参考http://blog.csdn.net/wsscy2004/article/details/25878223

a、程序命令行切换到publish文件目录中。
b、sudo touch Dockerfile 名称不要写错了,没有任何后缀名,来新建一个Dockerfile文件。

sudo touch Dockerfile

c、sudo gedit Dockerfile 使用gedit来编辑Dockerfile

sudo gedit Dockerfile

Dockerfile中输入以下内容:

#基于 `microsoft/dotnet:1.1.0-core` 来构建我们的镜像
FROM microsoft/dotnet:latest #拷贝项目publish文件夹中的所有文件到 docker容器中的publish文件夹中
COPY . /publish #设置工作目录为 `/publish` 文件夹,即容器启动默认的文件夹
WORKDIR /publish #设置Docker容器对外暴露5000端口
EXPOSE 5000 #使用`dotnet HelloWebApp.dll`来运行应用程序 CMD ["dotnet", "HelloWebApp.dll"]

保存后关闭就是了

构建镜像

运行 docker build -t hellowebapp:1.0 . 来构建一个镜像(后面的.代表当前目录,别搞丢了。。。)

sudo docker build -t hellowebapp:1.0 .

运行镜像

使用如下几种方式运行:

直接用docker名字前台(运行期间不能做其他事情,可以再开一个终端,或者ctrl+c结束)运行 docker run -p 5000:5000 hellowebapp:1.0

(推荐)直接用docker名字后台(运行期间还可以敲命令)运行 docker run -d -p 5000:5000 hellowebapp:1.0

用自定义名字后台运行   docker run --name hellowebapp -d -p 5000:5000 hellowebapp:1.0

sudo docker run -p 5000:5000 hellowebapp:1.0
sudo docker run -d -p 5000:5000 hellowebapp:1.0
sudo docker run --name hellowebapp -d -p 5000:5000 hellowebapp:1.0

打开浏览器测试一下:

9.jexus转发

可以参考另一片帖子,http://www.cnblogs.com/gaobing/p/5663012.html

进入临时目录

cd /tmp

网上下载jexus最新独立安装包

sudo wget linuxdot.net/down/jexus-5.8.2-x64.tar.gz

解压安装包

tar -zxvf jexus-5.8.2-x64.tar.gz

移动到运行目录

sudo mv jexus /usr

删除临时文件

sudo rm -rf jexus*.tar.gz

进入运行目录

cd /usr/jexus

注册服务

sudo ./jws regsvr

启动服务(特别注意./jws start 或者 ./jws stop 或者 ./jws restart 无论在什么时候用,都必须有root权限,加sudo)

sudo ./jws start

测试服务

curl localhost/info

创建网站根目录

sudo mkdir /var/www

sudo mkdir /var/www/default

修改默认配置

cd /usr/jexus/siteconf
sudo gedit default

如果是用jexus启动和管理DotNetCore,那么添加如下配置:

AppHost={
CmdLine=/usr/local/bin/dotnet /var/www/default/HelloWebApp.dll;
AppRoot=/var/www/default;
Port=5000;
}

如果只是作转发,则只添加如下配置:

AppHost.Port = 5000

重启jexus服务

cd ..
sudo ./jws restart

转发效果,访问80端口

10.nginx转发

a、 新开一个终端,输入 sudo yum install nginx -y安装 nginx。

sudo yum install nginx -y

b、 安装完成之后,输入 nginx -v查看是否安装成功。

执行以下命令,启动nginx

sudo nginx

c.   由于nginx默认监听80端口,而80已经被juexus占用了,所以我们需要先修改nginx的端口为8080

安装完 nginx 之后,默认的配置文件路径在 /etc/nginx/nginx.conf 文件中, 切换工作目录到/etc/nginx/,使用

cd /etc/nginx/

编辑配置文件,修改监听端口为8080

sudo gedit nginx.conf

保存关闭后,重新加载配置文件

sudo nginx -s reload

然后打开浏览器访问http://localhost:8080

d.接下来,我们来修改转发配置

先打开配置文件

sudo gedit nginx.conf

在 Server 节点中,找到监听 8080端口的location 节点,修改内容为如下:   

location / {
proxy_pass http://localhost:5000;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection keep-alive;
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}

如果要用http://localhost:8080访问,还需要修改默认server_name=localhost,否则请通过http://127.0.0.1:8080来访问

保存关闭后,重新加载配置文件

sudo nginx -s reload

如果修改了server_name,reload是无效的,得先停止再启动

sudo nginx -s stop
sudo nginx

e. 测试 nginx 是否运行成功,打开浏览器,输入 http://localhost:8080 查看是否显示如下界面。

整个实践过程就是上面的内容,希望对大家有所帮助,全文完!

相关参考:

http://www.cnblogs.com/savorboard/p/dotnetcore-docker.html

http://www.cnblogs.com/savorboard/p/dotnet-core-publish-nginx.html

https://www.linuxdot.net/
http://jimhoskins.com/2013/07/27/remove-untagged-docker-images.html
http://www.cnblogs.com/savorboard/p/dot-net-linux-jexus.html
http://www.cnblogs.com/gaobing/p/5663012.html

ASP.NET Core Docker jexus nginx部署-CentOS实践版的更多相关文章

  1. 腾讯云-ASP.NET Core+Mysql+Jexus+CDN上云实践

    腾讯云-ASP.NET Core+Mysql+Jexus+CDN上云实践.md 开通腾讯云服务器和Mysql 知识点: ASP.NET Core和 Entity Framework Core的使用 L ...

  2. ASP.NET Core Docker部署

    前言 在前面文章中,介绍了 ASP.NET Core在 macOS,Linux 上基于Nginx和Jexus的发布和部署,本篇文章主要是如何在Docker容器中运行ASP.NET Core应用程序. ...

  3. 详解ASP.NET Core Docker部署

    前言 在前面文章中,介绍了 ASP.NET Core在 macOS,Linux 上基于Nginx和Jexus的发布和部署,本篇文章主要是如何在Docker容器中运行ASP.NET Core应用程序. ...

  4. ASP.NET Core & Docker & Jenkins 零基础持续集成实战

    原文:ASP.NET Core & Docker & Jenkins 零基础持续集成实战 一.本系列教程说明 源代码管理工具:Gogs 持续集成工具:Jenkins 容器:Docker ...

  5. ASP.NET Core & Docker 实战经验分享

    一.前言 最近一直在研究和实践ASP.NET Core.Docker.持续集成.在ASP.NET Core 和 Dcoker结合下遇到了一些坑,在此记录和分享,希望对大家有一些帮助. 二.中间镜像 我 ...

  6. windows/Linux下设置ASP.Net Core开发环境并部署应用

    10分钟学会在windows/Linux下设置ASP.Net Core开发环境并部署应用 创建和开发ASP.NET Core应用可以有二种方式:最简单的方式是通过Visual Studio 2017 ...

  7. ASP.NET Core ASP.NET Core+MVC搭建及部署

    ASP.NET Core+MVC搭建及部署 一.创建项目: 1.选择ASP.NET Core Web Application(.NET Core) 注意框架 2.选择Web Application: ...

  8. CentOS ASP.NET Core Runtime Jexus跨平台布署

    .net core 开源和跨平台,能布署到当前主流的Windows,Linux,macOS 系统上.本篇我们将在 Linux 系统上使用 ASP.NET Core Runtime 和 Jexus 布署 ...

  9. ASP.NET Core + Docker + Jenkins + gogs + CentOS 从零开始搭建持续集成

    为什么不用gitlab? 没有采用gitlab,因为gitlab比较吃配置,至少得2核4G的配置.采用go语言开发的gogs来代替,搭建方便(不到10分钟就能安装完成),资源消耗低,功能也比较强大,也 ...

随机推荐

  1. python之GIL release (I/O open(file) socket time.sleep)

    0.目录 2.线索 C源代码 Py_BEGIN_ALLOW_THREADS Py_END_ALLOW_THREADS3.open(name[, mode[, buffering]]) -> fi ...

  2. [转]MyEclipse 2015优化技巧

    http://www.chinahadoop.cn/group/16/thread/1660 http://www.bkjia.com/Javabc/1077158.html 只有不断的学习才能使人充 ...

  3. WebApi 得到提交过来的 post 数据

    byte[] byts = new byte[System.Web.HttpContext.Current.Request.InputStream.Length]; System.Web.HttpCo ...

  4. python全栈开发day81--jsonp

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  5. Flink应用开发-maven导入

    flink和spark类似,也是一种一站式处理的框架:既可以进行批处理(DataSet),也可以进行实时处理(DataStream) 使用maven导入相关依赖 <properties> ...

  6. net core体系-web应用程序-4net core2.0大白话带你入门-4asp.net core配置项目访问地址

    asp.net core配置访问地址  .net core web程序,默认使用kestrel作为web服务器. 配置Kestrel Urls有四种方式,我这里只介绍一种.其它方式可自行百度. 在Pr ...

  7. Codeforces 980D Perfect Groups 计数

    原文链接https://www.cnblogs.com/zhouzhendong/p/9074164.html 题目传送门 - Codeforces 980D 题意 $\rm Codeforces$ ...

  8. BZOJ2553 [BeiJing2011]禁忌 AC自动机 矩阵

    原文链接http://www.cnblogs.com/zhouzhendong/p/8196279.html 题目传送门 - BZOJ2553 题意概括 引用一下lych大佬的: 在字母只有前alph ...

  9. 04. Pandas 3| 数值计算与统计、合并连接去重分组透视表文件读取

    1.数值计算和统计基础 常用数学.统计方法 数值计算和统计基础 基本参数:axis.skipna df.mean(axis=1,skipna=False)  -->> axis=1是按行来 ...

  10. LR两种录制模式的区别

    loadrunner的录制模式分为如下两种录制模式: HTML-based script,也称为高层录制: URL-based script,也称为底层录制. 两种录制模式的区别:1)脚本不同:高层录 ...