Docker容器執行ASP.NET Core
最近要學習的知識太多,都不知道先學哪些了,原本計劃這篇部落格是寫xamarin.forms中的listview用法,關於listview的用法簡書上有一篇介紹的也比較詳細,所以暫時先緩一緩,屬於次要任務,等以後再寫。本週在萬能的淘寶找了寫關於區塊鏈的教程,同時瞭解了下.net core。最近一兩年對C#技術跟進不多,側重點是Java,之前出.net core1.0的時候覺得.net core還不完善,所以就沒學,沒想到.net core這麼快已經要到3.0了。畢竟自己是C#出身,一精多轉,不能忘本,所以計劃在未來一段時間把.net core也瞭解一下,大致看了一下,與.net的部分也是有很多交集,可能最大的特點就是跨平臺部分。本篇先介紹下使用docker執行asp.net core應用。
一、新建asp.net core應用
這裡新建了一個myWebApp的asp.net core的應用。
二、新增docker支援
新增docker支援有兩種方式,一是在新建專案時設定啟用docker支援,二是在已建立的專案上右鍵->新增->docker支援。
同時需要選擇是window平臺還是linux平臺,如果是window系統就需要設定window平臺,同時docker也需要設定為window containers。如下圖報image operating system "windows" cannot be used on this platform錯誤,就是由於選擇的平臺不對。
三、建立docker映象
新增docker支援後會自動生成dockerfile檔案,這裡有一個坑,在COPY ["myWebApp/myWebApp.csproj", "myWebApp/"]行中需要注意是myWebApp/myWebApp.csproj,是myWebApp目錄下的myWebApp.csproj工程檔案,所以需要把建立好的dockerfile拷貝到工程檔案目錄下。
#Depending on the operating system of the host machines(s) that will build or run the containers, the image specified in the FROM statement may need to be changed. #For more information, please see https://aka.ms/containercompat FROM microsoft/dotnet:2.2-aspnetcore-runtime-nanoserver-sac2016 AS base WORKDIR /app EXPOSE 80 FROM microsoft/dotnet:2.2-sdk-nanoserver-sac2016 AS build WORKDIR /src COPY ["myWebApp/myWebApp.csproj", "myWebApp/"] RUN dotnet restore "myWebApp/myWebApp.csproj" COPY . . WORKDIR "/src/myWebApp" RUN dotnet build "myWebApp.csproj" -c Release -o /app FROM build AS publish RUN dotnet publish "myWebApp.csproj" -c Release -o /app FROM base AS final WORKDIR /app COPY --from=publish /app . ENTRYPOINT ["dotnet", "myWebApp.dll"] View Code
在專案目錄下使用docker命令build生成docker映象,docker build -t aspnetdemo .,(aspnetdemo後面有個.,表示dockerfile路徑)。這裡build了一個aspnetdemo的映象,由於首次執行dockerfile,一些.net core基礎映象需要下載,而且家裡網速也比較慢,下載的過程等了好久。
四、啟動容器
在第三步映象已經建立完成,使用docker images可以看到已建立好的映象,然後就是使用docker run啟動容器執行.net core應用。
在瀏覽器中山輸入 http://localhost:8080/ ,可以看到如下頁面。
微軟官方文件寫使用 Windows 容器時,必須直接在瀏覽器中轉到容器 IP 地址,這裡使用了-p映射了埠,所以直接輸入 http://localhost:8080/ 是可以訪問的。
下面使用ipconfig查詢容器對映的docker的ip,然後在瀏覽器輸入docker的ip也是可以訪問。
五、小結
本篇只是簡單介紹了docker部署asp.net core應用,.後續net core可能會連資料庫、redis等容器,那樣就涉及到容器互聯,容器編排技術以及devops持續整合,往後擴充套件又可以擴充套件好多,這些以後慢慢學。