需要一些建议停靠MongoDB

时间:2016-11-01 21:05:06

标签: mongodb docker docker-compose dockerfile

我正在玩MongoDB和Docker,此时我正在尝试为自己创建一个有用的图像供我在工作中使用。我创建了以下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是否需要Dockerfile,或者~/data/mongo:/data/configdb处的docker-compose.yml行是否足够?
  • 我假设(并且我从here获取)我一旦构建Mongo图像,我将创建一个数据库,并为用户提供密码,因为它在环境变量上?我是对的? (我找不到任何有用的here
  • 如何将当前的mongo备份(多个JSON文件)导入应该在mongo容器上创建的数据库?我相信我需要运行mongorestore命令,但是如何?我是否需要创建一个脚本并在每次容器启动时运行它?或者我应该在图像构建期间运行?什么是最好的方法?

1 个答案:

答案 0 :(得分:3)

  

我是否需要在Dockerfile上使用VOLUME / data / db / data / configdb,或者足以在docker-compose.yml上使用〜/ data / mongo:/ data / configdb这一行?

在挂载主机目录时不需要

VOLUME,但它作为元数据很有用。安装Docker卷(非主机目录)时,VOLUME确实提供了一些特殊的“卷创建复制数据”语义,这将影响您的数据初始化方法选择。

  

我假设(并且我从这里开始)我一旦构建了Mongo图像,我将创建一个数据库并使用密码为用户提供完全权限,因为它在环境变量上?我是对的? (我在这里找不到任何有用的东西)

MONGO_USERMONGO_DATABASEMONGO_PASS不会在official mongo Docker imagemongod本身做任何事情。

mongo图像增加了对类似环境变量的支持:

  • MONGO_INITDB_ROOT_USERNAME
  • MONGO_INITDB_ROOT_PASSWORD
  • MONGO_INITDB_DATABASE
  

如何将当前的mongo备份(多个JSON文件)导入应该在mongo容器上创建的数据库?我相信我需要运行mongorestore命令,但是如何?我是否需要创建一个脚本并在每次容器启动时运行它?或者我应该在图像构建期间运行?什么是最好的方法?

是否在构建或运行时初始化数据取决于您的使用情况。如前所述,Docker可以将指定VOLUME的数据复制到它创建的卷中。如果要挂载主机目录,则可能需要在运行时进行初始化。

mongorestore需要正在运行的服务器才能还原到。在构建期间,您需要launch the server and restore in the same RUN step。在运行时,您可能需要包含一个检查数据库是否存在的启动脚本。

Mongo能够将任何空目录初始化为空白mongo实例,因此您无需担心mongo无法启动。