如何编制微软.Net Core的docker文件?

18-12-05 banq
         

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应用程序能够在容器化的环境中完全运行而无需任何代码更改。与容器化带来的优势相结合。