vs2017 開發.NetCore部署docker


一、環境

   操作系統:windows 10 64bit

   開發環境:vs2017

   部署環境:docker  — windows

二、准備

  安裝docker:

  見:https://www.cnblogs.com/xiaoerlang90/p/10285434.html

三、新建並發布項目

  打開 vs2017,新建.netCore Web 應用程序,選擇web應用程序,勾選“啟用Docker支持”,點擊確定。

  

新建完成的項目目錄如下:

右鍵項目發布后,選擇發布到文件,這種方式發布的項目只適用於windows平台運行

 

想要項目在linux、osx系統上運行,需要用命令發布,也可能有別的方式,暫時只知道這一種:
1.dos命令轉到項目的主目錄下
2.運行命令:

dotnet publish --runtime ubuntu.16.04-x64 

 --runtime后面跟的是運行時環境的操作系統
3.如果上面的命令成功了,你會看到生成了這樣一個文件夾:bin\Debug\netcoreapp2.0\ubuntu.16.04-x64\publish,這里面的文件就是發布好的項目文件了,我們將publish文件夾拷貝到對應的操作系統下,運行命令dotnet NetCore.dll (NetCore.dll指的是主程序文件),不出意外的話項目就可以正常啟動了,如果出意外的話,請進行以下檢查:

a、發布時輸入的目標系統是否正確 b、服務器是否正確安裝了.net sdk

 四、創建Dockerfile文件

  在發布目錄下創建一個文本文檔Dockerfile.txt ,或者在Linux系統創建一個文件Dockerfile
內容:

# 聲明使用的基礎鏡像
FROM microsoft/dotnet:2.1-sdk-nanoserver-1803 AS base

# 設置工作目錄
WORKDIR /app

# 將本地應用拷貝到 容器 /app/ 目錄下 "./"代表的就是/app 因為dockerfile文件和程序文件都在發布文件夾下 所以兩個目錄是一樣的
COPY ./ ./

#設置環境變量,修改.netCore 默認的80端口
ENV ASPNETCORE_URLS http://+:5000

# 設置導出端口
EXPOSE 5000

# 指定應用入口點 NetCore.dll代表的是主程序文件
ENTRYPOINT ["dotnet", "DockerTest.dll"]

編輯完成后去掉文件的后綴名。

五、創建鏡像並運行

  打開命令界面,cd到發布文件夾下:

  執行命令:

docker build -t mycore . (注意命令中的最后一個點 代表的是命令從你的當前目錄下執行)

  或者:

docker build 發布文件目錄 -t mycore

  其中 mycore為自定義鏡像名稱,如下所示:

  然后繼續執行命令運行:

docker run -it -p 5000:5000 mycore

這里的5000:5000 代表把容器內的5000端口映射到你主機的5000端口

 然后 http://localhost:5000 就可以訪問啦!

六、附docker命令

docker pull microsoft/dotnet    //從docker倉庫拉取一個名稱為“microsoft/dotnet”的鏡像

docker build light    //構建一個名稱為light的容器

docker run hello-world    //運行hello-world容器

docker images    //查看所有鏡像

docker rmi [image_id]    //刪除一個imageid的鏡像

docker rmi $(docker images -q)    //刪除所有鏡像

docker ps -a    //查看所有容器運行狀態

docker rm [container_id]//刪除一個containerid的容器(實例)

docker rm $(docker ps -a -q)   //刪除所有容器

七、修改.NetCore端口號

  修改.net core的默認端口號,除了上文中提到的增加Dockerfile文件中環境變量外,或也可通過修改項目中program.cs文件中的BuildWebHost函數,修改啟動端口號:

WebHost.CreateDefaultBuilder(args)
             .UseUrls("http://*:5000") //修改服務在docker中啟動端口
               .UseKestrel()
               .UseContentRoot(Directory.GetCurrentDirectory())
               .UseIISIntegration()
               .UseApplicationInsights()
            .UseStartup<Startup>()
            .Build();

八、遇到的問題及解決方案:

  docker調試項目時出現“錯誤 CTC1005 Your Docker server host is configured for 'Linux', however your project target 'windows' ”,即:docker配置的環境與項目目標環境不一致。

  切換docker的container類型至“windows”

  后又出現了“嘗試生成Docker鏡像時發生錯誤”,重新配置了切換到Windows環境后的Daemon。

   關於Https重定向的問題可參考:

  https://docs.microsoft.com/en-us/aspnet/core/security/enforcing-ssl?view=aspnetcore-2.2&tabs=visual-studio

  https://github.com/aspnet/Docs/issues/6199


免責聲明!

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



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