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
即可输出代码中想要打印的数据信息。