https://github.com/senssei/mongo-cluster-docker
基于上面仓库,改造了一个副本集。
https://github.com/kxtry/mongo-cluster-docker
1.副本集docker-compose脚本
version: '3' services: mgoprimary: container_name: "mgoprimary" image: mongo:4.2 ports: - "27017:27017" command: mongod --replSet vmlocal --port 27017 --oplogSize 16 links: - mgoreplica1:mgoreplica1 - mgoreplica2:mgoreplica2 restart: always extra_hosts: - "mgo.db.com:{{extern_ip}}" volumes: - /etc/localtime:/etc/localtime:ro - /etc/timezone:/etc/timezone:ro - ./data/mgoprimary/data:/data/db mgoreplica1: container_name: "mgoreplica1" image: mongo:4.2 ports: - "27018:27017" command: mongod --replSet vmlocal --port 27017 --oplogSize 16 restart: always extra_hosts: - "mgo.db.com:{{extern_ip}}" volumes: - /etc/localtime:/etc/localtime:ro - /etc/timezone:/etc/timezone:ro - ./data/mgoreplica1/data:/data/db mgoreplica2: container_name: "mgoreplica2" image: mongo:4.2 ports: - "27019:27017" command: mongod --replSet vmlocal --port 27017 --oplogSize 16 restart: always extra_hosts: - "mgo.db.com:{{extern_ip}}" volumes: - /etc/localtime:/etc/localtime:ro - /etc/timezone:/etc/timezone:ro - ./data/mgoreplica2/data:/data/db setup-vmlocal: container_name: "setup-vmlocal" image: mongo:4.2 depends_on: - "mgoprimary" - "mgoreplica1" - "mgoreplica2" extra_hosts: - "mgo.db.com:{{extern_ip}}" links: - mgoprimary:mgoprimary - mgoreplica1:mgoreplica1 - mgoreplica2:mgoreplica2 volumes: - ./scripts:/scripts environment: - MONGO1=mgo.db.com:27017 - MONGO2=mgo.db.com:27018 - MONGO3=mgo.db.com:27019 - RS=vmlocal entrypoint: [ "/scripts/setup.sh" ] |
3.与docker-compose.yml相同子目录下的./scripts/setup.sh脚本
#!/bin/bash mongodb1="${MONGO1}" mongodb2="${MONGO2}" mongodb3="${MONGO3}" echo "Waiting for startup.." until mongo --host ${mongodb1} --eval 'quit(db.runCommand({ ping: 1 }).ok ? 0 : 2)' &>/dev/null; do printf '.' sleep 1 done echo "Started.." echo setup.sh time now: `date +"%T" ` mongo --host ${mongodb1} <<EOF var cfg = { "_id": "${RS}", "protocolVersion": 1, "members": [ { "_id": 0, "host": "${mongodb1}" }, { "_id": 1, "host": "${mongodb2}" }, { "_id": 2, "host": "${mongodb3}" } ] }; rs.initiate(cfg, { force: true }); rs.reconfig(cfg, { force: true }); EOF |
3.构建脚本build_cluster.sh
#!/bin/sh path_current=`pwd` path_script=$(cd "$(dirname "$0")"; pwd) mode=$1 extern_ip=$2 case "$mode" in 'build') if [ -f $path_script/docker-compose.yml ]; then echo 'the docker-compose.yml had been exist. if you want to continue, remove it.' exit 1 fi /bin/cp $path_script/docker-compose.yml.template $path_script/docker-compose.yml && echo "$path_script/docker-compose.yml" | xargs /bin/sed -i "s#{{extern_ip}}#$extern_ip#g" echo 'success to build the file.' ;; *) basename=`basename "$0"` echo "Usage: $basename {build}{extern_ip}" echo "---$basename build 192.168.10.104" ;; esac |