ACI集成撰写功能
预计阅读时间:9分钟
撰写-Azure容器实例映射
本文档概述了将Compose文件中定义的应用程序转换为ACI对象的过程。在较高级别上,每个Compose部署都映射到单个ACI容器组。每个服务都映射到容器组中的一个容器。Docker ACI集成不允许扩展服务。
撰写栏位对应
下表列出了受支持的Compose文件字段及其对应的ACI。
传奇:
- ✓:已实施
- n:尚未实施
- x:不适用/没有可用的转换
| 按键 | 地图 | 笔记 |
|---|---|---|
| 服务 | ✓ | |
| service.service.build | X | 忽略了。在ACI上不支持映像构建。 |
| service.cap_add,cap_drop | X | |
| 服务命令 | ✓ | 覆盖容器命令。在ACI上,command如果映像已定义命令或入口点,则指定将覆盖映像命令和入口点 |
| service.configs | X | |
| service.cgroup_parent | X | |
| service.container_name | X | 服务名称用作ACI上的容器名称。 |
| service.credential_spec | X | |
| 服务部署 | ✓ | |
| service.deploy.endpoint_mode | X | |
| service.deploy.mode | X | |
| service.deploy.replicas | X | 每个服务仅启动一个副本。 |
| service.deploy.placement | X | |
| service.deploy.update_config | X | |
| service.deploy.resources | ✓ | 限制:ACI资源限制不能大于容器组中所有容器的资源预留总和。使用大于容器保留的容器限制将导致同一容器组中的容器与资源竞争。 |
| service.deploy.restart_policy | ✓ | 一:any,none,on-failure。限制:所有服务必须具有相同的重新启动策略。如果需要,将重新启动整个ACI容器组。 |
| service.deploy.labels | X | ACI没有容器级标签。 |
| 服务设备 | X | |
| service.depends_on | X | |
| service.dns | X | |
| service.dns_search | X | |
| 服务域名 | ✓ | 映射到ACI DNSLabelName。限制:domainname如果指定,所有服务都必须指定相同的内容。domainname在全球范围内必须是唯一的 |
| service.tmpfs | X | |
| 服务入口点 | X | ACI仅支持覆盖容器命令。 |
| service.env_file | ✓ | |
| 服务环境 | ✓ | |
| service.expose | X | |
| service.extends | X | |
| service.external_links | X | |
| service.extra_hosts | X | |
| service.group_add | X | |
| 服务健康检查 | ✓ | |
| service.hostname | X | |
| 服务图像 | ✓ | 如果用户在部署时登录到相应的注册表,则可以访问私有映像。如果可能,用户将使用其Azure登录名自动登录到Azure容器注册表。 |
| 服务隔离 | X | |
| 服务标签 | X | ACI没有容器级标签。 |
| 服务链接 | X | |
| 服务记录 | X | |
| service.network_mode | X | |
| 服务网络 | X | 通过/etc/hosts在容器组的共享文件中为每个服务定义映射来实现服务之间的通信。每个服务都可以解析其他服务的名称,并且所产生的网络调用将被重定向到localhost。 |
| service.pid | X | |
| 服务端口 | ✓ | ACI仅支持对称端口映射。请参阅暴露端口。 |
| service.secrets | ✓ | 参见秘密。 |
| service.security_opt | X | |
| service.stop_grace_period | X | |
| service.stop_signal | X | |
| service.sysctls | X | |
| service.ulimits | X | |
| service.userns_mode | X | |
| 服务量 | ✓ | 映射到AZure文件共享。请参阅持久卷。 |
| 服务重启 | X | 替换为service.deployment.restart_policy |
| 体积 | X | |
| 司机 | ✓ | 请参阅持久卷。 |
| driver_opts | ✓ | |
| 外部的 | X | |
| 标签 | X | |
| 秘密 | X | |
| 待定 | X | |
| 设定档 | X | |
| 待定 | X | |
日志
可以使用获取每个容器的容器日志docker logs <CONTAINER>。Docker ACI集成当前不支持Compose应用程序中容器的聚合日志,请参阅https://github.com/docker/compose-cli/issues/803。
暴露端口
当一个或多个服务公开端口时,整个ACI容器组将公开,并获得分配的公共IP。由于所有服务都映射到同一容器组中的容器,因此只有一项服务无法公开给定的端口号。 ACI不支持端口映射,因此在Compose文件中定义的源端口和目标端口必须相同。
公开端口时,服务还可以指定服务domainname字段以设置DNS主机名。domainname将用于指定ACI DNS标签名称,并且ACI容器组在以下位置可访问
持久卷
Docker卷映射到Azure文件共享。仅支持长的Compose卷格式,这意味着必须在本volume节中定义卷。用名称定义卷,该driver字段必须设置为azure_file,并且driver_options必须定义要用于该卷的存储帐户和文件共享。然后,服务可以通过其名称引用该卷,并指定要在容器中挂载的目标路径。
services:
myservice:
image: nginx
volumes:
- mydata:/mount/testvolumes
volumes:
mydata:
driver: azure_file
driver_opts:
share_name: myfileshare
storage_account_name: mystorageaccount
ACI卷不允许使用短卷语法,因为它是为运行本地容器时本地路径绑定安装而设计的。撰写文件可以定义多个卷,并具有不同的Azure文件共享或存储帐户。
存储帐户的凭据将在部署时使用Azure登录名自动获取,以检索所使用的每个存储帐户的存储帐户密钥。
机密
机密可以在撰写文件中定义,并且需要在部署时在撰写文件旁边提供机密文件。秘密文件的内容将在选定容器内可用,默认情况下位于/run/secrets/<SECRET_NAME>。ACI集成不支持外部机密。
services:
nginx:
image: nginx
secrets:
- mysecret1
db:
image: mysql
secrets:
- mysecret2
secrets:
mysecret1:
file: ./my_secret1.txt
mysecret2:
file: ./my_secret2.txt
Nginx容器的secret1挂载为/run/secrets/mysecret1,db容器的secret2挂载为/run/secrets/mysecret2
还可以指定目标以设置已安装文件的名称,或通过指定安装机密文件的绝对路径来指定目标
services:
nginx:
image: nginx
secrets:
- source: mysecret1
target: renamedsecret1.txt
db:
image: mysql
secrets:
- source: mysecret1
target: /mnt/dbmount/mysecretonmount1.txt
- source: mysecret2
target: /mnt/dbmount/mysecretonmount2.txt
secrets:
mysecret1:
file: ./my_secret1.txt
mysecret2:
file: ./my_secret2.txt
在此示例中,该nginx服务将秘密安装到该服务/run/secrets/renamedsecret1.txt,db并将有2个文件(mysecretonmount1.txt和mysecretonmount2.txt)。两者都安装在同一文件夹(/mnt/dbmount/)中。
注意:目标中不允许相对文件路径
注意:秘密文件不能安装在其他现有文件旁边的文件夹中
集装箱资源
可以在compose中设置CPU和内存的保留和限制。资源限制必须大于保留。在ACI中,设置与资源保留不同的资源限制将导致同一容器组中的容器竞争资源。资源限制不能大于容器组的总资源预留量。(因此,单个容器不能具有与资源预留不同的资源限制)
services:
db:
image: mysql
deploy:
resources:
reservations:
cpus: '2'
memory: 2G
limits:
cpus: '3'
memory: 3G
web:
image: nginx
deploy:
resources:
reservations:
cpus: '1.5'
memory: 1.5G
在此示例中,将为db容器分配2个CPU和2G内存。使用分配给Web容器的某些资源,最多可以使用3个CPU和3G内存。默认情况下,Web容器的限制值将设置为与保留值相同的值。
健康检查
可以在healthcheck每个服务的部分中描述运行状况检查。这LivenessProbe在ACI中被翻译成a 。如果运行状况检查失败,则认为该容器不健康并被终止。为了使容器自动重新启动,服务需要具有除none设置之外的其他重新启动策略。请注意,如果未设置默认的重启策略为any。
services:
web:
image: nginx
deploy:
restart_policy:
condition: on-failure
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:80"]
interval: 30s
timeout: 10s
retries: 3
start_period: 40s
注:该test命令可以是string或数组起始或不通过NONE,CMD,CMD-SHELL。在ACI实现中,这些前缀将被忽略。