成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

在Linux系統(tǒng)中以單容器安裝Nginx+ASP.NETCore的方法

這篇文章主要介紹了在Linux系統(tǒng)中以單容器安裝Nginx+ASP.NET Core的方法,具有一定借鑒價(jià)值,需要的朋友可以參考下。希望大家閱讀完這篇文章后大有收獲。下面讓小編帶著大家一起了解一下。

讓客戶(hù)滿(mǎn)意是我們工作的目標(biāo),不斷超越客戶(hù)的期望值來(lái)自于我們對(duì)這個(gè)行業(yè)的熱愛(ài)。我們立志把好的技術(shù)通過(guò)有效、簡(jiǎn)單的方式提供給客戶(hù),將通過(guò)不懈努力成為客戶(hù)在信息化領(lǐng)域值得信任、有價(jià)值的長(zhǎng)期合作伙伴,公司提供的服務(wù)項(xiàng)目有:國(guó)際域名空間、雅安服務(wù)器托管、營(yíng)銷(xiāo)軟件、網(wǎng)站建設(shè)、偏關(guān)網(wǎng)站維護(hù)、網(wǎng)站推廣。

推薦在生產(chǎn)環(huán)境中使用反向代理服務(wù)器轉(zhuǎn)發(fā)請(qǐng)求到Kestrel Http服務(wù)器,實(shí)踐將Nginx --->ASP.NET Core 部署架構(gòu)容器化的過(guò)程。

Nginx->ASP.NET Coe部署架構(gòu)容器化

在Docker中部署Nginx--->ASP.NETCore 有兩種選擇, 第一種是在單容器內(nèi)部署Nginx+ASP.NET Core, 這是本文著重要講述的,另外一種是以獨(dú)立容器分別部署Nginx和ASP.NET Core,容器之間通過(guò)Docker內(nèi)建的network bridge完成通信(請(qǐng)關(guān)注后續(xù)博文)。

在Linux系統(tǒng)中以單容器安裝Nginx+ASP.NET Core的方法 本次實(shí)踐將會(huì)使用.NET Core CLI 創(chuàng)建默認(rèn)的web應(yīng)用
mkdir app
cd app
dotnet new web
dotnet restore
dotnet build

之后將項(xiàng)目發(fā)布到指定目錄(dotnet publish), 發(fā)布產(chǎn)生的文件將會(huì)用于鏡像打包。

相關(guān)教程:Linux視頻教程

在Linux系統(tǒng)中以單容器安裝Nginx+ASP.NET Core的方法 構(gòu)建鏡像

本次將以 ASP.NETCore Runtime Image【mcr.microsoft.com/dotnet/core/aspnet:2.2】 作為基礎(chǔ)鏡像, 該鏡像包含.NET Core Runtime、ASP.NET Core框架組件、依賴(lài)項(xiàng), 該鏡像為生產(chǎn)部署做了一些優(yōu)化。

坑1:本次部署的是web app,不要使用【mcr.microsoft.com/dotnet/core/runtime:2.2】作為基礎(chǔ)鏡像,啟動(dòng)容器會(huì)報(bào)錯(cuò):

It was not possible to find any compatible framework version

The specified framework 'Microsoft.AspNetCore.App', version '2.2.0' was not found.

- Check application dependencies and target a framework version installed at:

/usr/share/dotnet/

- Installing .NET Core prerequisites might help resolve this problem:

https://go.microsoft.com/fwlink/?LinkID=798306&clcid=0x409

- The .NET Core framework and SDK can be installed from:

https://aka.ms/dotnet-download

因?yàn)樵摶A(chǔ)鏡像不包含ASP.NET Core框架組件。

本次Dokefile的定義將會(huì)包含nginx,在容器內(nèi)啟用Nginx標(biāo)準(zhǔn)配置代理請(qǐng)求到Kestrel:

FROM mcr.microsoft.com/dotnet/core/aspnet:2.2
RUN apt-get update
RUN apt-get install -y nginx
WORKDIR /app
COPY bin/Debug/netcoreapp2.2/publish .
COPY ./startup.sh .
RUN chmod 755 /app/startup.sh
RUN rm /etc/nginx/nginx.conf
COPY nginx.conf /etc/nginx
 ENV ASPNETCORE_URLS http://+:5000
EXPOSE 5000 80
 CMD ["sh", "/app/startup.sh"]

Line 1        指定基礎(chǔ)鏡像

Line 3-4     從Debian package management store安裝Nginx

Line 6-7     設(shè)置工作目錄,放置ASP.NET Core WebApp部署包

Line 9-10   設(shè)置啟動(dòng)腳本

Line 12-13 設(shè)置nginx配置文件

Line 15-16 設(shè)置ASP.NETCore Kestrel在5000端口上監(jiān)聽(tīng), 暴露5000,80 端口給容器外部

Line 18 稍后給出啟動(dòng)腳本

tip: 需要理解容器內(nèi)是一個(gè)獨(dú)立的linux環(huán)境,Dockfile中EXPOSE用于指示容器打算暴露的端口。

       這里可只暴露80端口給外部,但是必須給ASPNETCORE_URLS定義一個(gè)非80端口,作為容器內(nèi)kestrel監(jiān)聽(tīng)端口。

最終(tree -L 1)輸出的app目錄結(jié)構(gòu)如下

.
├── app.csproj
├── appsettings.Development.json
├── appsettings.json
├── bin
├── Dockerfile
├── nginx.conf
├── obj
├── Program.cs
├── Properties
├── Startup.cs
└── startup.sh
在Linux系統(tǒng)中以單容器安裝Nginx+ASP.NET Core的方法 Nginx配置

創(chuàng)建以上Dockerfile中需要的nginx配置文件,在同一目錄,vim nginx.conf 創(chuàng)建文件:

worker_processes 4;
events { worker_connections 1024; }
 http {
    sendfile on;
    upstream app_servers {
        server 127.0.0.1:5000;
    }
    server {
        listen 80;
        location / {
            proxy_pass         http://app_servers;
            proxy_redirect     off;
            proxy_set_header   Host $host;
            proxy_set_header   X-Real-IP $remote_addr;
            proxy_set_header   X-Forwarded-For $proxy_add_x_forwarded_for;
            proxy_set_header   X-Forwarded-Host $server_name;
        }
    }
}

Line 8-10    定義一組服務(wù)器(這里只有webapp), 資源名稱(chēng)(app_servers)可用在本文件任意位置。

Line 13       通知Nginx在80端口監(jiān)聽(tīng)

Line 15-22  指示所有的請(qǐng)求都需要被代理到app_servers

總之,這個(gè)文件定義了Nginx在80端口監(jiān)聽(tīng)外部請(qǐng)求,并將請(qǐng)求轉(zhuǎn)發(fā)給同一容器的5000端口。

在Linux系統(tǒng)中以單容器安裝Nginx+ASP.NET Core的方法 啟動(dòng)腳本

對(duì)于Docker容器,只能使用一個(gè)CMD(或ENTRYPOINT定義),但是這種反向代理配置需要啟動(dòng)Nginx和Kestrel, 所以我們定義一個(gè)腳本去完成這兩個(gè)任務(wù)

#!/bin/bash
service nginx start
dotnet /app/app.dll

相關(guān)教程:docker視頻教程

在Linux系統(tǒng)中以單容器安裝Nginx+ASP.NET Core的方法 構(gòu)建鏡像

docker build -t example/hello-nginx .

該鏡像名稱(chēng)為 example/hello-nginx  觀察輸出,會(huì)看到Dockerfile 中定義的每一步輸出。

該鏡像構(gòu)建Dockerfile與vs docker tool生成的dockerfile進(jìn)行對(duì)比,該文件生成的鏡像更小,充分利用了鏡像分層的理念。

在Linux系統(tǒng)中以單容器安裝Nginx+ASP.NET Core的方法 運(yùn)行鏡像

docker run --name test -it -d -p 8080:80 example/test

該容器名稱(chēng)為test, 現(xiàn)在可從 http://localhost:8080 端口訪(fǎng)問(wèn)webapp, 通過(guò)curl -s -D - localhost:8080 -o /dev/null 驗(yàn)證

通過(guò)shell終端進(jìn)入容器內(nèi)部, 可進(jìn)一步分別探究Nginx和Kestrel服務(wù):

docker exec -it test bash

# curl -s -D - localhost:80 -o /dev/null
HTTP/1.1 200 OK
Server: nginx/1.6.2
Date: Fri, 24 Feb 2017 14:45:03 GMT
Content-Type: text/html; charset=utf-8
Transfer-Encoding: chunked

# curl -s -D - localhost:5000 -o /dev/null
HTTP/1.1 200 OK
Date: Fri, 24 Feb 2017 14:45:53 GMT
Transfer-Encoding: chunked
Content-Type: text/html; charset=utf-8
Server: Kestrel

tip:對(duì)于正在運(yùn)行的容器,可使用docker exec -it  [container_id] [command]  進(jìn)入容器內(nèi)部探究容器

對(duì)于啟動(dòng)失敗的容器,可使用docker logs [container_id]  查看容器輸出日志

了解一下docker的網(wǎng)絡(luò)基礎(chǔ)知識(shí):

在Linux系統(tǒng)中以單容器安裝Nginx+ASP.NET Core的方法

當(dāng)Docker守護(hù)進(jìn)程以其默認(rèn)的配置參數(shù)在宿主機(jī)啟動(dòng)時(shí),會(huì)創(chuàng)建一個(gè)名為docker0的Linux網(wǎng)橋設(shè)備, 該網(wǎng)橋會(huì)自動(dòng)分配滿(mǎn)足標(biāo)準(zhǔn)的私有IP段的隨機(jī)IP直至和子網(wǎng), 該子網(wǎng)決定了所有新創(chuàng)建容器將被分配的容器IP地址所屬網(wǎng)段。

可使用 docker inspect [container_id] 查看network部分配置:

---- 截取自 docker inspect [container_id]的輸出---

"Networks": {
                "bridge": {
                    "IPAMConfig": null,
                    "Links": null,
                    "Aliases": null,
                    "NetworkID": "a74331df40dc8c94483115256538304f1cbefe9f65034f20780a27271e6db606",
                    "EndpointID": "4f35ea62c1715bd9f6855bc82ada06e1bf5e58291dabb42e92ebc9552c6f017b",
                    "Gateway": "172.17.0.1",
                    "IPAddress": "172.17.0.3",
                    "IPPrefixLen": 16,
                    "IPv6Gateway": "",
                    "GlobalIPv6Address": "",
                    "GlobalIPv6PrefixLen": 0,
                    "MacAddress": "02:42:ac:11:00:03",
                    "DriverOpts": null
                }
            }

其中列出的NetworkID 正是 docker network ls 名為bridge的網(wǎng)橋, 這便是默認(rèn)建立的docker0 網(wǎng)橋(docker inspect networkid 可繼續(xù)探究)。

在Linux系統(tǒng)中以單容器安裝Nginx+ASP.NET Core的方法正如上面所說(shuō),ASP.NET Core有兩種容器化反向代理部署架構(gòu),后續(xù)將會(huì)實(shí)踐以獨(dú)立容器分別部署Nginx、ASP.NET Core。

感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享在Linux系統(tǒng)中以單容器安裝Nginx+ASP.NET Core的方法內(nèi)容對(duì)大家有幫助,同時(shí)也希望大家多多支持創(chuàng)新互聯(lián),關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,遇到問(wèn)題就找創(chuàng)新互聯(lián),詳細(xì)的解決方法等著你來(lái)學(xué)習(xí)!

文章名稱(chēng):在Linux系統(tǒng)中以單容器安裝Nginx+ASP.NETCore的方法
瀏覽路徑:http://jinyejixie.com/article18/jpdhdp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供微信公眾號(hào)、網(wǎng)站導(dǎo)航外貿(mào)網(wǎng)站建設(shè)、小程序開(kāi)發(fā)品牌網(wǎng)站建設(shè)、外貿(mào)建站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)
赫章县| 巴林右旗| 云林县| 屯门区| 壶关县| 唐海县| 礼泉县| 荣昌县| 香港 | 乐东| 凯里市| 确山县| 南木林县| 许昌县| 桂平市| 油尖旺区| 英超| 昌黎县| 蒲城县| 高阳县| 兴安盟| 平江县| 友谊县| 邯郸市| 吉隆县| 沭阳县| 平谷区| 应用必备| 中卫市| 京山县| 三亚市| 富阳市| 平顺县| 平武县| 宣化县| 西平县| 蓝田县| 沧州市| 祁门县| 昭觉县| 靖远县|