天天看點

ASP.NET Core Docker jexus nginx部署-CentOS實踐版

      本文用圖文的方式記錄了我自己搭建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”進入安裝指南

ASP.NET Core Docker jexus nginx部署-CentOS實踐版

   c.根據指南,安裝鏡像(執行指令的時候請加上sudo,如果你不是root)

ASP.NET Core Docker jexus nginx部署-CentOS實踐版
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.登陸後,右上角有一個“管理中心”

ASP.NET Core Docker jexus nginx部署-CentOS實踐版

     d.進入管理中心,點選“加速器”

ASP.NET Core Docker jexus nginx部署-CentOS實踐版

開始前先參照這個文章《CentOS禁止packagekit離線更新服務的辦法》http://www.cnblogs.com/zjoch/p/6500480.html處理,否則出現如下錯誤

ASP.NET Core Docker jexus nginx部署-CentOS實踐版

按提示完成鏡像設定

ASP.NET Core Docker jexus nginx部署-CentOS實踐版
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 
      

 

ASP.NET Core Docker jexus nginx部署-CentOS實踐版

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      
ASP.NET Core Docker jexus nginx部署-CentOS實踐版

5.dotnetcore安裝

   a.打開微軟dotnetcore安裝幫助頁面

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

     選擇你要安裝的OS

ASP.NET Core Docker jexus nginx部署-CentOS實踐版

    按照他的步驟,1,2,3,4安裝就OK了。

ASP.NET Core Docker jexus nginx部署-CentOS實踐版
ASP.NET Core Docker jexus nginx部署-CentOS實踐版
ASP.NET Core Docker jexus nginx部署-CentOS實踐版

    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
      
ASP.NET Core Docker jexus nginx部署-CentOS實踐版
sudo yum install nodejs
      
ASP.NET Core Docker jexus nginx部署-CentOS實踐版
ASP.NET Core Docker jexus nginx部署-CentOS實踐版

    安裝bower工具,參照https://bower.io/#install-bower

sudo npm install -g bower
      
ASP.NET Core Docker jexus nginx部署-CentOS實踐版
ASP.NET Core Docker jexus nginx部署-CentOS實踐版

    安裝gulp 工具(貌似我實踐過程中沒有說必須安裝這個)

sudo npm install gulp -g
      
ASP.NET Core Docker jexus nginx部署-CentOS實踐版

6.Docker 安裝dotnetcore鏡像 

到這裡,假設你的Docker已經安裝完成,以下環境為 Liunx(centos 7)。

sudo docker info
      
ASP.NET Core Docker jexus nginx部署-CentOS實踐版
ASP.NET Core Docker jexus nginx部署-CentOS實踐版

得到指令了吧,切換到指令行視窗運作以下指令來安裝asp.net core 鏡像。(這裡等待時間特别長,你可以去做點其他事情!)

sudo docker pull microsoft/dotnet
      
ASP.NET Core Docker jexus nginx部署-CentOS實踐版
ASP.NET Core Docker jexus nginx部署-CentOS實踐版

鏡像下載下傳完成之後,輸入

sudo docker images

我們檢查一下:

sudo docker images
      
ASP.NET Core Docker jexus nginx部署-CentOS實踐版

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
      
ASP.NET Core Docker jexus nginx部署-CentOS實踐版
ASP.NET Core Docker jexus nginx部署-CentOS實踐版

   主要是用以下幾個指令:

  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
      
ASP.NET Core Docker jexus nginx部署-CentOS實踐版

編輯完成,點選右上角“Save”,點“x”關閉後傳回終端.

建立了應用程式之後,使用

dotnet run

 指令來測試一下我們的應用程式。

dotnet run 
      
ASP.NET Core Docker jexus nginx部署-CentOS實踐版

我們打開浏覽器輸入 http://localhost:5000,來看一下效果。

ASP.NET Core Docker jexus nginx部署-CentOS實踐版

可以看到已經成功運作了。

如果釋出應用程式,我們需要使用 

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
      
ASP.NET Core Docker jexus nginx部署-CentOS實踐版
ASP.NET Core Docker jexus nginx部署-CentOS實踐版

釋出之後 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
      
ASP.NET Core Docker jexus nginx部署-CentOS實踐版
ASP.NET Core Docker jexus nginx部署-CentOS實踐版

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 . 
      
ASP.NET Core Docker jexus nginx部署-CentOS實踐版

運作鏡像

使用如下幾種方式運作:

直接用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
      
ASP.NET Core Docker jexus nginx部署-CentOS實踐版

打開浏覽器測試一下:

ASP.NET Core Docker jexus nginx部署-CentOS實踐版

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
      
ASP.NET Core Docker jexus nginx部署-CentOS實踐版

解壓安裝包

tar -zxvf jexus-5.8.2-x64.tar.gz
      
ASP.NET Core Docker jexus nginx部署-CentOS實踐版

移動到運作目錄

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
      
ASP.NET Core Docker jexus nginx部署-CentOS實踐版

建立網站根目錄

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
      
ASP.NET Core Docker jexus nginx部署-CentOS實踐版

重新開機jexus服務

cd ..
sudo ./jws restart
      

轉發效果,通路80端口

ASP.NET Core Docker jexus nginx部署-CentOS實踐版

10.nginx轉發

   a、 新開一個終端,輸入 sudo yum install nginx -y安裝 nginx。

sudo yum install nginx -y      
ASP.NET Core Docker jexus nginx部署-CentOS實踐版

b、 安裝完成之後,輸入 

nginx -v

檢視是否安裝成功。

ASP.NET Core Docker jexus nginx部署-CentOS實踐版

執行以下指令,啟動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      
ASP.NET Core Docker jexus nginx部署-CentOS實踐版

儲存關閉後,重新加載配置檔案

sudo nginx -s reload
      

然後打開浏覽器通路http://localhost:8080

ASP.NET Core Docker jexus nginx部署-CentOS實踐版

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來通路

ASP.NET Core Docker jexus nginx部署-CentOS實踐版
sudo nginx -s reload
      

如果修改了server_name,reload是無效的,得先停止再啟動

sudo nginx -s stop
sudo nginx
      

e. 測試 nginx 是否運作成功,打開浏覽器,輸入 http://localhost:8080 檢視是否顯示如下界面。

ASP.NET Core Docker jexus nginx部署-CentOS實踐版

整個實踐過程就是上面的内容,希望對大家有所幫助,全文完!

相關參考:

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

繼續閱讀