需要一些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_USERMONGO_DATABASEMONGO_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不能启动。