環境 Docker version 1.6.2 mongodb 3.0.4java
第一步 編寫Dockerfile並生成鏡像mongodb
主意包含兩個Dockerfile鏡像,一個mongod的,一個mongos(在集羣中負責路由)
docker
編寫Mongod的Dockerfile:shell
FROM ubuntu:14.04 RUN apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 7F0CEB10 ENV MONGO_MAJOR 3.0 RUN echo "deb http://repo.mongodb.org/apt/debian wheezy/mongodb-org/$MONGO_MAJOR main" > /etc/apt/sources.list.d/mongodb-org.list # Install MongoDB RUN apt-get update RUN sudo apt-get install -y mongodb-org=3.0.4 mongodb-org-server=3.0.4 mongodb-org-shell=3.0.4 mongodb-org-mongos=3.0.4 mongodb-org-tools=3.0.4 # Create the MongoDB data directory RUN mkdir -p /data/db EXPOSE 27017 ENTRYPOINT ["usr/bin/mongod"]
構建上面的Dockerfile 生成鏡像:ubuntu
sudo docker build -t robin/mongod:master .
-t 指定要放的 倉庫地址,冒號後面master表明tag, 後面那個點 表明當前目錄(含有剛剛編寫好的Dockerfile的目錄)服務器
編寫Mongos的Dockerfile:性能
FROM robin/mongod:master EXPOSE 27017 ENTRYPOINT ["usr/bin/mongos"]
構建鏡像:測試
sudo docker build -t robin/mongos:master .
第二步 啓動mongodb集羣所需的Docker容器:ui
建立副本集1 spa
docker run --name rs1_srv1 -p 21117:27017 -d robin/mongod:master --noprealloc --smallfiles --replSet rs1 docker run --name rs1_srv2 -p 21217:27017 -d robin/mongod:master --noprealloc --smallfiles --replSet rs1 docker run --name rs1_srv3 -p 21317:27017 -d robin/mongod:master --noprealloc --smallfiles --replSet rs1
-p 映射宿主機器和容器內部的端口。-d 表示deamon模式運行。
--smallfile 減少初始化數據文件的大小,並限制數據文件最大爲512M (reduces the initial size for data files and limits the maximum size to 512 megabytes).
--noprealloc主要是爲了節省硬盤,禁掉預先分配硬盤。生產環境不要用該選項,會致使性能降低,產生磁盤碎片。
建立副本集2
docker run --name rs2_srv1 -p 22117:27017 -d robin/mongod:master --noprealloc --smallfiles --replSet rs2 docker run --name rs2_srv2 -p 22217:27017 -d robin/mongod:master --noprealloc --smallfiles --replSet rs2 docker run --name rs2_srv3 -p 22317:27017 -d robin/mongod:master --noprealloc --smallfiles --replSet rs2
建立配置容器
docker run --name cfg1 -p 20117:27017 -d robin/mongod:master --noprealloc --smallfiles --configsvr --dbpath /data/db --port 27017 docker run --name cfg2 -p 20217:27017 -d robin/mongod:master --noprealloc --smallfiles --configsvr --dbpath /data/db --port 27017 docker run --name cfg3 -p 20317:27017 -d robin/mongod:master --noprealloc --smallfiles --configsvr --dbpath /data/db --port 27017
建立mongo router
找到配置容器對應的ip 和port
使用mac boot2docker +VirtualBox 必定要注意宿主機的ip是VirtualBox 而不是本機的
運行下邊的命令獲得容器宿主機器ip
boot2docker ip
docker run --name mongos_router -p 27017:27017 -d robin/mongos:master --configdb <宿主ip>:20117,<宿主ip>:20217,<宿主ip>:20317 --port 27017
這裏只建立一臺路由服務,這樣會存在單點故障問題,能夠建立三臺來解決問題。
第三步配置副本集與分片
配置副本集1
//鏈接到rs1_svr1 mongo <宿主ip>:21117 //配置副本集 rs.initiate(); rs.add("<宿主ip>:21217"); rs.add("<宿主ip>:21317"); rs.status(); Fix hostname of primary. cfg = rs.conf(); cfg.members[0].host = "<宿主ip>:21117"; rs.reconfig(cfg); rs.status(); //以上命令一個一個執行
配置副本集2
//鏈接到rs2_svr1 mongo <宿主ip>:22117 //配置副本集 rs.initiate(); rs.add("<宿主ip>:22217"); rs.add("<宿主ip>:22317"); rs.status(); Fix hostname of primary. cfg = rs.conf(); cfg.members[0].host = "<宿主ip>:22117"; rs.reconfig(cfg); rs.status(); //以上命令一個一個執行
配置分片
//鏈接到路由服務器 mongo <宿主ip>:27017 sh.addShard("rs1/<宿主ip>:27017"); sh.addShard("rs2/<宿主ip>:27017"); sh.status();
而後測試OK
若是用mac VirtualBox搭建docker 可能會遇到mongo分配文件空間不足的問題,調下磁盤大小就OK了