.net core以docker部署Linux

.NetCore程序部署Docker通常有兩種模式:
1、在本地編譯成dll文件后通過rz命令或工具上傳到服務(wù)器上,然后構(gòu)建Docker鏡像再運(yùn)行容器。該方案和以前.net framework時部署windows類似,手工復(fù)制文件與重啟。
2、在服務(wù)端直接通過Git獲取最新源代碼后編譯打包,然后再構(gòu)建Docker鏡像再運(yùn)行容器。該方案免去了往服務(wù)器復(fù)制文件這步操作,但是服務(wù)器環(huán)境需要安裝.Net Core SDK 來編譯源代碼。

接下來我們將分別使用方案1和方案2制作鏡像并生成容器。

1.項目創(chuàng)建

首先Visual studio2019創(chuàng)建一個.netCore Web應(yīng)用,選擇包含Docker文件(linux)




DockerFile選擇始終復(fù)制



接下來我們分別使用方案1和方案2部署

2.方案1(手動發(fā)布):

編寫dockerFile內(nèi)容如下:
FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443
COPY . .
ENTRYPOINT ["dotnet", "netCore01.dll"]
VS解決方案,發(fā)布


上傳文件
我們的發(fā)布目錄在:源碼項目目錄\bin\Release\netcoreapp3.1\publish
發(fā)布完成后,我們到發(fā)布目錄,將發(fā)布后的publish文件夾中所有上傳到linux目錄/home/wwwroot/netCore01_01
我這里是將publish中文件打包為publish.rar,然后通過rz命令上傳到/home/wwwroot/netCore01_01目錄,然后通過 rar x publish.rar解壓,你也可以使用xftp/Secure file transfer client工具上傳更易上手
解壓完成后,我們執(zhí)行鏡像構(gòu)建
進(jìn)入到個net-core項目所在目錄執(zhí)行下面的命令(docker file所在目錄)
docker build -t netcore01-v1 . *
(注意后面這個空格和.不能省,build是先找dockfile)
build鏡像時會自動聯(lián)網(wǎng)下載所面的基礎(chǔ)鏡像,如果機(jī)器無法聯(lián)網(wǎng)可以自行下載并pull到本機(jī),或者搭建私有鏡像倉庫解決這個問題。
構(gòu)建過程如下,鏡像aspnet:3.1-buster-slim如果提前下載過,整個build過程約10秒鐘

容器生成
docker run --name netcore_v1_01 -d -p 7001:80 netcore01-v1
生成后我們用宿主機(jī)IP+70001端口就可以訪問我們的服務(wù)了,80是容器內(nèi)部端口

3.方案2(源代碼模式):

此模式通常是配合使用jenkins+git自動化構(gòu)建,jenkins+git的我們下篇專門講解,本例我們采用模擬源代碼已經(jīng)拉到linux后的場景,更便于我們理解后面與jenkins整合是如何自動構(gòu)建的。

vs 的dockerfile如下(VS生成后一句也沒修改)

FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim AS base
WORKDIR /app
EXPOSE 80
EXPOSE 443
FROM mcr.microsoft.com/dotnet/core/sdk:3.1-buster AS build
WORKDIR /src
COPY ["netCore01.csproj", ""]
RUN dotnet restore "./netCore01.csproj"
COPY . .
WORKDIR "/src/."
RUN dotnet build "netCore01.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "netCore01.csproj" -c Release -o /app/publish
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "netCore01.dll"]

我們用命令對源代碼生成鏡像
1.先將代碼打包成rar
2.使用rz命令上傳到/home/wwwroor/netCore01目錄(目錄結(jié)構(gòu)自行通過mkdir創(chuàng)建)
3.使用rar命令解壓(如果linux上沒有安裝,自行安裝該程序)rar x netCore01.rar 建議初學(xué)者使用工具上傳
4.編譯與構(gòu)建:
docker build -t netcore01 .
注意后面的.不能省略(代表當(dāng)前目錄),netcore01是image名稱,可以自行取名,但必須全部小寫字母。
然后系統(tǒng)根據(jù)docker文件描述自動執(zhí)行下載,編譯及打包,這種模式步驟制作鏡像時步驟較多,大概10多個步驟,完全完成需要2分鐘左右。

編譯完成后,查看下鏡像名稱:
docker images


然后我們可以根據(jù)鏡像創(chuàng)建容器:
docker run --name netcore_ins_01 -d -p 9001:80 netcore01
其中9001為對外映射的端口,我們可以直接用宿主機(jī)IP:9001訪問該服務(wù)
docker ps -a 查看docker 容器

訪問URL可以看到返回JSON

4.總結(jié)

通常個人開發(fā)或練習(xí)采用方案1即可,當(dāng)我們開發(fā)團(tuán)隊協(xié)同工作時將使用方案2的升級版本(jenkins+git自動化)
在微服務(wù)大行其道的今天,springboot+springcloud聲勢浩大,.net framework已經(jīng)被虐的無地自容,.net core+容器+自動化還能勉強(qiáng)撐撐場面,也算為是.net未來 保留了一線生機(jī)和希望。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容