将 Docker 映像部署到 Azure 容器实例

已完成

Azure 容器实例是一种按需加载并运行 Docker 映像的服务。 Azure 容器实例服务可从 Docker Hub 或 Azure 容器注册表等注册表中检索映像。

你的组织想要使用 Azure 运行其 Web 应用。 因此,最好将映像存储在 Azure 容器注册表中,然后使用 Azure 容器实例服务运行这些映像。

在本单元中,你将了解如何向 Azure 容器注册表上传 Docker 映像。 然后,将使用 Azure 容器实例服务运行该映像。

使用 Azure 容器注册表来存储容器

Azure 容器注册表是由 Azure 提供的注册表托管服务。 你创建的每个 Azure 容器注册表资源都是包含唯一 URL 的独立注册表。 它们是专用注册表,这意味着它们需要身份验证才能推送或拉取映像。 Azure 容器注册表在云中运行,为其他 Azure 服务提供类似的可伸缩性和可用性级别。

可以使用 Azure 门户或 Azure 命令行接口 (CLI) 创建注册表。 可以使用 Azure 门户中的 Cloud Shell 或本地安装的 Azure CLI。 请记住,必须先创建一个资源组,然后才能创建注册表。 在创建资源组时,建议选择最近的区域。 在本示例中,资源组的名称是 mygroup,位置是“美国西部”。

无需运行以下命令。 我们将在下一个练习中执行此操作。

注意

需要为容器提供一个唯一的名称。 可以在此处查看名称是否已被使用。

az group create --name mygroup --location westus
az acr create --name <unique name> --resource-group mygroup --sku standard --admin-enabled true

不同的 SKU 提供不同级别的可伸缩性和存储空间。

Azure 容器注册表存储库是专用存储库,这意味着它们不支持未经过身份验证的访问。 若要从 Azure 容器注册表存储库拉取映像,请使用 docker login 命令并为该注册表指定登录服务器的 URL。 Azure 容器注册表中的注册表登录服务器 URL 采用格式 <registry_name>.azurecr.io。

docker login myregistry.azurecr.io

Docker 登录会提示你输入用户名和密码。 要查找此信息,转到 Azure 门户并查找注册表的访问密钥,或运行以下命令。

az acr credential show --name myregistry --resource-group mygroup

使用 docker push 命令将映像从本地计算机推送到 Docker 注册表。 在推送映像之前,必须创建映像别名,以指定 Docker 注册表创建的存储库和标记。 注册表名称的格式必须为 *<login_server>/<image_name>:<tag/>。 使用 docker tag 命令执行此操作。 以下示例演示了如何为 reservationsystem 映像创建别名。

docker tag reservationsystem myregistry.azurecr.io/reservationsystem:v2

如果运行 docker image ls,将看见映像的两个条目:一个具有原始名称,另一个具有新的别名。

运行 tag 命令后,可使用以下命令将映像上传到 Azure 容器注册表中的注册表。

docker push myregistry.azurecr.io/reservationsystem:v2

使用以下命令列出注册表中的存储库,以验证映像是否已正确上传。

az acr repository list --name myregistry --resource-group mygroup

也可使用 acr repository show 命令列出注册表中的映像。

az acr repository show --repository reservationsystem --name myregistry --resource-group mygroup

注意

你将发现存储库中每个映像至少拥有两个标记。 一个标记是你在 acr build 命令中指定的值(上一示例中的 v1)。 另一个标记将为 latest。 每一次重新生成映像,Azure 容器注册表都会自动创建 latest 标记作为最新版本映像的别名。

使用 Azure 容器实例来运行映像

Azure 容器实例服务可以从 Azure 容器注册表加载映像,并在 Azure 中运行该映像。

创建容器实例,并使用 az container create 命令开始运行映像。 在 registry-usernameregistry-password 参数中提供注册表的用户名和密码。 系统将为实例分配一个 IP 地址。 你可以访问具有此 IP 地址的实例。 如果想通过更加易懂的标签引用实例,可以选择指定 DNS 名称。 请注意,在以 URL 的形式指定映像时,该 URL 应引用 Azure 容器注册表服务 (azurecr.io) 中的注册表 (myregistry)。 如果你使用的是 Docker Hub 或某些其他注册表,请使用该注册表中的映像的 URL 替换此 URL。

az container create --resource-group mygroup --name myinstance --image myregistry.azurecr.io/myapp:latest --dns-name-label mydnsname --registry-username <username> --registry-password <password>

Azure 将使用基于你指定的 DNS 标签的域名托管该实例。 可以通过查询该实例的 IP 地址来查找实例的完全限定的域名。

az container show --resource-group mygroup --name myinstance --query ipAddress.fqdn

可以使用 Web 浏览器访问应用程序。 你可以导航到此命令返回的 URL;我们将在下一单元中了解如何操作。