课程评价 (2)

请对课程作出评价:
0/300

学员评价

用户1***217
2018-12-28
收货良多
张***友
2018-12-26
入门docker 容器开发的好教程,推荐
40分钟

.NET Core:入门的最简单方法

.NET Core:入门的最简单方法

在创建 Docker 映像之前,需要容器化应用程序。 可在 Linux、MacOS 或 Windows 上创建该映像。 完成该操作最快、最简单的方法是使用 .NET Core。

第一个 .NET Core Docker 应用

系统必备

完成本教程:

.NET Core 2.1 SDK

有关支持 .NET Core 2.1 的操作系统、不支持的 OS 版本和生命周期策略链接的完整列表,请参阅 .NET Core 2.1 - 支持的 OS 版本

  • 安装常用的代码编辑器(如果尚未安装)。

需要安装代码编辑器? 试用 Visual Studio

安装 Docker 客户端

安装 Docker 17.06 或更高版本的 Docker 客户端。

可在以下位置安装 Docker 客户端:

创建 .NET Core 2.1 控制台应用进行 Docker 化

打开命令提示符,创建一个名为“Hello”的文件夹。 导航到创建的文件夹,并键入以下内容:

dotnet new console
dotnet run

让我们进行快速演练:

1 . $ dotnet new console

dotnet new 会创建一个最新的 Hello.csproj 项目文件,其中包含生成控制台应用所必需的依赖项。 它还将创建 Program.cs,这是包含应用程序的入口点的基本文件。

Hello.csproj

项目文件指定还原依赖项和生成程序所需的一切。

- `OutputType` 标记指定我们要生成的可执行文件,即控制台应用程序。
- `TargetFramework` 标记指定要定位的 .NET 实现代码。 在高级方案中,可以指定多个目标框架,并在单个操作中生成到指定框架。 在本教程中,针对 .NET Core 2.0 进行生成。

Program.cs

程序通过 using System 启动。 此语句的意思是“将 System 命名空间中的所有内容都纳入此文件的作用域”。 System 命名空间包括基本结构,如 string 或数值类型。

接着定义一个名为 Hello 的命名空间。 可以将命名空间更改为任何喜欢的名称。 在该命名空间中定义了一个名为 Program 的类,其中 Main 方法将字符串数组作为其参数。 此数组包含在调用编译的程序时所传递的参数列表。 在我们的示例中,该程序只会在控制台中写入 “Hello World!”。

2 . $ dotnet build

在 .NET Core 2.1 中,dotnet new 运行 dotnet build 命令生成项目及其所有依赖项。 通过 NuGet(.NET 包管理器)调用还原依赖项树。 NuGet 执行下列任务:

- 分析 Hello.csproj 文件
- 下载文件依赖项(或从计算机缓存中获取)
- 写入 obj/project.assets.json 文件

project.assets.json 文件是一组完整的 NuGet 依赖项关系图、绑定解决方法及其他应用元数据。 此必需文件由其他工具(如dotnet run)用于正确处理源代码。

3 . $ dotnet run

dotnet run 调用 dotnet build来确认生成成功,然后调用 dotnet <assembly.dll> 来运行应用程序。

$ dotnet run  Hello World!

使 .NET Core 应用程序 Docker 化

Hello .NET Core 控制台应用已成功在本地运行。 现在,可进一步在 Docker 中生成和运行应用。

第一个 Dockerfile

打开文本编辑器并开始操作! 仍从生成了应用的 Hello 目录中进行操作。

为 Linux 或 Windows 容器 向新文件添加以下 Docker 指令。 完成后,将其保存在 Hello 目录的根目录中作为 Dockerfile,并且不使用扩展名(可能需要将文件类型设置为 All types (*.*) 或类似的类型)。

FROM microsoft/dotnet:2.1-sdk
WORKDIR /app

# copy csproj and restore as distinct layers
COPY *.csproj ./
RUN dotnet restore

# copy and build everything else
COPY . ./
RUN dotnet publish -c Release -o out
ENTRYPOINT ["dotnet", "out/Hello.dll"]

Dockerfile 包含按顺序运行的 Docker build 指令。

第一个指令必须为 FROM。 此指令用于初始化新的生成阶段,并为剩余指令设置基础映像。 多拱形标记跟根据 Docker for Windows 容器模式 请求 Windows 或 Linux 容器。 本示例的基础映像是 microsoft/dotnet 存储库中的 2.1-sdk 映像,

FROM microsoft/dotnet:2.1-sdk

WORKDIR 指令为剩余的任意 RUN、CMD、ENTRYPOINT、COPY 和 ADD Dockerfile 指令设置工作目录。 如果不存在,则会创建该目录。 在本例中,WORKDIR 设置为应用目录。

WORKDIR /app

COPY 指令从源路径复制新文件或目录,并将它们添加到目标容器文件系统。 使用此指令中,可将 C# 项目文件复制到容器。

COPY *.csproj ./

RUN 指令在当前映像之上的一个新层中执行任何命令,并提交结果。 最终提交的映像用于 Dockerfile 中的后续步骤。 本例运行 dotnet restore 来获取 C# 项目文件所需的依赖项。

RUN dotnet restore

此 COPY 指令将剩余文件复制到新中的容器。

COPY . ./

本例使用 RUN 指令发布应用。 dotnet publish 命令用于编译应用程序、读取项目文件中指定的所有依赖项并将生成的文件集发布到目录。 此处使用 Release 配置和到默认目录的输出来发布应用。

RUN dotnet publish -c Release -o out

ENTRYPOINT 指令支持以可执行文件的形式运行容器。

ENTRYPOINT ["dotnet", "out/Hello.dll"]

现在,生成的 Dockerfile 可:

  • 将应用复制到映像
  • 作为应用对映像的依赖项
  • 生成作为可执行文件运行的应用

生成并运行 Hello .NET Core 2.1 应用

重要的 Docker 命令

以下 Docker 命令非常重要:

生成和运行

已编写 dockerfile;现在 Docker 可生成应用,然后运行容器。

docker build -t dotnetapp-dev .
docker run --rm dotnetapp-dev Hello from Docker

docker build 命令的输出应类似于以下控制台输出:

Sending build context to Docker daemon   72.7kB
Step 1/7 : FROM microsoft/dotnet:2.0-sdk
 ---> d84f64b126a6
Step 2/7 : WORKDIR /app
 ---> Using cache
 ---> 9af1fbdc7972
Step 3/7 : COPY *.csproj ./
 ---> Using cache
 ---> 86c8c332d4b3
Step 4/7 : RUN dotnet restore
 ---> Using cache
 ---> 86fcd7dd0ea4
Step 5/7 : COPY . ./
 ---> Using cache
 ---> 6faf0a53607f
Step 6/7 : RUN dotnet publish -c Release -o out
 ---> Using cache
 ---> f972328318c8
Step 7/7 : ENTRYPOINT dotnet out/Hello.dll
 ---> Using cache
 ---> 53c337887e18
Successfully built 53c337887e18
Successfully tagged dotnetapp-dev:latest

可在输出中看到,Docker 引擎使用 Dockerfile 生成容器。

docker run 命令的输出应类似于以下控制台输出:

Hello World!

祝贺你! 你刚才已:

  • 创建本地 .NET Core 应用
  • 创建 Dockerfile 以生成第一个容器
  • 生成并运行已 Docker 化的应用