Service Fabric部署本地Docker容器:是否需上传镜像至公共仓库?
Service Fabric来宾应用使用本地Docker镜像的解决方案
不用非得把镜像上传到Docker Hub、ACR这类公共/云仓库!Service Fabric完全支持直接使用本地Docker镜像,下面给你讲具体的实现方式和注意事项:
前提条件:镜像要在集群所有节点上可用
因为Service Fabric是分布式集群,每个节点都需要能访问到镜像才能启动容器。如果是单节点本地集群,直接用你本地已有的镜像就行;如果是多节点本地集群,你需要把镜像同步到每个节点:- 用
docker save -o my-image.tar my-local-image:latest导出镜像 - 把tar包复制到每个集群节点,再用
docker load -i my-image.tar导入
- 用
修改Service Fabric服务清单配置
在你的Service Fabric应用的ServiceManifest.xml里,找到容器相关的配置块,调整ImageName为你的本地镜像名,同时清空注册表凭证(因为不需要从远程仓库拉取):<ServiceManifest ...> <ServiceTypes> <StatelessServiceType ServiceTypeName="MyContainerServiceType" UseImplicitHost="true" /> </ServiceTypes> <CodePackage Name="Code" Version="1.0.0"> <EntryPoint> <ContainerHost> <ImageName>my-local-image:latest</ImageName> <!-- 不需要远程仓库凭证,所以留空 --> <RegistryCredential Username="" Password="" /> </ContainerHost> </EntryPoint> </CodePackage> </ServiceManifest>可选:用本地私有仓库简化镜像同步
如果你的本地集群有多个节点,手动同步镜像太麻烦,可以在本地搭建一个Docker私有registry:- 启动私有registry容器:
docker run -d -p 5000:5000 --name registry registry:2 - 给本地镜像打标签:
docker tag my-local-image:latest localhost:5000/my-local-image:latest - 推送到本地registry:
docker push localhost:5000/my-local-image:latest - 在每个集群节点的Docker配置里添加
insecure-registries(比如localhost:5000或者你的registry机器IP:5000),重启Docker服务 - 然后在ServiceManifest里把
ImageName设为your-registry-ip:5000/my-local-image:latest,RegistryCredential同样留空
- 启动私有registry容器:
注意:如果是多节点集群,所有节点必须能访问到这个本地私有仓库,或者每个节点都有镜像的本地副本,否则Service Fabric会因为拉取不到镜像而启动容器失败。
内容的提问来源于stack exchange,提问作者Kalaiselvan
相关产品推荐
相关产品推荐

