Docker Container Link -- Java MongoDB Driver Client 和 MongoDB的 docker link使用

开始之前,首先需要知晓Docker Link Environment Variable的相关知识,

使用官方mongo image:

https://hub.docker.com/_/mongo/

 

首先,启动mongo:

docker run -p 27017:27017 -v /var/opt/mongo:/data/db --name mymongo -d mongo

其中,-p 27017:27017 此命令可以省略,因为这是宿主机的端口映射,跟container之间的link没有关系。

/var/opt/mongo为宿主机已经存有的mongo数据库数据,作为data volume加载到mymongo容器里。 

 

这时候使用busybox link mymongo容器,并且使用set查看环境变量。

docker run -it --link mymongo:mongo --name mongotest busybox

 

我们可以看到,此时link到mymongo的busybox中含有以下环境变量:

MONGO_ENV_GOSU_VERSION='1.7'
MONGO_ENV_GPG_KEYS='DFFA3DCF326E302C4787673A01C4E7FAAAB2461C 42F3E95A2C4F08279C4960ADD68FA50FEA312927'
MONGO_ENV_MONGO_MAJOR='3.2'
MONGO_ENV_MONGO_VERSION='3.2.9'
MONGO_NAME='/mongotest/mongo'
MONGO_PORT='tcp://172.17.0.3:27017'
MONGO_PORT_27017_TCP='tcp://172.17.0.3:27017'
MONGO_PORT_27017_TCP_ADDR='172.17.0.3'
MONGO_PORT_27017_TCP_PORT='27017'
MONGO_PORT_27017_TCP_PROTO='tcp'

其中,我们会用到MONGO_PORT_27017_TCP_ADDR='172.17.0.3'和MONGO_PORT_27017_TCP_PORT='27017'来连接mongoDB。

 

可以查看此时的/etc/hosts文件:

mymongo被分配到172.17.0.3,即是上面看到的env环境中的mongoDB的ip地址。

 

得到这个信息以后,我们可以在java代码中调用此环境变量访问mongoDB了。

使用方法为:

String server = System.getenv("MONGO_PORT_27017_TCP_ADDR");
String port = System.getenv("MONGO_PORT_27017_TCP_PORT");

MongoCredential mongoCredential = MongoCredential.createScramSha1Credential(user, database,
pwd.toCharArray());
MongoClient mongoClient = new MongoClient(new ServerAddress(
server, Integer.valueOf(port)),
Arrays.asList(mongoCredential));

具体示例参照笔者github代码:

https://github.com/flasheryu/docker-java-mongodb-driver/blob/master/src/main/java/org/example/TestMongo.java

 

示例中,使用

https://github.com/flasheryu/docker-java-mongodb-driver中

代码构建java-mongodb-driver镜像:

docker build -t java-mongodb-driver .

 

构建完成后运行命令:

docker run --link mymongo:mongo java-mongodb-driver

即可输出代码中想要打印的数据信息。

 

posted on 2016-08-23 13:14  傻子才悲伤  阅读(684)  评论(0编辑  收藏  举报

导航