轉發請註明此文章做者與路徑,請尊重原著,違者必究。html
本篇文章演示了使用Dockerfile在Linux(ubuntu16.04)系統上構建ASPNetCore應用,而且在一個解決方案中存在多個項目之間的引用。還會使用到私有Nuget包的引用。linux
爲了演示更加全面,這裏按照簡單的領域驅動模式創建了幾個項目。web
Web端爲:TestWebDockerOnLinux。使用swagger對外提供API,而且包含了Dockerfile文件。docker
基礎設施層:TestWebDockerOnLinux.Core。封裝了基礎實體類。數據庫
核心邏輯層:TestWebDockerOnLinux.Domain。封裝了業務邏輯。json
倉儲層:TestWebDockerOnLinux.Repository。封裝了對數據庫的操做,使用倉儲模式。ubuntu
由於Web API層在TestWebDockerOnLinux,因此Dockerfile在此項目中。api
項目構建都很簡單,你本身能夠構建兩個項目,一個爲Web,另一個基礎類庫。爲了演示對私有Nuget包的編譯,咱們在Web層上引用瞭如下的私有Nuget包而且引用了本地項目:post
你能夠按照系列(三)那樣修改Dockerfile,可是這裏演示不修改Dockerfile的路徑,貼圖:ui
下面詳細說明:
Dockerfile它是構建程序的配置文件,首先說明應用所依賴的環境,而後進行編譯,最後運行。整個流程是跟咱們日常使用的代碼是同樣的。
把項目複製到linux系統,而且進入解決方案的根目錄(不是Web應用裏面的目錄)。
而且運行命令【sudo docker build -t testwebdockeronlinux:1.0.0 .】構建鏡像。
構建時,報如下錯誤:
意思是引用私有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文章系列
能夠關注本人的公衆號,多年經驗的原創文章共享給你們。