Linux服務(wù)器下利用Docker部署.net Core項(xiàng)目的全過(guò)程
發(fā)布ASP.NET Core項(xiàng)目
和普通的項(xiàng)目發(fā)布一樣,將項(xiàng)目發(fā)布到目標(biāo)文件夾中
構(gòu)建Dockerfile文件
在目標(biāo)文件根目錄新建Dockerfile文件(沒(méi)有后綴)
FROM microsoft/dotnet//基于'microsoft/dotnet' 來(lái)構(gòu)建鏡像 COPY . /app //拷貝項(xiàng)目文件夾中的所有文件到docker容器中的app文件夾 這里是兩個(gè)參數(shù) WORKDIR /app //設(shè)置工作目錄為 '/app' 文件夾,即容器啟動(dòng)默認(rèn)的文件夾 EXPOSE 80 //設(shè)置Docker容器對(duì)外暴露80端口 CMD ["dotnet", "Core.Web.dll"] //使用'dotnet Core. Web.dll'來(lái)運(yùn)行應(yīng)用程序
上傳項(xiàng)目文件
1.將項(xiàng)目構(gòu)建為鏡像
將文件上傳到Linux的www目錄下,使用命令構(gòu)建成鏡像
docker build -t testcore . //-t 指定鏡像名 . 表示Dockerfile所在目錄
注意 dockerfile中基于microsoft/aspnetcore或microsoft/dotnet來(lái)構(gòu)建鏡像(dotnet>aspnetcore)需要以服務(wù)器上安裝的鏡像版本做區(qū)分
構(gòu)建成功,在鏡像中可以看到新建的鏡像

2.將鏡像發(fā)布為容器
docker run --name testapp -d -p 8000:80 -v /www:/app testcore --name指定容器名稱(chēng) -d 指定容器后臺(tái)運(yùn)行 -p 指定外部8000端口映射到容器80端口 -v 綁定數(shù)據(jù)卷/www到容器內(nèi)的/app (本地目錄:容器內(nèi)目錄)本地目錄必須為絕對(duì)路徑 testcore鏡像名
3.查看容器是否是否處于運(yùn)行狀態(tài),若啟動(dòng)失敗顯示為exit,可查看日志
docker ps -a //查看所有容器的運(yùn)行狀態(tài) docker exec -it testapp bash //若容器正在運(yùn)行,進(jìn)入容器內(nèi)部 docker logs testapp//若容器未運(yùn)行,查看報(bào)錯(cuò)日志
4.請(qǐng)求網(wǎng)站查看網(wǎng)站是否運(yùn)行成功
curl 0.0.0.0:8000 curl -s -D - localhost:8000 -o /dev/null //查看請(qǐng)求返回信息
最后查看防火墻端口開(kāi)放情況,以及阿里云后臺(tái)安全組端口開(kāi)放情況(如果你是用的阿里云服務(wù)),再通過(guò)外網(wǎng)訪問(wèn)瞅瞅
5.更新代碼
由于在創(chuàng)建容器的時(shí)候映射了數(shù)據(jù)卷,則當(dāng)有靜態(tài)文件更新的時(shí)候,會(huì)自動(dòng)更新到容器內(nèi)。
但是當(dāng)有dll文件更新時(shí),需要手動(dòng)重啟一下容器
docker restart testapp
以上,實(shí)現(xiàn)了將一個(gè)Asp.Net Core MVC項(xiàng)目發(fā)布到docker中的全過(guò)程。目前容器中只有一個(gè)dotnet鏡像,通過(guò)地址訪問(wèn)網(wǎng)站實(shí)際上直接訪問(wèn)的Kestrel服務(wù)器。
一些額外的想法
Kestrel服務(wù)器只是一個(gè)輕量級(jí)的web服務(wù)器,并且不支持基于主機(jī)名的綁定(如果1臺(tái)服務(wù)器部署了多個(gè) ASP.NET Core 站點(diǎn),每個(gè)站點(diǎn)需要使用不同的端口)
出于安全性考慮(包括但不限于適當(dāng)?shù)某瑫r(shí),大小的限制,以及并發(fā)連接限制等問(wèn)題)需要在Kestrel和Internet之間加入一個(gè)反向代理服務(wù)器(IIS,Nginx或者Apache)
下一篇,描述一下我在使用nginx轉(zhuǎn)發(fā)請(qǐng)求給Kestrel時(shí)遇到的問(wèn)題。
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)腳本之家的支持。
相關(guān)文章
HttpRequest Get和Post調(diào)用其他頁(yè)面的方法
HttpRequest Get和Post調(diào)用其他頁(yè)面的方法,需要的朋友可以參考一下2013-03-03
asp.net 身份驗(yàn)證(分目錄驗(yàn)證篇)
在上一篇博文《asp.net中的身份驗(yàn)證(最簡(jiǎn)單篇)》中的身份驗(yàn)證雖然很簡(jiǎn)單,但是有一個(gè)缺點(diǎn),就是訪問(wèn)整個(gè)網(wǎng)站都必須要經(jīng)過(guò)身份驗(yàn)證,而事實(shí)上,很多網(wǎng)站都不會(huì)這么要求的。2009-05-05
配置Visual Studio 以調(diào)試.net framework源代碼
看到.net框架代碼發(fā)布了,興奮了一下,把在Visual Studio 2008上配置的內(nèi)容翻譯了一下,只翻譯了原文的基本步驟,高級(jí)用戶(hù)篇和QA沒(méi)有翻譯。2009-04-04
從外部的js文件中獲取ASPX頁(yè)面的控件ClientID
從外部的js文件中獲取ASPX頁(yè)面的控件ClientID(get control reference from external javascript)2009-02-02
云服務(wù)器下搭建ASP.NET Core環(huán)境
本文給大家分享的是在云服務(wù)器上搭建ASP.NET Core環(huán)境以及成功運(yùn)行官網(wǎng)DEMO的教程,十分的細(xì)致全面,有需要的小伙伴可以參考下。2016-07-07
無(wú)法將類(lèi)型為“System.Web.UI.WebControls.HiddenField”的對(duì)象強(qiáng)制轉(zhuǎn)換為類(lèi)型的錯(cuò)誤的解
無(wú)法將類(lèi)型為“System.Web.UI.WebControls.HiddenField”的對(duì)象強(qiáng)制轉(zhuǎn)換為類(lèi)型的錯(cuò)誤的解決方法2011-12-12
asp.net不用設(shè)置iis實(shí)現(xiàn)url重寫(xiě) 類(lèi)似偽靜態(tài)路由
說(shuō)到不用設(shè)置iis,主要是為了實(shí)現(xiàn)在虛擬主機(jī)或是拿不到iis操作限的時(shí)候,不能添加isap又想實(shí)現(xiàn)類(lèi)似于靜態(tài)化的程序?qū)崿F(xiàn)方式,先聲明,這里最終要實(shí)現(xiàn)的效果是,最終可以用12345.html替換show.aspx?id=12345這樣的地址訪問(wèn)功能,支持任意擴(kuò)展名及無(wú)擴(kuò)展2014-01-01
關(guān)閉子頁(yè)面刷新父頁(yè)面中部分控件數(shù)據(jù)的方法
關(guān)閉子頁(yè)面刷新父頁(yè)面中部分控件數(shù)據(jù),具體的實(shí)現(xiàn)代碼如下,感興趣的朋友可以參考下哈2013-05-05
asp.net core中Cookie和Session的實(shí)現(xiàn)示例
ASP.NET Core用戶(hù)會(huì)話(huà)管理主要通過(guò)Cookie和Session實(shí)現(xiàn),本文主要介紹了asp.net core中Cookie和Session的實(shí)現(xiàn)示例,具有一定的參考價(jià)值,感興趣的可以了解一下2025-01-01

