centos 7 + Net Core 3.0 + Docker 配置說明(不含https)


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 

基本上常用的就這些了,其他的請自行查資料!!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM