首先swarm集群为什么使用docker-composer v3来发布:
现在只有v3支持deploy属性(是docker swarm相关配置)
参考:https://docs.docker.com/compose/compose-file/compose-versioning/#version-3 (这里面有v2和v3的配置区别)
docker-composer.yaml文件内容说明:
version: '3'
#这个可以填1.0-3.3据体版本号是否支持要对应的docker版本(越高支持越多,但也删除了不少功能)
#https://docs.docker.com/compose/compose-file/#reference-and-guidelines 支持情况参考此地址
说明:
docker-composer使用swarm容器时很多标签没法使用
1.container_name 容器名称
2.links 关链联接
3.extends (吐血,v3不支持,可能以后会支持)
4. env 环境变量(再吐血....)
现在只举一个docker-compose-zk.yaml配置说明:
version: '3' #使用docker-composer版本3+
services:
zookeeper0:#这个是service服务名,在一个overlay中可以直接ping zookeeper0可以通
image: hyperledger/fabric-zookeeper:x86_64-1.0.3
deploy: #service服务发布信息
replicas: 1 #应用被复制的份数
update_config: #更新service的说明
parallelism: 1 #//TODO
delay: 10s
restart_policy:
condition: on-failure#启动或service服务错误后重启服务
delay: 5s
max_attempts: 3 #最多重启3次,超过重启次数最好在portainer中重启,而不是docker start方式
placement:
constraints: #使用布署约束,可以指定布署到相应条件下的节点上
# - node.hostname==fabric_node_01 #hostname可能会被更新或指定,不建议使用这个
- node.labels.fabric_node_01==fabric_node_01 #指定要安装到node上有labels[fabric_node_01]的机子上
hostname: zookeeper0 #service的hostname 可有可无
networks:
blockchain-network:#这个是overlay的网络配置,指定了使用blockchain-network网络,必须在最外层配置好
aliases:
- zookeeper0 #这个指定后可以在overlay网内通过这个名称访问到这个服务(即ping到这个服务)
environment:
- ZOO_DATA_DIR=/data #zk的服务生成的目录,这个必须指定,并用volumes指定到服务外
- ZOO_MY_ID=1 #这个zk集群的本服务id,只要不唯一即可
- ZOO_SERVERS=server.1=zookeeper0:2888:3888 server.2=zookeeper1:2888:3888 #这个就不说了
volumes:
- /usr/share/zoneinfo/Asia/Shanghai:/etc/localtime #映射本地文件夹,指定容器为东8区
- /opt/fabric_data/fabric_node_01/zk/data:/data
#映射本地文件夹,应射前一定要先mkdir -p创建好这个文件夹,把关键数据映射出去,服务自动重启后数据不会丢失(相当于服务和存储分离了),这里只用的本机映射的方式,这个是volumes相关的东西,还可以应映到存储云或nfs节点上
#可以自个创建一个volume,文件映射到这个volume上,volume可以加密,云存储,灾难备份等功能
zookeeper1:
image: hyperledger/fabric-zookeeper:x86_64-1.0.3
deploy:
replicas: 1
update_config:
parallelism: 1
delay: 10s
restart_policy:
condition: on-failure
delay: 5s
max_attempts: 3
placement:
constraints:
- node.labels.fabric_node_04==fabric_node_04
hostname: zookeeper1
networks:
blockchain-network:
aliases:
- zookeeper1
environment:
- ZOO_DATA_DIR=/data
- ZOO_MY_ID=2
- ZOO_SERVERS=server.1=zookeeper0:2888:3888 server.2=zookeeper1:2888:3888
volumes:
- /usr/share/zoneinfo/Asia/Shanghai:/etc/localtime
- /opt/fabric_data/fabric_node_04/zk/data:/data
depends_on:
- zookeeper0 #容器启动前先要启动zookeeper0
networks: #最外层的网络指定配置,这里可以写多个网络
blockchain-network:
external:
name: blockchain-network
swarm服务要使用overlay网格:
#创建overlay网络
docker network create --driver overlay --subnet=10.199.1.0/24 blockchain-network --attachable
最后就是端口开放了,这个前面说过了
docker-compser的官方文档地址:https://docs.docker.com/compose/compose-file/