Azure Service Fabric 中的 Docker Compose 部署支持
Docker 使用 docker-compose.yml 文件定义多容器应用程序。 为了让客户轻松地熟练使用 Docker 来安排 Azure Service Fabric 中的现有容器应用程序,我们在平台中添加了对 Docker Compose 部署的本机预览支持。 Service Fabric 可接受 docker-compose.yml
文件的版本 3 和更高版本。
由于这种支持处于预览状态,因此仅支持一部分 Compose 指令。
若要使用此预览版,请通过 Azure 门户以及相应的 SDK 使用 5.7 版本或更高版本的 Service Fabric 运行时创建群集。
注意
此功能处于预览状态,在生产环境中不受支持。 以下示例基于运行时版本 6.0 和 SDK 版本 2.8。
在 Service Fabric 上部署一个 Docker Compose 文件
以下命令创建一个 Service Fabric 应用程序(名为 fabric:/TestContainerApp
),可以像对任何其他 Service Fabric 应用程序一样对该应用程序进行监视和托管。 指定的应用程序名称可用于运行状况查询。
Service Fabric 会将“DeploymentName”识别为 Compose 部署的标识符。
使用 PowerShell
通过在 PowerShell 中运行以下命令,根据 docker-compose.yml 文件创建 Service Fabric Compose 部署:
New-ServiceFabricComposeDeployment -DeploymentName TestContainerApp -Compose docker-compose.yml [-RegistryUserName <>] [-RegistryPassword <>] [-PasswordEncrypted]
RegistryUserName
和 RegistryPassword
指容器注册表用户名和密码。 创建完部署后,可以使用以下命令检查其状态:
Get-ServiceFabricComposeDeploymentStatus -DeploymentName TestContainerApp
若要通过 PowerShell 删除 Compose 部署,请使用以下命令:
Remove-ServiceFabricComposeDeployment -DeploymentName TestContainerApp
若要通过 PowerShell 启动 Compose 部署升级,请使用以下命令:
Start-ServiceFabricComposeDeploymentUpgrade -DeploymentName TestContainerApp -Compose docker-compose-v2.yml -Monitored -FailureAction Rollback
若要通过 PowerShell 回滚 Compose 部署升级,请使用以下命令:
Start-ServiceFabricComposeDeploymentRollback -DeploymentName TestContainerApp
接受升级之后,可以使用以下命令跟踪升级进度:
Get-ServiceFabricComposeDeploymentUpgrade -DeploymentName TestContainerApp
使用 Azure Service Fabric CLI (sfctl)
或者,可以使用以下 Service Fabric CLI 命令:
sfctl compose create --deployment-name TestContainerApp --file-path docker-compose.yml [ [ --user --encrypted-pass ] | [ --user --has-pass ] ] [ --timeout ]
创建部署后,可以使用以下命令检查其状态:
sfctl compose status --deployment-name TestContainerApp [ --timeout ]
若要删除 Compose 部署,请使用以下命令:
sfctl compose remove --deployment-name TestContainerApp [ --timeout ]
若要启动 Compose 部署升级,请使用以下命令:
sfctl compose upgrade --deployment-name TestContainerApp --file-path docker-compose-v2.yml [ [ --user --encrypted-pass ] | [ --user --has-pass ] ] [--upgrade-mode Monitored] [--failure-action Rollback] [ --timeout ]
若要回滚 Compose 部署升级,请使用以下命令:
sfctl compose upgrade-rollback --deployment-name TestContainerApp [ --timeout ]
接受升级之后,可以使用以下命令跟踪升级进度:
sfctl compose upgrade-status --deployment-name TestContainerApp
支持的 Compose 指令
此预览版支持 Compose 版本 3 格式中的一部分配置选项,包括以下基元:
- 服务 > 部署 > 副本
- 服务 > 部署 > 放置 > 约束
- 服务 > 部署 > 资源 > 限制
- -cpu-shares
- -memory
- -memory-swap
- 服务 > 命令
- 服务 > 环境
- 服务 > 端口
- 服务 > 映像
- 服务 > 隔离(仅适用于 Windows)
- 服务 > 日志记录 > 驱动程序
- 服务 > 日志记录 > 驱动程序 > 选项
- 卷和部署 > 卷
将群集设置为强制实施 Service Fabric 资源调控中所述的资源限制。 所有其他 Docker Compose 指令均不受此预览版支持。
端口部分
指定 Service Fabric 侦听程序将使用“端口”部分中的 http 还是 https 协议。 这将确保使用命名服务正确发布终结点协议,以允许反向代理转发请求:
- 若要路由到不安全的 Service Fabric Compose 服务,请指定 /http。 例如“80:80/http”。
- 若要路由到安全的 Service Fabric Compose 服务,请指定 /https。 例如“443:443/https”。
注意
/http 和 /https 端口部分语法特定于 Service Fabric,用于注册正确的 Service Fabric 侦听程序 URL。 如果以编程方式验证 Docker Compose 文件语法,则可能导致验证错误。
ServiceDnsName 计算
如果 Compose 文件中指定的服务名称是完全限定的域名(也就是说,它包含一个句点 [.]),则由 Service Fabric 注册的 DNS 名称为 <ServiceName>
(包含句点)。 如果不是,则应用程序名称中的每个路径段都会成为服务 DNS 名称中的域标签,其中第一个路径段成为顶级域标签。
例如,如果指定的应用程序名称为 fabric:/SampleApp/MyComposeApp
,则 <ServiceName>.MyComposeApp.SampleApp
将是注册的 DNS 名称。
Compose 部署(实例定义)与 Service Fabric 应用模型(类型定义)
docker-compose.yml 文件描述一组包括属性和配置在内的可部署容器。 例如,该文件可以包含环境变量和端口。 还可以在 docker-compose.yml 文件中指定放置约束、资源限制和 DNS 名称等部署参数。
Service Fabric 应用程序模型使用服务类型和应用程序类型,在此模型中,可以有相同类型的多个应用程序实例。 例如,每个客户一个应用程序实例。 此基于类型的模型支持向运行时注册相同应用程序类型的多个版本。
例如,客户 A 可以有一个使用 1.0 类型的 AppTypeA 实例化的应用程序,而客户 B 可以有另一个使用相同类型和版本实例化的应用程序。 在应用程序清单中定义应用程序类型,在创建应用程序时指定应用程序名称和部署参数。
虽然此模型具有较大灵活性,但我们还是计划支持一种更简单的基于实例的部署模型(其类型隐含在清单文件中)。 在此模型中,每个应用程序都会获取自己独立的清单。 我们将通过增加对 docker-compose.yml 的支持,实现对此模型(采用基于实例的部署格式)的预览支持。