十九、部署和托管
在本章中,我们将涵盖以下主题:
- 部署选项
- 举办一个 ASP。 IIS 上的 asp.NET Core web 应用
- 举办一个 ASP。 Kestrel 上的 NET Core web 应用
- 举办一个 ASP。 Azure 上的 NET Core web 应用
- 举办一个 ASP。 Docker 容器中的 NET Core web 应用
All examples in this chapter can be found at the following GitHub repo: https://github.com/polatengin/B05277/tree/master/Chapter19.
部署选项
在。net Core 项目的开发期间或之后,我们将其部署到所需的环境中,例如测试、分段、预开发或开发。
.NET Core 应用可以使用以下选项部署到环境中:
- 优化选项
- 调试
- 释放
- 构建选项
- 框架依赖
- 自包含的
准备
在。net 中有两种不同的构建模式:调试和发布。
如果采用 Release 模式,. net Core 编译器可以做很多优化。 Debug 模式在已编译的程序集中包含大量额外的代码,以便开发人员在调试应用时更容易。 Release 模式是调试模式的剥离和额外优化版本。
通常,我们使用 Debug 模式来调试项目,使用 Release 模式来调试生产环境的最终构建。
让我们通过在项目的文件夹中执行以下命令来创建一个示例项目,并检查这些选项之间的差异:
dotnet new web
The example project can be found at https://github.com/polatengin/B05277/tree/master/Chapter19/0-GettingStarted.
怎么做……
- 创建一个名为
Deploy.sh
的新文件,并添加以下内容:
dotnet run
- 在终端/命令提示符窗口中使用如下命令运行
Deploy.sh
文件:
./Deploy.sh
dotnet run
命令从csproj
文件开始编译项目,并包含编译过程中的所有.cs
文件。 执行dotnet run
命令后,终端/命令提示符窗口应该显示如下消息:
Hosting environment: Production
Content root path: C:/B05277/Chapter19/0/-GettingStarted
Now listening on: http://localhost:5000
Application started. Press *Ctrl* + *C* to shut down.
Application is shutting down...
这条消息向我们显示应用现在已经启动并在http://localhost:5000
上运行。
The dotnet run
command compiles the project in Debug mode, but does not create compiled artifacts/assemblies on disk.
- 如果我们想在编译过程之后创建 DLL 文件,我们应该运行以下命令:
dotnet build
Usually, we want to create deployment files in the project folder, copy them into the necessary environment, then run it in that environment.
在执行dotnet build
命令之后,我们应该看到以下输出:
Microsoft (R) Build Engine version 15.5.179.9764 for .NET Core
Copyright (C) Microsoft Corporation. All rights reserved.
Restore completed in 60.76 ms for C:/B05277/Chapter19/0-GettingStarted/GettingStarted.csproj.
GettingStarted -> C:/B05277/Chapter19/0-GettingStarted/bin/Debug/netcore/app2.0GettingStarted.dll
Build succeeded.
0 Warning(s)
0 Error(s)
Time Elapsed 00:00:01.79
dotnet build
命令在项目文件夹中创建bin/Debug/netcoreapp2.0
文件夹,并在其中创建 dll。 如果项目没有依赖项,则只创建项目 DLL,否则将在该文件夹中创建项目 DLL 和所有依赖项 DLL。
如果没有声明,dotnet build
命令将工程编译到宿主环境中,例如 Win7-x86, Win10-x64, Ubuntu.17.10-x64, OsX.10.12-x64,等等。
The whole Runtime Identifier Catalog is at: https://docs.microsoft.com/en-us/dotnet/core/rid-catalog
如果愿意,您可以在不托管环境的情况下编译项目,只需声明运行时环境即可。
- 您可以在
csproj
文件中声明运行环境如下:
<PropertyGroup>
<TargetFramework>netcoreapp2.0</TargetFramework>
<RuntimeIdentifier>win7-x64</RuntimeIdentifier>
</PropertyGroup>
声明运行时环境的另一种方法是使用.NET Core CLI
命令开关,如下所示:
dotnet build --runtime ubuntu-x64
在使用运行时环境标识符将. net Core 项目编译到特定环境后,我们可以根据环境复制工件(dll),并运行应用。
此外,我们可以在 Release 模式下编译项目。
It's a best practice that every app that is going to be deployed to a prod environment should be compiled in Release mode.
我们还可以使用.NET Core CLI
开关将优化模式更改为 Release,如下所示:
dotnet build --configuration Release
我们可以在bin/Release/netcoreapp2.0
文件夹中找到编译版本。
If we used the runtime environment identifier, there will be another folder in the netcoreapp2.0
folder: the runtime environments folder.
如果需要,我们可以将.NET Core CLI Commands
混合搭配如下:
dotnet build --runtime ubuntu-x64 --configuration Release
如果我们能在一台计算机上安装。net Core,它最终会在一个专用的文件夹中,比如 Windows 中的C:/Program Files/dotnet
,等等。
在该文件夹中,有一个名为shared
的文件夹,其中包含运行。net Core 应用所需的所有。net Core 库。
我们可以将项目的编译工件部署到预先安装的。net Core 计算机中,并在其中运行应用。
这称为框架依赖部署。
我们可以将项目部署到没有预装。net Core 的计算机上。 我们所需要做的就是将所有需要的。net Core 库添加到项目的部署文件夹中。
这是自包含部署,它可以通过以下。net Core CLI 命令来完成:
dotnet publish --self-contained
执行前一个命令后,将会有一个bin/Debug{or Release}/netcoreapp2.0/publish
文件夹。 这个文件夹将包含所有。net Core 和与项目相关的依赖 dll,以及我们项目的可执行文件(.exe
)。
我们可以把这个文件夹复制到一台没有安装。net Core 的计算机上,我们仍然可以运行这个应用。
dotnet publish
can have --runtime
, --configuration
as well.
它是如何工作的…
. net Core CLI 拥有构建和部署项目所需的所有命令。
在执行应用方面,调试和发布模式是相同的,但在性能和优化方面有很大的不同。
在框架依赖部署和自包含部署中,包大小是非常不同的。 这是因为框架依赖于部署只部署应用的 dll,而不是。NET Core 相关的 dll,如果您使用自包含部署模型,应该部署这些 dll。
自包含部署模型可以让我们在计算机上预先安装所需的。net Core 版本。
举办一个 ASP。 IIS 上的 asp.NET Core web 应用
自 1995 年以来,IIS (Internet Information Server)一直是微软的应用服务器。 应用服务器通过 HTTP 请求提供静态或动态内容。
IIS 是一种灵活的通用应用服务器,运行在 Windows 上。
我们基本上可以将项目部署到 IIS 中,将项目部署在一个文件夹中,并创建一个指向该文件夹的 IIS 网站。
准备
在开始本节之前,应该安装 IIS。 IIS 可以免费安装和使用; 我们只需要在控制面板中打开“打开或关闭”窗口来启用它:
我们应该将World Wide Web Services和IIS 管理控制台配置为在计算机上拥有 IIS:
单击 OK 按钮后,Windows 将在计算机上启用 IIS,我们可以使用它来为 web 应用提供服务。
另外,我们需要安装。net Core Windows Server Hosting bundle(我们可以从https://docs.microsoft.com/en-us/aspnet/core/publishing/iis?tabs=aspnetcore2x下载安装):
Example project can be found at: https://github.com/polatengin/B05277/tree/master/Chapter19/1-HostingIIS.
怎么做……
- 让我们创建一个新的 ASP.NET Core 项目和服务它在 IIS:
dotnet new web
- 打开
Program.cs
文件,查找以下代码块:
public static IWebHost BuildWebHost(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.Build();
- 我们应该在该函数中添加一个
UseIISIntegration()
方法调用,如下所示:
public static IWebHost BuildWebHost(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.UseIISIntegration()
.Build();
The UseIISIntegration()
method call is important and required if we're going to deploy our project to IIS.
UseIISIntegration()
方法使 ASP.NET Core 应用使用 IIS 作为反向代理,并指定要监听的端口,等等。
当在 IIS 中创建一个网站时,它将从项目根文件夹中的web.config
文件中读取配置。
- 现在我们在项目根文件夹中创建一个
web.config
文件。 在里面写下面的代码:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.webServer>
<handlers>
<add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified" />
</handlers>
<aspNetCore processPath="%LAUNCHER_PATH%" arguments="%LAUNCHER_ARGS%" stdoutLogEnabled="false" stdoutLogFile=".logsstdout" forwardWindowsAuthToken="false" />
</system.webServer>
</configuration>
前面的代码告诉 IIS 从 ASP 服务网站内容.NET Core 应用。 这个文件及其内容是托管 ASP 的必要条件。 IIS 上的 asp.NET Core 应用。
- 让我们用以下。net Core CLI 命令来部署项目:
dotnet publish -c Release
这将创建一个发布文件夹,其中包含一些 DLL 文件,并显示以下输出:
C:/B05277/Chapter19/1-HostingIIS> dotnet publish -c Release
Microsoft (R) Build Engine version 15.5.179.9764 for .NET Core
Copyright (C) Microsoft Corporation. All rights reserved.
Restore completed in 69.62 ms for C:B05277Chapter191-HostingIISHostingIIS.csproj.
HostingIIS -> C:/B05277/Chapter19/1-HostingIIS/bin/Release/netcore/app2.0HostingIIS.dll
HostingIIS -> C:/B05277/Chapter19/1-HostingIIS/bin/Release/netcore/app2.0publish
- 现在我们可以打开 IIS 管理控制台来创建一个新的网站:
- 首先,通过右键单击它,然后单击 Remove,删除默认的网站。
-
要创建一个新网站,右键单击左侧的
Sites
文件夹,然后单击 Add website。 -
通过给网站一个名称并选择已编译的项目文件夹来填充新窗口:
We compiled the project with the -c
Release option, and it generated Release mode artifacts in the bin/Release/netcoreapp2.0/publish
folder.
- 下一步是将。net Framework 的默认值更改为“应用池基本设置中无托管代码”。 我们应该点击 IIS 管理控制台左侧的
Application Pools
文件夹,然后双击列表中的网站名称:
- 现在,我们可以启动首选的 web 浏览器,导航到
http://localhost
地址,结果如下:
它是如何工作的…
IIS 可以服务于 ASP.NET Core 应用。 默认情况下,它会将端口80
分配给第一个创建的网站; 我们可以在网站的绑定设置中将这个默认端口更改为我们想要的任何端口:
如果需要,可以在同一个窗口中设置Host name
。 其中Host name
为该网站的域名,如microsoft.com或google.com。
IIS uses the ASP.NET Core Windows Server Hosting bundle to serve the application. If we don't install the required bundle, IIS will display a HTTP500.19 error page instead of our application.
举办一个 ASP。 Kestrel 上的 NET Core web 应用
Kestrel 是微软最新开发的应用服务器。 Kestrel 开发的主要目的是支持 Linux 和 macOS 操作系统。
通过这样做,微软确保所有的 ASP.NET web 开发人员可以使用 Linux 或 macOS 系统来开发和服务应用。
Kestrel 的开发考虑到了跨平台,但它也采用了新的架构和模式。
准备
Kestrel 是 ASP 的一个依赖包。 .NET Core 命令行(dotnet.exe
)将在您的计算机上安装。NET Core 时被安装。NET Core web 项目。
dotnet.exe
是任何平台(如 Windows、Linux 或 macOS)上的任何。net Core 应用的启动器。
让我们创建一个新的 ASP.NET Core Web Application 并通过执行以下命令启动应用:
dotnet new web
Example project can be found at: https://github.com/polatengin/B05277/tree/master/Chapter19/2-HostingKestrel.
怎么做……
- 打开
Program.cs
文件,查看public static void Main(string[] args)
方法调用; 这是任何。NET Core 应用的主要入口点。
Main
方法调用BuildWebHost()
方法进行一些基础工作,以便在其中一个应用服务器(如 IIS、Kestrel 等)中为应用提供服务。
BuildWebHost()
方法创建一个新的 web 主机,并从Startup
类启动其服务:
By default, the Startup
class can be found in the Startup.cs
file; you can change it to whatever file you want.
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Logging;
namespace HostingKestrel
{
public class Program
{
public static void Main(string[] args)
{
BuildWebHost(args).Run();
}
public static IWebHost BuildWebHost(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.Build();
}
}
- 我们可以通过调用。net Core CLI 命令来启动项目,如下所示:
dotnet run
We can also deploy and publish the project as we saw at the start of this chapter.
启动项目后,我们应该在终端/命令提示符窗口中看到如下输出:
C:/B05277/Chapter19/2-HostingKestrel> dotnet run
Hosting environment: Production
Content root path: C:/B05277/Chapter19/2-HostingKestrel
Now listening on: http://localhost:5000
Application started. Press Ctrl+C to shut down.
默认情况下,web 应用在端口5000
上绑定自己。
我们可以通过在dotnet run
命令中添加一些参数来更改默认端口:
In Windows Powershell Window
C:/B05277/Chapter19/2-HostingKestrel> $env:ASPNETCORE_URLS="http://*:4000"; dotnet run
Hosting environment: Production
Content root path: C:/B05277/Chapter19/2-HostingKestrel
Now listening on: http://[::]:4000
Application started. Press Ctrl+C to shut down.
In Windows Command Window
C:/B05277/Chapter19/2-HostingKestrel> SET ASPNETCORE_URLS=http://*:4000 && dotnet run
Hosting environment: Production
Content root path: C:/B05277/Chapter19/2-HostingKestrel
Now listening on: http://[::]:4000
Application started. Press Ctrl+C to shut down.
In Linux, MacOS Terminal Window
C:/B05277/Chapter19/2-HostingKestrel> ASPNETCORE_URLS="http://*:4000" dotnet run
Hosting environment: Production
Content root path: C:/B05277/Chapter19/2-HostingKestrel
Now listening on: http://[::]:4000
Application started. Press Ctrl+C to shut down.
- 我们可以用我们最喜欢的浏览器导航到
http://localhost:4000
,并看到应用正在运行:
现在,我们可以设置负载均衡器、DNS 服务器等等,并将任何域名绑定到端口号为4000
的服务器上,并将应用提供给全世界。
它是如何工作的…
dotnet.exe
从主入口点(Program.cs
文件中的公共静态Main()
方法)运行应用。
首先,它通过调用WebHost.CreateDefaultBuilder()
和Build()
方法创建一个新的 web 主机。
The CreateDefaultBuilder()
method applies some default parameters and method calls, such as; using Kestrel as a web server, loading IConfiguration
from different locations, enabling IIS Integration, configuring log output to console, and so on.
CreateDefaultBuilder()
方法本身包括UseKestrel()
方法。 UseKestrel()
方法是由Microsoft.AspNetCore.Server.Kestrel.dll
组件提供的ExtensionMethod
方法。
通过打开csproj
文件,我们可以看到项目唯一的 NuGet 依赖是Microsoft.AspNetCore.All
(https://www.nuget.org/packages/Microsoft.AspNetCore.All)。
Microsoft.AspNetCore.All
依赖项是一个带有一些依赖项的空库,例如; Microsoft.AspNetCore.Server.Kestrel,``Microsoft.AspNetCore.Session
,Microsoft.AspNetCore.StaticFiles
,Microsoft.EntityFrameworkCore
,Microsoft.Extensions.Logging.Console
,等等。
BuildWebHost()
方法的最后一行是Build()
方法调用,它基本上将 Kestrel 作为 web 服务器运行。
举办一个 ASP。 Azure 上的 NET Core web 应用
云提供商确保开发人员可以轻松扩展他们的应用。
例如,我们可以开发一个社交网络应用,但我们不能确定我们需要多少资源。
大多数情况下,我们将基于收集到的示例使用数据、有根据的猜测等等进行估计。
在获取资源阶段,我们在需求高的情况下增加所需的资源。 当然,资源的增加也会增加拥有应用的成本。
应用的使用模式永远不会是一条平线,因此我们永远不需要相同数量的资源。 所需的资源每天都不一样,甚至不一样; 每小时更新的基础。
云提供商使得在某个时间点只拥有所需数量的资源变得很容易。
这是非常经济的,当我们无法估计一个启动应用的使用情况时,这是有意义的。
准备
我们需要一个 Azure 订阅来托管一个 ASP.NET Core web 应用。 我们可以很容易地从以下网站创建订阅:http://azure.com。
在绑定信用卡并启用交易之前,Azure 不会生成账单并在免费试用中运行。 免费试用模式为我们提供了很多免费的 Azure 服务,但不是全部。
创建订阅后,让我们通过导航http://portal.azure.com登录到 Azure Portal:
我们需要一个新的网站为这个例子,所以让我们创建一个。
点击左边的+ New 按钮; 它会打开新资源刀片。 接下来,点击 Web + Mobile 菜单项:
现在,点击 Web App; 它会打开创建 Web 应用刀片。 填充空的文本框,并按照以下指南(https://docs.microsoft.com/en-us/azure/app-service/app-service-web-overview)创建一个新的 web 应用:
Azure 会创建一个新的 web 应用,几秒钟后,我们就会在 Azure 中创建一个新的 web 应用。
让我们创建一个新的 ASP.NET Core web 应用:
dotnet new web
Example project can be found at: https://github.com/polatengin/B05277/tree/master/Chapter19/3-HostingAzure.
怎么做……
现在我们需要把它部署到 Azure 上。 有几种方法可以做到这一点,比如使用 Visual Studio、使用 Visual Studio Code、使用 TFS、带连续部署选项的 GitHub、FTP 等等。
部署一个 ASP.NET Core web 应用 Azure 与 Visual Studio 代码
根据http://code.visualstudio.com,Visual Studio Code 是一个重新定义和优化的代码编辑器,用于构建和调试现代 web 和云应用。 Visual Studio Code 是免费的,可以在您喜欢的平台上使用——linux、macOS 或 Windows。
在从http://code.visualstudio.com安装 Visual Studio Code 后,我们可以添加 Azure 应用服务工具扩展:
- 在将项目发布到 Azure 之前,我们需要添加一个
web.config
文件,其内容如下:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.webServer>
<handlers>
<add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified" />
</handlers>
<aspNetCore processPath="dotnet" arguments=".HostingAzure.dll" stdoutLogEnabled="false" stdoutLogFile=".logsstdout" />
</system.webServer>
</configuration>
Notice the arguments parameter of the aspNetCore
element. It should contain the deployed assembly name. You should change it if the project's name is different.
- 现在是时候使用。net Core CLI 命令将项目部署到本地磁盘了:
dotnet publish -c Release
这个命令将为已部署的项目创建一个bin/release/netcoreapp2.0
文件夹。
- 让我们用
bin/release/netcoreapp2.0
文件夹打开 Visual Studio Code。 您应该在 Explorer 选项卡中看到 Azure App Service 面板。 登录 Azure 订阅后,您可以看到之前创建的 web 应用。 - 右键单击它并单击 Deploy to Web App 菜单项。
这将打包本地部署并发布到 Azure:
发布成功后,你可以在 OUTPUT 面板中看到部署完成的消息:
If the web.config
file didn't include the netcoreapp2.0
folder, you should add this file manually.
- 完成这些步骤后,您可以导航到您在 Azure 中创建的 web 应用的 URL,您将看到该应用。
部署一个 ASP.NET Core web 应用 Azure 与 Visual Studio 社区版
Visual Studio 是有史以来最受欢迎的 ide 之一。 社区版是 Visual Studio 的免费版本,可以从https://www.visualstudio.com/vs/下载。
下载并安装 Visual Studio 社区版之后,您就可以创建/打开 ASP.NET Core Web 应用项目:
- 加载先前创建的 ASP.NET Core web 应用项目,只需双击项目根文件夹中的
.csproj
文件。
在 Visual Studio 社区版中将项目发布到 Azure 很容易。
- 首先,在解决方案资源管理器中右键单击项目行,然后单击发布:
- 在打开的窗口中,我们应该选择 Microsoft Azure App Service 选项,选择 select Existing 选项,然后点击 Publish 按钮:
- 在新打开的对话框中,我们可以看到并选择之前在 Azure Portal 中创建的 web 应用:
- 单击 OK 按钮后,Visual Studio 将负责打包并将项目发布到 Azure。
它是如何工作的…
Azure 有不同的选项,允许开发人员发布他们的 ASP.NET Core web 应用项目。
举办一个 ASP。 Docker 容器中的 NET Core web 应用
如果在本地数据中心发布项目,那么部署和配置 ASP 就不那么容易了.NET Core web 应用。 在 Docker 出现之前,开发人员通常将他们的应用部署到虚拟服务器上。
首先,他们需要提供一个虚拟服务器,在上面安装完整的操作系统,然后在上面安装所需的服务,比如 IIS、SQL Server,等等。
完成所有这些步骤后,开发人员可以部署应用并将其配置为在该虚拟服务器中运行。 项目需要不同的环境,例如开发、测试、登台、开发等等,这是很常见的。
而且,有时候,开发人员通常会区分环境规范和资源,比如端口号、数据库连接字符串,甚至底层操作系统。
Docker 使创建环境和使用人类可读的文本文件配置环境变得很容易。 这个文本文件称为 DockerFile。 我们可以创建一个环境并通过创建 DockerFile 来声明它的配置。
Docker CLI 可以通过该 DockerFile 组成一个 Docker 映像,将项目部署到其中,并制作一个 Docker 映像。 Docker CLI 也可以从 Docker 映像实例化一个 Docker 容器。 假设 Docker 映像是蓝图,Docker 容器是蓝图的实例。 因此,Docker CLI 可以多次实例化一个 Docker 映像到一个 Docker 容器中。 我们应该在使用 Docker 守护进程之前先安装它; 安装程序可以从https://www.docker.com/community-edition下载。
Docker 守护进程是跨平台的,所以您可以下载、安装并在您拥有的任何操作系统上运行它。
准备
让我们创建一个新的 ASP.NET Core web 应用项目:
dotnet new web
在 Visual Studio Code 中打开新创建的项目并创建一个名为DockerFile的新文件。
Notice that the filename is DockerFile, with no file extension.
我们可以通过打开终端/命令提示符窗口并执行以下命令来确保 Docker 已经安装并正常运行:
docker --version
docker info
Example project can be found at: https://github.com/polatengin/B05277/tree/master/Chapter19/4-HostingDocker.
怎么做……
DockerFiles 必须以 Docker 映像作为基础。 在我们的例子中,这个基本映像是微软开发的。net Core 2.0 Docker 映像。
We can see all the images by Microsoft at: https://hub.docker.com/r/microsoft/ aspnetcore-build/.
我们的 DockerFile 必须以FROM microsoft/aspnetcore-build
行开始。
If we want, we can build our own Docker image from an operating system baseline, but there are a lot of things we should do before deploying the project to it, such as installing HTTP libraries, SSL libraries, .NET Core Runtime, and so on. We can see layers of a DockerFile of aspnetcore-build:2.0 at https://hub.docker.com/r/microsoft/dotnet/~/dockerfile/.
DockerFile
中的第二行是工作目录; 在我们的例子中是WORKDIR /app
。
然后我们应该在DockerFile
中添加一行来复制所有的项目文件,另一行用来运行dotnet publish
命令,另一行用来运行。net 应用。
以下是DockerFile
内容的一个例子:
FROM microsoft/aspnetcore-build AS builder
WORKDIR /app
# copy csproj and restore as distinct layers
COPY *.csproj ./
RUN dotnet restore
# copy everything else and build
COPY . ./
RUN dotnet publish -c Release -o out
# build runtime image
FROM microsoft/aspnetcore
WORKDIR /app
COPY --from=builder /app/out .
ENTRYPOINT ["dotnet", "HostingDocker.dll"]
- 现在我们可以打开终端/命令提示符窗口并执行以下命令:
docker build -t hostingdocker .
The docker build
command can take a Docker image name with the -t
argument. Also note the .
character at the end of the command.
Docker 命令的输出应该如下所示:
C:/B05277/Chapter19/4-HostingDocker> docker build -t hostingdocker .
Sending build context to Docker daemon 603.1kB
Step 1/10 : FROM microsoft/aspnetcore-build AS builder
latest: Pulling from microsoft/aspnetcore-build
3e17c6eae66c: Already exists
fdfb54153de7: Pull complete
a4ca6e73242a: Pull complete
93bd198d0a5f: Pull complete
6030a6f9bb3e: Pull complete
3244c708b1c9: Pull complete
675a274a8d69: Pull complete
5c16d1951794: Pull complete
e0c6c215cec5: Pull complete
c8a448f88b0b: Pull complete
7c41433694e9: Pull complete
0f54f547def2: Pull complete
Digest: sha256:393f83b0e5e3b880a97b7a4118c7663a0fd3463433fc9672026710ccbc5fdb88
Status: Downloaded newer image for microsoft/aspnetcore-build:latest
---> e421e10eaa5d
Step 2/10 : WORKDIR /app
---> c1c98dc2991d
Removing intermediate container 86d31c5a3e46
Step 3/10 : COPY *.csproj ./
---> a4e35715c569
Step 4/10 : RUN dotnet restore
---> Running in c0dc80c24979
Restoring packages for /app/HostingDocker.csproj...
Generating MSBuild file /app/obj/HostingDocker.csproj.nuget.g.props.
Generating MSBuild file /app/obj/HostingDocker.csproj.nuget.g.targets.
Restore completed in 563.85 ms for /app/HostingDocker.csproj.
---> e921c6f6c55e
Removing intermediate container c0dc80c24979
Step 5/10 : COPY . ./
---> 0af6a5882bf6
Step 6/10 : RUN dotnet publish -c Release -o out
---> Running in 23f8a5c9f5e3
Microsoft (R) Build Engine version 15.4.8.50001 for .NET Core
Copyright (C) Microsoft Corporation. All rights reserved.
HostingDocker -> /app/bin/Release/netcoreapp2.0/HostingDocker.dll
HostingDocker -> /app/out/
---> 458c871a3416
Removing intermediate container 23f8a5c9f5e3
Step 7/10 : FROM microsoft/aspnetcore
---> 01d033b55240
Step 8/10 : WORKDIR /app
---> Using cache
---> 3cb4029d92c4
Step 9/10 : COPY --from=builder /app/out .
---> 7574cfa0f543
Step 10/10 : ENTRYPOINT dotnet HostingDocker.dll
---> Running in cd6120f3325f
---> fd60e8356b33
Removing intermediate container cd6120f3325f
Successfully built fd60e8356b33
Successfully tagged hostingdocker:latest
现在我们可以通过执行docker images
命令列出所有的 Docker 映像:
- 通过执行以下命令,我们可以从
hostingdocker
Docker 映像创建一个 Docker 容器:
docker run -it -p 5000:80 hostingdocker
-p
交换机连接内部端口5000
和外部端口80
。
- 最后,我们可以启动我们最喜欢的浏览器,导航到
http://localhost
,看看应用是否已经启动并运行:
它是如何工作的…
Docker 可以很容易地隔离应用,并使用所需的配置部署它。
配置可以声明为一个文本文件,它使开发人员能够创建一个管道,通过编译项目并从 DockerFile 创建一个新环境来发布项目的新版本。
所有这些步骤都称为连续部署。
版权属于:月萌API www.moonapi.com,转载请注明出处