如何使用 Docker CLI 和 Compose 将容器部署到 Azure ACI

2025-04-01T17:55:58+08:00 | 6分钟阅读 | 更新于 2025-04-01T17:55:58+08:00

Macro Zhao

如何使用 Docker CLI 和 Compose 将容器部署到 Azure ACI

推荐超级课程:

在云中运行容器可能既困难又令人困惑。有太多选项可供选择,而且还需要理解从虚拟网络到安全性的不同云服务的工作方式。更不用说编排器了。至少可以说,这是一个学习曲线。

在本教程中,我们将探讨在 Azure ACI 中运行单个容器和使用 Compose 运行多个容器。我们将指导您设置 Docker 上下文,甚至简化登录 Azure 的过程。在本教程结束时,您将能够使用熟悉的 Docker 命令将应用程序部署到您自己的 Azure ACI 账户中。

先决条件

要完成本教程,您需要:

在 ACI 上运行 Docker 容器

与 Azure ACI 的集成非常类似于使用本地容器。开发团队深入考虑了开发者体验,并试图使 ACI 的用户体验尽可能接近于使用本地容器。

让我们在 Azure ACI 上运行一个简单的 Nginx Web 服务器。

登录 Azure

您不需要在机器上安装 Azure CLI 就可以在 ACI 中运行 Docker 镜像。Docker 会处理一切。

您需要做的第一件事是登录 Azure。

$ docker login azure

这将打开一个浏览器窗口,允许您登录 Azure。

选择您的账户并登录。登录后,您可以关闭浏览器窗口。

Azure ACI 上下文

Docker 有上下文的概念。您可以将其视为一个可以运行 Docker 容器的地方。这比实际情况要复杂一些,但现在这个描述已经足够了。在本教程中,我们使用本地上下文和新的 ACI 上下文。

首先,让我们看看我们的本地开发机上当前有哪些上下文。运行以下命令查看上下文列表。

$ docker context list
NAME                TYPE                DESCRIPTION                               DOCKER ENDPOINT               KUBERNETES ENDPOINT                                 ORCHESTRATOR

default *           moby                Current DOCKER_HOST based configuration   unix:///var/run/docker.sock   https://kubernetes.docker.internal:6443 (default)   swarm

(注:由于原文在此处被截断,无法提供完整的翻译。如果需要完整翻译,请提供完整的内容。)```markdown 根据您是否已经创建了另一个上下文,您应该只看到一个上下文。这是指向您本地 Docker 引擎的默认上下文,标记为“moby”。您可以通过活跃上下文名称旁边的“*”来识别将用于 Docker 命令的当前上下文。

现在,让我们创建一个可以运行容器的 ACI 上下文。我们将使用创建 aci 命令来创建我们的上下文。

让我们来看看创建 aci 上下文的帮助信息。

$ docker context create aci --help
创建用于 Azure 容器实例的上下文

用法:
  docker context create aci CONTEXT [flags]

标志:
      --description string       上下文的描述
  -h, --help                     aci 的帮助信息
      --location string          位置(默认 "eastus")
      --resource-group string    资源组
      --subscription-id string   订阅 ID

全局标志:
      --config DIRECTORY   客户端配置文件的位置 DIRECTORY(默认 "/Users/peter/.docker")
  -c, --context string     上下文
  -D, --debug              在日志中启用调试输出
  -H, --host string        要连接的守护进程套接字

在帮助信息的 Flags 部分下,您可以看到我们有设置 location、resource-groupsubscription-id 的选项。

您可以将这些标志传递给创建命令。如果您不这样做,Docker CLI 将在交互模式下询问您这些问题。让我们现在就这样做。

$ docker context create aci myaci

CLI 首先会询问您希望使用哪个订阅。如果您只有一个订阅,Docker 将使用该订阅。

使用仅可用的订阅 : Azure 订阅 1 (b3c07e4a-774e-4d8a-b071-xxxxxxxxxxxx)

现在我们需要选择要使用的资源组。您可以选择一个之前创建的资源组,或者选择“创建新的资源组”。我将选择创建一个新的资源组。

资源组 "c3eea3e7-69d3-4b54-83cb-xxxxxxxxxxxx" (eastus) 已创建

好了,我们的 ACI 上下文已经设置好了。让我们列出我们的上下文。

$ docker context list

您应该看到您刚刚创建的 ACI 上下文。

在 ACI 上运行容器

现在我们已经设置好了 ACI 上下文,我们可以 在云中运行容器了。有两种方法告诉 Docker 您希望命令应用于哪个上下文。

第一种是传递 –context 标志。另一种是告诉 Docker 我们想要使用哪个上下文来执行所有后续命令,通过切换上下文实现。现在,让我们使用 –context 标志。

$ docker --context myaci run -d --name web -p 80:80 nginx
[+] 运行 2/2
 ⠿ web                         已创建                                                                            
 ⠿ single--container--aci      完成                                                                                
web

在这里,您可以看到 Docker 与 ACI 交互,创建了一个名为“web”的容器实例,并启动了一个单一实例。

使用 Docker CLI 的 Azure ACI 2

打开您的 Azure 门户并导航到容器实例。

我们还可以运行您已经熟悉的 Docker CLI 命令,如 ps 和 logs。

切换上下文

让我们查看正在运行的容器。但在我们这样做之前,让我们将活动上下文切换到上面设置的 ACI 上下文,这样我们就不用在每条命令中都输入 –context 了。

$ docker context use myaci

现在,让我们运行 ps 命令,而不传递 –context 标志。

$ docker ps
CONTAINER ID        IMAGE               COMMAND             STATUS              
PORTS
web                            nginx                                                              运行中             52.224.73.190:80->80/tcp

很好,由于我们告诉 Docker 使用 myaci 上下文,我们看到的是在 Azure 账户中运行的容器列表,而不是本地机器上的。

让我们确保容器正在运行。从上面的 ps 输出中复制容器的 IP 地址,并将其粘贴到浏览器地址栏中。您可以看到我们的 Nginx Web 服务器正在运行!

使用 Docker CLI 的 Azure ACI 3

正如我上文提到的,我们还可以查看容器的日志。

$ docker logs web

要停止并移除容器,请运行以下命令。

$ docker rm web

BOOM!

这很简单,集成也很顺畅。凭借您已经熟悉的几个 Docker 命令和几个新命令,我们能够快速且简单地从开发机器在 ACI 中运行容器。

但我们还没完!

我们还可以使用 Docker Compose 运行多个容器。通过 ACI 集成,我们现在有能力通过 Docker CLI 对 ACI 运行 compose 命令。接下来就让我们这么做。

测试Docker Compose App代码

我使用的是一个简单的 Python Flask 应用程序,它将时间戳记录到 Redis 数据库中。让我们分叉仓库,然后将 git 仓库克隆到您的本地机器。

打开您喜欢的浏览器并导航到:https://github.com/pmckeetx/timestamper

在您的本地机器上打开终端,并运行以下 git 命令以将仓库克隆到您的本地开发机器。

确保您将 «github username» 替换为您的 GitHub 用户名。

git clone git@github.com:<<github username>>/timestamper.git

本地构建和运行

确保您位于 timestamper 项目的根目录,并按照以下步骤构建镜像并使用 Docker Compose 启动应用程序。

首先,我们需要在 docker-compose.yml 文件中的镜像添加您的 Docker ID。打开 docker-compose.yml 文件,在编辑器中用您的 Docker ID 替换 <<username>>

接下来,我们需要确保使用的是本地 Docker 上下文。

$ docker context use default

现在,我们可以使用 docker-compose 来构建并启动我们的应用程序。

$ docker-compose up --build
Building frontend
Step 1/7 : FROM python:3.7-alpine
 ---> 6ca3e0b1ab69
Step 2/7 : WORKDIR /app
...
frontend_1  |  * Running on http://0.0.0.0:5000/ (按 CTRL+C 退出)
frontend_1  |  * Restarting with stat
frontend_1  |  * Debugger is active!
frontend_1  |  * Debugger PIN: 622-764-646

Docker 将构建我们的时间戳记录器镜像,然后运行 Redis 数据库和我们的时间戳记录器容器。

导航到 http://localhost:5000 并点击几次 “Timestamp!” 按钮。

使用 Docker CLI 的 Azure ACI 4

在 ACI 上使用 Compose

现在,让我们使用新的 Docker Compose 集成在 ACI 上运行我们的应用程序。

我们首先需要将我们的镜像推送到 Docker Hub,这样 ACI 就可以拉取镜像并运行它。运行以下命令将您的镜像推送到您的 Docker Hub 账户。

$ docker-compose push
Pushing frontend (pmckee/timestamper:latest)...
The push refers to repository [docker.io/pmckee/timestamper]
6e899582609b: Pushed
...
50644c29ef5a: Layer already exists
latest: digest: sha256:3ce2607f101a381b36beeb0ca1597cce9925d17a0f826cac0f7e0365386a3042 size: 2201

现在我们的镜像已经在 Hub 上,我们可以使用 Compose 在 ACI 上运行应用程序。

首先,让我们切换到我们的 ACI 上下文。

$ docker context use myaci

记住,要查看上下文列表和当前使用的上下文,可以运行列出上下文的命令。

$ docker context list

好了,现在我们正在使用 ACI 上下文,让我们在云中启动我们的应用程序。

$ docker compose up
[+] Running 3/3
 ⠿ timestamper     Created
 ⠿ frontend        Done
 ⠿ backend         Done

让我们验证我们的应用程序是否正在运行。为了获取我们前端容器的 IP 地址,让我们列出正在运行的容器。

$ docker ps
CONTAINER ID           IMAGE                COMMAND             STATUS              PORTS

timestamper_frontend       pmckee/timestamper                       
Running             40.71.234.128:5000->5000/tcp

timestamper_backend         redis:alpine                             
Running

复制上面列出的 IP 地址和端口,并粘贴到您喜欢的浏览器中。

使用 Docker CLI 的 Azure ACI 5

让我们查看我们的 Redis 容器的日志。

$ docker logs timestamper_backend
1:C 13 Jul 2020 18:21:12.044 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
...
1:M 13 Jul 2020 18:21:12.046 # Server initialized
1:M 13 Jul 2020 18:21:12.047 * Ready to accept connections

之后,可以通过运行 compose down 来停止并删除 Compose 应用程序。

$ docker compose down

结论

我们看到了现在在 Azure 上使用Docker的 ACI 集成来运行单个容器或使用 Compose 运行多个容器是多么简单。

© 2011 - 2025 Macro Zhao的分享站

关于我

如遇到加载502错误,请尝试刷新😄

Hi,欢迎访问 Macro Zhao 的博客。Macro Zhao(或 Macro)是我在互联网上经常使用的名字。

我是一个热衷于技术探索和分享的IT工程师,在这里我会记录分享一些关于技术、工作和生活上的事情。

我的CSDN博客:
https://macro-zhao.blog.csdn.net/

欢迎你通过评论或者邮件与我交流。
Mail Me

推荐好玩(You'll Like)
  • AI 动·画
    • 这是一款有趣·免费的能让您画的画中的角色动起来的AI工具。
    • 支持几十种动作生成。
我的项目(My Projects)
  • 爱学习网

  • 小乙日语App

    • 这是一个帮助日语学习者学习日语的App。
      (当然初衷也是为了自用😄)
    • 界面干净,简洁,漂亮!
    • 其中包含 N1 + N2 的全部单词和语法。
    • 不需注册,更不需要订阅!完全免费!
  • 小乙日文阅读器

    • 词汇不够?照样能读日语名著!
    • 越读积累越多,积跬步致千里!
    • 哪里不会点哪里!妈妈再也不担心我读不了原版读物了!
赞助我(Sponsor Me)

如果你喜欢我的作品或者发现它们对你有所帮助,可以考虑给我买一杯咖啡 ☕️。这将激励我在未来创作和分享更多的项目和技术。🦾

👉 请我喝一杯咖啡

If you like my works or find them helpful, please consider buying me a cup of coffee ☕️. It inspires me to create and share more projects in the future. 🦾

👉 Buy me a coffee