?因?yàn)槲沂菑氖铝宋迥闏#工作的開(kāi)發(fā),雖然最近不怎么用C#了,為了后續(xù)能用得上,簡(jiǎn)單整理了一下使用dockerfile來(lái)部署一個(gè)非常微軟最基本的netcore api項(xiàng)目,親測(cè)成功,感興趣的朋友也可以學(xué)習(xí)一下。
1、創(chuàng)建一個(gè)NetCore API項(xiàng)目
首先創(chuàng)建一個(gè)netcore的api項(xiàng)目因?yàn)楸容^簡(jiǎn)單就不介紹。
2、云服務(wù)部署
2.1 首先登錄云服務(wù)器創(chuàng)建一個(gè)測(cè)試目錄
mkdir /home/netCoreDemo/webapp
使用Linux的ftp工具將Visualstudio發(fā)布好的部署包上傳到云服務(wù)器的/home/netCoreDemo/webapp目錄中去,
2.2 新建dockerfile文件用來(lái)構(gòu)建鏡像。
內(nèi)容如下:
# 添加基礎(chǔ)鏡像:docker會(huì)從網(wǎng)絡(luò)下載這個(gè)鏡像
FROM mcr.microsoft.com/dotnet/aspnet:3.1 AS base
FROM mcr.microsoft.com/dotnet/sdk:3.1 AS build
ENV ASPNETCORE_URLS=http://+:28080 #解決下面報(bào)錯(cuò)的問(wèn)題
#容器中系統(tǒng)的工作空間
WORKDIR /webapp
#拷貝當(dāng)前文件夾下的文件到容器中系統(tǒng)的工作空間(注意:“.”后面有空格)
COPY . /webapp
#設(shè)置Docker容器對(duì)外暴露的端口
EXPOSE 28080
#容器中使用 ["dotnet","系統(tǒng)啟動(dòng)的dll"] 來(lái)運(yùn)行應(yīng)用程序
#使用ENTRYPOINT ["dotnet","系統(tǒng)啟動(dòng)的dll"]
#也可以使用 CMD ["dotnet","系統(tǒng)啟動(dòng)的dll"]推薦使用ENTRYPOINT
ENTRYPOINT ["dotnet", "test.dll"]
2.3 構(gòu)建鏡像
當(dāng)前dockerfile目錄執(zhí)行構(gòu)建鏡像命令
build -f dockerfile -t xm/netcoredemo:1.0 .

2.4 運(yùn)行鏡像
啟動(dòng)運(yùn)行鏡像,推薦增加 -d參數(shù) 后臺(tái)啟動(dòng)
docker run --name netcoredemo -p 28080:28080 xm/netcoredemo:1.0

后臺(tái)啟動(dòng)命令
docker run -d --name netcoredemo -p 28080:28080 xm/netcoredemo:1.0
服務(wù)器直接測(cè)試接口是否正常
curl http://127.0.0.1:28080/weatherforecast

外網(wǎng)訪問(wèn)測(cè)試準(zhǔn)備條件
確保你的云服務(wù)器外網(wǎng)端口開(kāi)放
防火墻也要注意開(kāi)放28080端口或者關(guān)閉防火墻
瀏覽器訪問(wèn):
http://你的公網(wǎng)IP:28080/weatherforecast?

刪除容器,需要先停止容器,然后再刪除
docker stop netcoredemo #先停止
docker rm netcoredemo #刪除容器
刪除鏡像
docker rmi xm/netcoredemo:1.0
部署可能遇到的問(wèn)題 on the IPv6 loopback interface: 'Cannot assign requested address'
解決方案:
dockerfile增加這一行配置,因?yàn)檫@邊只是單純測(cè)試目的,不考慮使用nginx做代理。
ENV ASPNETCORE_URLS=http://+:28080