轉發請注明此文章作者與路徑,請尊重原著,違者必究。
本篇文章演示了使用Dockerfile在Linux(ubuntu16.04)系統上構建ASPNetCore應用,並且在一個解決方案中存在多個項目之間的引用。還會使用到私有Nuget包的引用。
構建項目
為了演示更加全面,這里按照簡單的領域驅動模式建立了幾個項目。
Web端為:TestWebDockerOnLinux。使用swagger對外提供API,並且包含了Dockerfile文件。
基礎設施層:TestWebDockerOnLinux.Core。封裝了基礎實體類。
核心邏輯層:TestWebDockerOnLinux.Domain。封裝了業務邏輯。
倉儲層:TestWebDockerOnLinux.Repository。封裝了對數據庫的操作,使用倉儲模式。
因為Web API層在TestWebDockerOnLinux,所以Dockerfile在此項目中。
項目構建都很簡單,你自己可以構建兩個項目,一個為Web,另外一個基礎類庫。為了演示對私有Nuget包的編譯,我們在Web層上引用了以下的私有Nuget包並且引用了本地項目:
你可以按照系列(三)那樣修改Dockerfile,但是這里演示不修改Dockerfile的路徑,貼圖:
下面詳細說明:
Dockerfile它是構建程序的配置文件,首先說明應用所依賴的環境,然后進行編譯,最后運行。整個流程是跟我們平常使用的代碼是一樣的。
運行Dockerfile文件構建鏡像
把項目復制到linux系統,並且進入解決方案的根目錄(不是Web應用里面的目錄)。
並且運行命令【sudo docker build -t testwebdockeronlinux:1.0.0 .】構建鏡像。
構建時,報以下錯誤:
意思是引用私有Nuget包失敗,因為默認都是使用微軟的nuget包地址。所以需要指定一下。
配置私有Nuget包
因為我們的Nuget包有引用公共包路徑,也有引用私有的包路徑。所以要指定nuget的包。
先看看錯誤,錯誤指示當執行【dotnet restore】時報的錯誤,所以看看官網有無指定nuget地址的方法。
可以看到命令兩種方法,分別是[--configfile]、[-s|--source]來指定nuget。--configfile可以指定nuget的配置文件,--source可以指定nuget地址。因為我們是多個地址,所以這里演示指定文件[--configfile]。
步驟是:Web項目下創建nuget.config文件->修改Dockerfile->運行Dockerfile。
首先先創建nuget.config文件,添加私有的以及共有的:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<packageSources>
<add key="AspNetCore" value="https://dotnet.myget.org/F/aspnetcore-ci-dev/api/v3/index.json" />
<add key="AspNetCoreTools" value="https://dotnet.myget.org/F/aspnetcore-tools/api/v3/index.json" />
<add key="NuGet" value="https://api.nuget.org/v3/index.json" />
<!--這里添加自己的包地址-->
<add key="MyNuGet" value="https://xxx/nuget" />
</packageSources>
</configuration>
然后復制nuget.config文件到Docker編譯目錄,以及編譯時指定nuget配置文件,如下:
之后,運行命令【sudo docker build -t testwebdockeronlinux:1.0.0 .】構建鏡像,成功了。
構建容器並運行程序
使用命令運行應用程序:【sudo docker run -d --name testwebdockeronlinux -p 8082:80 testwebdockeronlinux:1.0.0】。
訪問 http://192.168.3.220:8082/swagger/index.html,成功了:
-d是后台運行,--name指定容器名稱,-p指定程序80端口映射到外網8082訪問。
系列文章
Docker在Linux/Windows上運行NetCore文章系列
可以關注本人的公眾號,多年經驗的原創文章共享給大家。