掌握 Azure Docker 部署:逐步指南

对于这个ATA项目,你将一窥Azure中Docker的运作方式。在这个Azure Docker教程中,你将了解微软的Azure容器实例(ACI)服务。

Azure容器实例是通过Azure Docker托管的托管Kubernetes集群。它允许您部署任何Docker镜像(Windows和Linux)并将其作为容器运行。每个Azure Docker容器都作为独立的容器运行,使用自己分配的CPU和内存。

在这个项目中,你将学习如何部署和运行你的第一个Azure容器实例,该实例基于微软在Azure公共云中提供的一个示例ASP.NET容器镜像。

到项目结束时,你将在由Azure容器实例服务托管的Docker容器中运行一个ASP.NET网站。

环境和知识要求

为了从这个Azure Docker教程中获益最大化,你应该具备以下条件:

  1. A local Windows 10 client with Docker Desktop installed.
  2. A Microsoft Azure account
  3. 具有权限将容器部署到Azure容器注册表的Azure账户访问权限
  4. 已安装的Windows Azure CLI。你将从命令行学习。
  5. A beginner understanding of containers and Docker.
  6. A registered Docker ID.

如果您不喜欢本Azure Docker教程中选择的示例,您可以随时在Docker Hub上使用另一个容器镜像。

话不多说,让我们开始构建这个项目吧!

运行Docker容器

为了避免以后遇到问题时感到沮丧,请始终首先验证Docker引擎是否正在运行。要做到这一点,打开命令提示符或PowerShell会话,然后运行docker info

您可以看到下面应该收到的输出类型。

Inspecting information about the local Docker installation

要验证启动一个Docker容器,运行docker run hello-world。在幕后,docker命令执行了几个步骤:

  1. 在您的Windows 10计算机上本地查找名为hello-word的容器。
  2. 当找不到时,然后会到公共Docker Hub仓库查找名为hello-world的容器的最新版本。
  3. 找到容器后,然后会从Docker Hub仓库下载它。
  4. 下载完成后,容器启动并执行容器正在使用的镜像中提供的启动指令。

您可以看到下面的一些示例输出。

Download a sample Docker container called hello-world

启动一个示例ASP.NET容器

现在您知道如何下载并运行Docker容器了,现在下载并运行您将在本项目中使用的容器。这个Docker容器是一个ASP.Net Core Web应用镜像。

要下载此 Azure Docker 教程的镜像,请运行以下命令:

> docker run --name aspnetcore_sample --rm -it -p 8000:80 mcr.microsoft.com/dotnet/core/samples:aspnetapp

此命令执行以下操作:

  1. 由于本地不存在 Docker 镜像,Docker 会从 Microsoft 在 mcr.microsoft.com 上托管的另一个公共容器注册表中下载一个名为 aspnetapp 的容器,该容器位于 dotnet/core/samples 目录下。mcr.microsoft.com 容器注册表类似于公共 Docker Hub,但由 Microsoft 维护,仅托管 Microsoft 容器镜像。
  2. 在本地计算机上运行容器。
  3. (-p 8000:80) – 将容器上监听的 TCP 端口 80 映射到本地 TCP 端口 8000。这样可以在本地端口 8000 访问 Web 应用程序。
  4. (-it) – 以交互方式启动容器,意味着在启动时会立即进入控制台。
  5. (--rm) – 当容器停止时,它将被删除。

您可以查看下面的输出以了解预期的输出。

Downloading a container instance from Microsoft

6. 从您的浏览器,通过浏览到 http://localhost:8000 来连接到此正在运行的容器应用程序。您应该会看到 ASP.Net 示例 Web 应用程序

Sample ASP.NET web app

创建 Azure 容器注册表(ACR)实例

一旦您已经将 ASP.NET 容器下载到您的本地计算机上,现在是时候将其迁移到 Azure Docker 托管中,并在 Azure 中运行此容器了。为此,我们将演示容器推送到 Azure 容器注册表(ACR)。ACR 是一个允许您在 Azure 中直接部署和运行 Docker 容器的服务。

  1. 登录到Azure 门户
  2. 点击顶部的终端图标以启动Azure 云 Shell
Starting Azure Cloud Shell

3. 确保您选择如下所示的 Bash shell。

Bash in Azure Cloud Shell

4. 使用下面的 az group create 命令创建一个 Azure 资源组,将 ACR 实例放入其中。

> az group create --name <RGname> --location <Azure Region of choice>
Creating a resource group

5. 现在,使用 az acr create 命令在资源组内创建 ACR。下面您可以看到使用 admin-enabled 参数设置为 true 来创建 Basic SKU ACR 的示例。这设置为 true 是因为它允许您稍后执行资源管理。

> az acr create --resource-group <RGname> --name <ACRname> --sku Basic
 --admin-enabled true
Creating an Azure Container Registry

–admin-enabled true

完成后,您现在应该在资源组内运行一个 ACR 实例。Azure Docker 托管来拯救您了!

在本地连接到 ACR 实例

  1. 现在,您需要从 Azure 云 Shell 转移到您的本地 Windows 计算机以完成设置。
  2. 在您的本地计算机上,使用管理员权限启动 PowerShell 或命令提示符。我将使用 PowerShell。
  3. 通过运行 az login 并按照说明提供您的凭据来使用 Azure CLI 对 Azure 进行身份验证。
Authenticating to Azure

验证成功后,您应该会看到一些 JSON 输出,指示您刚刚进行身份验证的用户。

> az acr login --name <ACR-Name> --resource-group <RG Name>
Logging onto ACR

4.   接下来,使用以下命令使用 az acr login 命令对 Azure 云 Shell 中刚刚创建的 ACR 实例进行身份验证。下面您可以看到我正在连接到名为 nopacr1 的 ACR 实例,在 Azure 资源组 NOPRG 中。

更新 Docker 镜像标签

  1. 您现在可以准备将本地 Docker 镜像推送到 Azure Docker 托管或 ACI 中的 ACR 实例了。但是,您必须首先满足 ACR 依赖项。所有推送到 ACR 实例的 Docker 镜像必须在镜像名称中包含 ACR 实例的名称。
Finding the ACR Docker image

使用命令 docker images 查找 Docker 镜像 ID 号或镜像名称。

> docker tag mcr.microsoft.com/dotnet/core/samples:aspnetapp <ACRName>.azurecr.io/<imagenameofchoice>
Updating the Docker tag

2.   通过运行下面所示的 docker tag 命令来更新 Docker 镜像的 Docker 镜像标签。如果您遵循命名约定,请使用 ACR 名称 NOPACR1 并将标签定义为 nopacr1.azurecr.io 对于图像本身,请使用名称 dotnetsample

Verifying Docker tag

3.   再次使用 docker images 命令验证标签是否已应用。现在您应该看到标签已经更新。

  1. 将 Docker 镜像上传到 ACR 实例并进行验证
> docker push <ACRName>.azurecr.io/<nameofimage>
Pushing Docker image to ACR

现在使用以下显示的docker push命令将本地图片上传到ACR实例中,提供ACR实例所在的DNS名称标签。

Inspecting ACR instance in Azure portal

2. 上传后,通过Azure门户验证对ACR实例的推送是否正常,方法是导航至所有服务 —> Azure容器注册表,然后选择您之前创建的ACR实例。

Inspecting Docker repo

3. 在左侧的菜单栏下的服务部分,单击仓库。刚刚推送到ACR实例的Docker镜像应该会显示在这里。

Inspecting Docker image

4. 点击图片,您将看到其版本和其他一些有用的信息。

运行Azure容器实例(ACI)

  1. 您现在已经创建了一个ACR实例,将Docker容器镜像标记为ACR名称的引用,并将该镜像推送到ACR实例。现在是时候使用Azure容器实例(ACI)来运行存储在您的ACR实例中的Docker镜像了。
Creating a container instance

从上一步继续,单击latest旁边的…,然后选择运行实例。这将打开创建容器实例刀片。

  • 2. 使用以下信息填写创建容器实例框中的字段:
  • 容器名称 – 您想为此运行的容器使用的任何名称
  • 操作系统类型 – Linux(这取决于源容器。如果您在此项目中使用相同的容器,则可能是Windows。)
  • 订阅 – 您的Azure订阅
  • 资源组 – 任何现有或新的Azure资源组,用于添加容器实例

位置 – 基于资源组

Creating a container instance

对于这个Azure Docker教程中的ASP.NET容器,您可以保持所有其他设置不变。在生产环境中,根据容器运行的内容,您可能需要更改这些设置。

Successful container instance deployment

3. 按下确定以创建容器实例。
4. 一旦容器实例部署完成,您应该看到一个类似下面示例的页面。

Inspecting created container instance

5. 部署完成后,通过导航到所有服务 —> 容器实例在门户中打开ACI。在这里,浏览到刚刚创建的Azure容器实例(ACI)。您应该看到如下所示的实例。

Sample ASP.NET Core webpage

6. 复制右上角的IP地址并粘贴到Web浏览器中。您的示例ASP.NET Web应用程序应该从Azure容器实例(ACI)加载并显示如下的Web页面。

如果您完成了这个容器,然后可以使用az container delete命令来删除容器

结论

Source:
https://adamtheautomator.com/azure-docker-tutorial/