1、新建Core3.0項目
1.1 使用visual studio 2019 創建一個名為core3.web.httpapi 的"ASP.NET Core Web應用程序"


1.2 運行項目,確保可以正常訪問

1.3 launchSettings.json里的部分配置(默認值,未修改,這里只是展示下)
{
"core3.web.httpapi": {
"commandName": "Project",
"launchBrowser": true,
"launchUrl": "weatherforecast",
"applicationUrl": "http://localhost:5000",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development"
}
}
}
}
2、配置Dockerfile
2.1 項目根目錄下創建一個Dockerfile的文件,下圖配置里的8001端口是docker運行端口,上面截圖的5000是launchSettings.json配置的端口(開發環境運行端口),並不是一個意思,當然也可以配置成一樣的
FROM mcr.microsoft.com/dotnet/core/aspnet:3.0-buster-slim
WORKDIR /app
EXPOSE 8001
COPY . .
ENV ASPNETCORE_URLS http://+:8001
ENTRYPOINT ["dotnet", "core3.web.httpapi.dll"]
2.2 配置說明:
FROM :設置鏡像源,暫時沒有找到更小的源,后續有的話再補充
WORKDIR:配置工作目錄
COPY . . :復制發布后的bll文件到app目錄下
EXPOSE 8001 :這里的意思是開放容器內的8001端口,並不是代碼用這個端口
ENV :配置系統環境變量,比如程序環境環境等在這里配置(開發、預發、線上環境)
ENV ASPNETCORE_URLS :同上,這里是配置程序運行端口 如果程序不使用默認的80端口這里一定要設置(程序運行端口)
ENTRYPOINT:啟動入口
2.3 Dockerfile上右鍵點擊屬性,設置問"如果較新則復制" ,目的是發布的時候把Dockerfile復制到發布后的目錄,方便執行docker指令

2.4 完整的項目結構圖

3、Centos服務器端配置
此實例是在centos下編譯+發布,所以要求centos服務器是上至少要安裝docker、netcore 3.0 sdk(非runtime),一般情況會在服務器上裝好Git,這樣本地開發,直接在服務器上用shell腳本pull代碼、編譯、構建、運行docker鏡像(一步到位執行完畢),下面主要說明centos上編譯netcore和運行docker的過程。
3.1、安裝Git 參考:https://www.cnblogs.com/nickchou/p/10931495.html
3.2、安裝docker 參考: https://www.cnblogs.com/nickchou/p/8658541.html
3.3、安裝net core 3.0 sdk ,並查看dotnet版本
sudo rpm -Uvh https://packages.microsoft.com/config/centos/7/packages-microsoft-prod.rpm
sudo yum install dotnet-sdk-3.0
dotnet --version

4、編譯netcore代碼
假設代碼已經在centos上了,不管是通過ftp上傳的還是git pull
4.1 cd命令切換到啟動項目的文件夾,假設路徑是在root下,可根據實際情況修改路徑
cd /root/testdocker/core3.web.httpapi
4.2 編譯當前項目代碼發布到./publish目錄下
dotnet publish -o ./publish -c Release

發布后的文件目錄如下,Dockerfile已經在根目錄下了

5、構建docker鏡像
5.1 cd切換到發布后的目錄下
cd /root/testdocker/core3.web.httpapi/publish
5.2 構建鏡像
docker build -t httpapi:1.0 .
說明:":1.0" 是版本號(也可以不寫,這樣就沒有版本號),注意上面指令后面有一個"." 不能漏,代表當目前目錄的意思
如果出現錯誤:
Error parsing reference: "mcr.microsoft.com/dotnet/core/aspnet:3.0-buster-slim AS base" is not a valid repository/tag: invalid reference format
問題原因:Dockerfile里FROM最后一段寫了 AS base ,這個是docker的新特性multi-stage build,需要Docker17.0.5 以上的版本才能用,VS自動生成出來的Dockerfile里也有這一段。
解決辦法:
1、升級Docker版本,方法有點麻煩,且一般買的服務器(阿里雲、華為雲)默認Docker版本都是1.13.1左右
2、不用multi-stage build的話,直接去掉AS base即可,我們的案例中並不需要

5.3 查看docker鏡像
docker images
可以看到生成了2個鏡像,一個是我們Dockerfile里寫的FROM鏡像,一個是我們自己生成的

6、運行docker鏡像
docker run -d -p 8001:8001 --name myhttpapi httpapi:1.0
6.1 指令說明 :
-d 意思是后台運行
-p 第一個8001是外網端口,第二個8001是docker端口。如果配置80:8001就是外網的80端口映射到docker的8001端口
-name 指定一個別名,這里寫的是myhttpapi
httpapi:1.0 意思是從httpapi這個鏡像的1.0版本運行
注意事項:如果你的服務器是阿里、騰訊、華為雲等,配置的端口一定要在安全組配置里打開,比如下面的8001端口,不然訪問不了

6.2 網頁返回:

源代碼下載:https://files.cnblogs.com/files/nickchou/testdocker.zip
7、Docker 指令擴展
7.1 剛我們步驟6.1發布的docker想看看容器里面的文件,指令如下(指令中的myhttpapi也可以換成容器ID )
docker exec -it myhttpapi bash
查看文件列表
ls

退出容器的快捷鍵 ctrl+p+q ,別忘了執行哦(意思是退出但不關閉容器)
7.2 停止運行的容器
docker stop myhttpapi
7.3 刪除容器ID
docker rm 容器ID
7.4 刪除鏡像,如果鏡像有被使用的話最好先刪除了。
docker rmi 容器ID
7.5 清理懸空容器,一般可以配合7.2~7.4的指令用,清理停止的、無效的容器
docker system prune
7.6 查看鏡像
docker images
7.7 查看運行的鏡像,加-a 意思是停止的容器也列出來,不加-a只列正在運行的
docker ps -a
基本上常用的就這些了,其他的請自行查資料!!
