Azure Container Instances 部署 Docker:Nginx 容器编排与端口映射配置

Azure Container Instances (ACI) 是 Microsoft Azure 提供的无服务器容器服务,允许您快速部署 Docker 容器而无需管理底层基础设施。Nginx 是一个高性能的 Web 服务器和反向代理服务器,非常适合在 ACI 上运行。本指南将逐步解释如何在 ACI 上部署 Nginx 容器,包括容器编排(如定义容器组)和端口映射配置(将容器内部端口映射到公共访问端口)。整个过程基于 Azure CLI 工具,确保部署真实可靠。

1. 准备工作
  • 环境要求
    • 拥有有效的 Azure 账户(免费试用版即可)。
    • 安装 Azure CLI(命令行工具)。如果未安装,请参考 Azure 官方文档 进行安装。
    • 确保 Docker Hub 可访问(Nginx 镜像从 Docker Hub 拉取)。
  • 基本概念
    • 容器编排:在 ACI 中,通过定义“容器组”实现简单编排。容器组允许您在一个实例中运行多个容器(如 Nginx 和辅助容器),但本示例以单容器 Nginx 为主。
    • 端口映射:将容器内部端口(如 Nginx 的 80 端口)映射到 ACI 主机的外部端口,以便通过公共 IP 访问。
2. 部署步骤

以下是使用 Azure CLI 部署 Nginx 容器的完整流程。假设您已登录 Azure 账户(使用 az login 命令)。

步骤 1: 创建资源组

资源组用于组织 Azure 资源。运行以下命令创建新资源组:

az group create --name myResourceGroup --location eastus

  • --name myResourceGroup:资源组名称,可自定义。
  • --location eastus:选择 Azure 区域(如 eastuswesteurope)。
步骤 2: 部署 Nginx 容器并配置端口映射

使用 az container create 命令部署 Nginx 容器。关键参数包括:

  • --image nginx:指定 Docker Hub 的官方 Nginx 镜像。
  • --ports 80:定义容器内部端口(Nginx 默认使用 80 端口)。
  • --dns-name-label:为容器组分配唯一 DNS 名称,用于生成公共访问 URL。
  • 端口映射配置:在 ACI 中,--ports 参数自动将容器端口映射到公共端口(无需手动指定主机端口)。

运行命令:

az container create \
  --resource-group myResourceGroup \
  --name my-nginx-container \
  --image nginx \
  --ports 80 \
  --dns-name-label my-nginx-unique-name \
  --restart-policy Always

  • --resource-group myResourceGroup:指定资源组。
  • --name my-nginx-container:容器组名称,可自定义。
  • --dns-name-label my-nginx-unique-name:DNS 标签必须全局唯一(例如,使用您的用户名)。
  • --restart-policy Always:确保容器故障时自动重启。
  • 输出说明:命令执行后,Azure 会自动分配公共 IP 和端口映射(容器端口 80 映射到公共端口 80)。
步骤 3: 验证部署和端口映射
  • 检查容器状态
    az container show --resource-group myResourceGroup --name my-nginx-container --query "{FQDN:ipAddress.fqdn, PublicIP:ipAddress.ip, State:instanceView.state}"
    

    输出类似:
    {
      "FQDN": "my-nginx-unique-name.eastus.azurecontainer.io",
      "PublicIP": "20.100.100.100",
      "State": "Running"
    }
    

    • FQDN:完整域名,用于访问 Nginx。
    • PublicIP:公共 IP 地址。
  • 访问 Nginx: 在浏览器中打开 http://my-nginx-unique-name.eastus.azurecontainer.io,您将看到 Nginx 默认欢迎页面,表示端口映射成功(容器端口 80 已映射)。
3. 容器编排扩展

虽然本示例部署单个 Nginx 容器,但 ACI 支持简单编排(容器组):

  • 多容器编排:例如,部署 Nginx 与一个日志收集容器(如 Fluentd)。
  • 定义 YAML 文件:创建 nginx-group.yaml 文件:
    apiVersion: 2021-09-01
    location: eastus
    name: my-nginx-group
    properties:
      containers:
      - name: nginx
        properties:
          image: nginx
          ports:
          - port: 80
          resources:
            requests:
              cpu: 1.0
              memoryInGB: 1.5
      - name: helper-container  # 示例辅助容器
        properties:
          image: alpine
          command: ["sh", "-c", "while true; do echo 'Logging...'; sleep 10; done"]
      osType: Linux
      ipAddress:
        type: Public
        ports:
        - protocol: TCP
          port: 80
      restartPolicy: Always
    

  • 部署容器组
    az container create --resource-group myResourceGroup --file nginx-group.yaml
    

  • 优势:容器组内容器共享资源(如网络),端口映射通过 ipAddress.ports 统一配置。
4. 常见问题与注意事项
  • 端口映射问题
    • 确保 --ports 参数正确(Nginx 默认端口为 80)。如果自定义 Nginx 配置(如使用 8080),需在 Dockerfile 中暴露端口并更新命令。
    • ACI 自动处理端口映射,无需手动指定主机端口(避免冲突)。
  • 成本优化
    • ACI 按秒计费。测试后删除资源组以免产生费用:
      az group delete --name myResourceGroup --yes
      

  • 安全建议
    • 使用 HTTPS:结合 Azure 应用网关或自定义证书配置 TLS。
    • 限制访问:通过网络安全组(NSG)限制 IP 范围。
  • 性能考虑
    • Nginx 资源限制:在命令中添加 --cpu--memory 参数(如 --cpu 1.0 --memory 1.5),防止资源耗尽。
    • 监控:使用 Azure Monitor 跟踪容器日志和性能。
5. 总结

通过以上步骤,您已成功在 Azure Container Instances 上部署了 Nginx Docker 容器,并配置了端口映射。ACI 的简单编排能力(容器组)支持扩展场景,如多容器应用。整个过程高效可靠,适合快速原型或生产部署。如需进一步优化(如自动缩放),可考虑 Azure Kubernetes Service (AKS),但 ACI 是轻量级解决方案的首选。

如需更多帮助,请参考 Azure 容器实例文档

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐