需要一些build议dockerizing MongoDB
我正在玩MongoDB和Docker,在这一点上,我正在努力为自己创造一个有用的图像在工作中使用。 我已经创build了下面的Dockerfile
:
FROM mongo:2.6 MAINTAINER Reynier Perez <reynierpm@gmail.com> VOLUME /data/db /data/configdb CMD ["mongod"] EXPOSE 27017
我已经将它添加到我docker-compose.yml
文件中了:
version: '2' services: ### PHP/Apache Container php-apache: container_name: "php55-dev" image: reynierpm/php55-dev ports: - "80:80" environment: PHP_ERROR_REPORTING: 'E_ALL & ~E_DEPRECATED & ~E_NOTICE' volumes: - ~/mmi:/var/www - ~/data:/data links: - mongodb ### MongoDB Container mongodb: container_name: "mongodb" build: ./mongo environment: MONGODB_USER: "xxxx" MONGODB_DATABASE: "xxxx" MONGODB_PASS: "xxxx" ports: - "27017:27017" volumes: - ~/data/mongo:/data/db
我有一些关于这个设置的问题:
- 我需要在
VOLUME /data/db /data/configdb
上的VOLUME /data/db /data/configdb
,或者在Dockerfile
有足够的这个行~/data/mongo:/data/configdb
docker-compose.yml
吗? - 我假设(我从这里拿走),只要我build立的Mongo镜像,我将创build一个数据库,并给予用户密码的完整权限,因为它是在环境variables? 我是对的? (我在这里找不到任何有用的东西 )
- 如何将当前的mongo备份(多个JSON文件)导入到应该在mongo容器上创build的数据库中? 我相信我需要运行
mongorestore
命令,但是如何? 我需要创build一个脚本,并在每次启动容器时运行它? 或者我应该在图像构build过程中运行? 什么是最好的方法?
我需要在Dockerfile上的VOLUME / data / db / data / configdb,或者在docker-compose.yml中有足够的这个行〜/ data / mongo:/ data / configdb吗?
当您挂载主机目录时不需要VOLUME
但作为元数据很有帮助。 当安装Docker卷(非主机目录)时, VOLUME
确实提供了一些特殊的“卷创build的复制数据”语义,这会影响您的数据初始化方法的select。
我假设(我从这里拿走),只要我build立的Mongo镜像,我将创build一个数据库,并授予用户密码的完全权限,因为它是在环境variables? 我是对的? (我在这里找不到任何有用的东西)
MONGO_USER
, MONGO_DATABASE
和MONGO_PASS
在官方的mongo Docker镜像中并没有做任何事情,
mongo映像增加了对类似环境variables的支持:
-
MONGO_INITDB_ROOT_USERNAME
-
MONGO_INITDB_ROOT_PASSWORD
-
MONGO_INITDB_DATABASE
如何将当前的mongo备份(多个JSON文件)导入到应该在mongo容器上创build的数据库中? 我相信我需要运行mongorestore命令,但是如何? 我需要创build一个脚本,并在每次启动容器时运行它? 或者我应该在图像构build过程中运行? 什么是最好的方法?
无论是在构build或运行时初始化数据都取决于您的使用情况。 如前所述,Docker可以将来自指定VOLUME
数据复制到其创build的卷中。 如果您正在安装主机目录,则可能需要在运行时进行初始化。
mongorestore
需要运行服务器才能恢复。 在构build过程中,您需要启动服务器并在相同的RUN
步骤中进行恢复 。 在运行时,可能需要包含一个启动脚本来检查数据库的存在。
Mongo能够将任何空目录初始化成一个空白的mongo实例,所以你不必担心mongo不能启动。