一、環境
操作系統: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重定向的問題可參考: