如何編制微軟.Net Core的docker檔案?

banq發表於2018-12-05

Microsoft .NET核心的一個主要特性是它能夠在多個作業系統(Linux,Mac,Windows)和容器化環境中作為跨平臺框架執行。Microsoft努力繼續支援容器化環境並增強CI / CD管道。為了幫助您入門,Microsoft根據常見用例提供了許多不同的docker映象供您使用。在這篇文章中,我將討論在.NET Core中使用容器和Dockerfiles。
本質上,A Dockerfile是一個包含指令集的純文字,每條指令都列出了建立工作映象所需的步驟,.NET Dockerfile也是這樣:
例如:設定環境變數,複製檔案或執行指令碼。無論何時執行指令,都會在初始Docker基礎映象之上建立一個新層。
Docker基礎映象是構建層的起始點映象(通常由具有OS配置的檔案系統結構組成),以建立所有容器映象。
例如,為了將LAMP堆疊作為Docker容器執行,您可以使用Ubuntu 14.04或CentOS 7或任何Linux OS作為基本映象。然後,您將在其上安裝Apache,MySQL和PHP,結果將是您的最終LAMP Docker映象,可以作為容器執行。

基本dockerfile示例:

FROM ubuntu:15.04
COPY . /app
RUN make /app
CMD python /app/app.py


FROM:從ubuntu:15.04 Docker映象建立一個圖層。
COPY:將專案當前目錄中的(複製)檔案新增到Docker主機路徑中。
RUN:用make構建你的應用程式。
CMD:指定在容器中執行的命令。

Dockerfile命令

FROM: FROM指令指示基本映象並初始化後續指令和操作的新構建階段。對於.NET核心應用程式,選擇正確的根映象非常重要:

From microsoft/dotnet:<version>-runtime-deps -


用於部署自包含的部署應用程式(編譯成DLL):

From microsoft/dotnet: <version>-runtime -


用於部署.NET Core控制檯應用程式:

From microsoft/dotnet: <version>-aspnetcore-runtime -


用於部署ASP.NET核心應用程式(編譯成DLL並執行應用程式):

From microsoft/dotnet: <version>-sdk



COPY: COPY指令從中複製新檔案或目錄 (專案根資料夾)並將它們新增到路徑中容器的檔案系統 (Docker主機路徑)。通常,.NET docker檔案位於專案根資料夾中,複製指令將是

COPY <src>... <dest>
COPY . /app


RUN: RUN指令將在當前映象的頂部執行任何命令並繼續執行下一條指令。生成的已提交映象將用於Dockerfile中的下一步。可以使用RUN命令執行.NET核心命令,如dotnet restore,dotnet build命令。

RUN dotnet restore
RUN dotnet build


CMD:CMD命令是為執行容器提供預設值。Dockerfile中只能有一條CMD指令。如果列出多個CMD,則只有最後一個CMD才會生效。

ENTRYPOINT:Entrypoint允許您將配置一個容器為可執行的。

WORKDIR:WORKDIR指令為RUN,CMD,ENTRYPOINT,COPY和ADD指令的設定工作目錄。如果WORKDIR不存在,即使它未在任何後續Dockerfile指令中使用,也將建立它。如果提供了相對路徑,則它將相對於先前WORKDIR指令的路徑。例如:

WORKDIR /app
WORKDIR src
WORKDIR assets


輸出路徑Dockerfile將是/ app / src / assets。

.NETcore docker檔案

FROM microsoft/aspnetcore-build:2.1
WORKDIR /app
COPY . ./app
RUN dotnet restore
RUN dotnet build
WORKDIR /app/src/MyApponDocker
ENTRYPOINT dotnet run


構建它:在PowerShell中切換到上述配置檔案所在目錄,執行
docker build -t dockerApp

Docker現在將開始構建映象,下載並安裝多個元件和包。

執行Docker
構建成功後,執行:

docker run -p 8080:80 dockerApp

這告訴Docker執行名為dockerApp的映象。

重要:
microsoft/dotnet:-runtime-deps - 用於部署自包含的部署應用程式
microsoft/dotnet:-runtime - 用於部署.NET核心控制檯應用程式
microsoft/dotnet:-aspnetcore-runtime - 用於部署ASP.NET核心應用程式
microsoft/dotnet:-sdk - 用於構建.NET Core(或ASP.NET核心應用程式)

.NET Core SDK - 這是構建.NET Core應用程式所需的。
.NET Core Runtime - 這是執行.NET Core應用程式所需的。


結論
現在,dotnet的Docker使.net應用程式能夠在容器化的環境中完全執行而無需任何程式碼更改。與容器化帶來的優勢相結合。

相關文章