原本,准备在一个 Ubuntu 上做 Docker MongoDB 集群的。
有可能一个系统做集群没什么实际意义。所以,相关的资料基本找不到。
后来,Google 到一篇复制集群的文章,觉得可以拿来参考一下。
复制集群
首先安装 docker-compose
1
$ apt-get install docker-compose
新建文件 docker-compose.yml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
version: '2.0'
services:
rs1:
image: mongo:3.4
container_name: "rs1"
ports:
- "30001:27017"
volumes:
- /root/mongodb/data/rs1:/data/db
command: mongod --dbpath /data/db --replSet mongoreplset
rs2:
image: mongo:3.4
container_name: "rs2"
ports:
- "30002:27017"
volumes:
- /root/mongodb/data/rs2:/data/db
command: mongod --dbpath /data/db --replSet mongoreplset
rs3:
image: mongo:3.4
container_name: "rs3"
ports:
- "30003:27017"
volumes:
- /root/mongodb/data/rs3:/data/db
command: mongod --dbpath /data/db --replSet mongoreplset
执行 docker-compose up -d 可以启动三个容器。通过 docker ps 查看容器是否启动成功,如果启动失败,可以通过命令 docker logs 容器id查看日志信息。
初始化
1
2
3
4
5
6
docker exec -ti rs1 mongo
rs.initiate()
rs.add('rs2:27017')
rs.add('rs3:27017')
rs.status()
在rs1容器写入一条数据,然后进入rs2和rs3查看数据是否同步
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
docker exec -ti rs1 mongo
use test
db.test.insert({now: new Date()})
quit()
docker exec -ti rs2 mongo
rs.slaveOk() // 备份节点默认不可读写,需要通过该命令来允许读操作
use test
db.test.find()
quit()
docker exec -ti rs3 mongo
rs.slaveOk()
use test
db.test.find()
quit()
执行 docker-compose stop 可以关闭三个容器。
单机版
拉取官方镜像
1
$ docker pull mongo:3.4
直接使用镜像
1
$ docker run -p 27017:27017 --name singleMongo -v /root/mongoData:/data/db -d mongo:3.4
需要校验 –auth
启动/停止
1
2
$ docker stop singleMongo
$ docker start singleMongo
进入容器
1
$ docker exec -it singleMongo mongo
另一种方式,直接创建镜像,并进入容器
1
$ docker run -it -p 27017:27017 --name singleMongo mongo:3.4 mongo