我對Vagrant和Docker非常陌生,並嘗試將它用於下一個項目,以瞭解它是如何實現的。到目前爲止,我一直在設置一個MongoDB共享集羣。這裏是Vagrantfile是我到目前爲止有:如何使用Vagrant和Docker設置MongoDB
# -*- mode: ruby -*-
# vi: set ft=ruby :
# Vagrantfile API/syntax version. Don't touch unless you know what you're doing!
VAGRANTFILE_API_VERSION = "2"
Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|
#
# MONGO
#
# Shard 1
config.vm.define "mongo-shard1" do |app|
app.vm.provider "docker" do |d|
d.image = "mongo:2.6.5"
d.name = "mongo-shard1"
d.cmd = ["mongod", "--shardsvr", "--noprealloc"]
end
end
#Shard 2
config.vm.define "mongo-shard2" do |app|
app.vm.provider "docker" do |d|
d.image = "mongo:2.6.5"
d.name = "mongo-shard2"
d.cmd = ["mongod", "--shardsvr", "--noprealloc"]
end
end
#Config Server
config.vm.define "mongo-config" do |app|
app.vm.provider "docker" do |d|
d.image = "mongo:2.6.5"
d.name = "mongo-config"
d.cmd = ["mongod", "--configsvr", "--dbpath", "/data/db", "--noprealloc"]
end
end
#Routing Server
#THIS IS NOT DONE AND WORKING
config.vm.define "mongo-routing" do |app|
app.vm.provider "docker" do |d|
d.image = "mongo:2.6.5"
d.name = "mongo-routing"
d.link("mongo-shard1:mongo-shard1")
d.link("mongo-shard2:mongo-shard2")
d.link("mongo-config:mongo-config")
d.cmd = ["mongos", "--configdb", "config_host:port"]
end
end
end
然後,我開始這一切:
vagrant up --provider=docker --no-parallel
我設法讓碎片和配置服務器了(我認爲),但路由服務器顯然不工作,因爲我需要通過主機:端口爲configdb(我該怎麼做?)
然後我還需要在路由服務器上運行以下mongo命令:
$ mongo
mongos> sh.addShard("shard1_host:port");
mongos> sh.addShard("shard2_host:port");
我不知道該怎麼做。那麼,將路由服務器連接到配置和分片的最佳方式是什麼?我正在做甚麼正確的方式來做這一切?我試過使用谷歌搜索「流浪漢碼頭芒戈碎片」,我得到了一堆瘋狂的設置,但也許這就是需要?
我想你應該公開容器的mogodb端口:d.expose port [link](http://docs.mongodb.org/manual/reference/default-mongodb-port)。一種選擇是爲執行bash文件並執行所有需要的命令的路由服務器創建自己的Dockerfile。另一個選擇是在用exec [link](http://docs.docker.com/reference/commandline/cli/#docker-exec-driver-option)啓動後手動運行這些命令(通過腳本或其他) – 2014-11-24 16:44:48