需要一些关于dockerizing MongoDB的建议吗

需要一些关于dockerizing MongoDB的建议吗,mongodb,docker,docker-compose,dockerfile,Mongodb,Docker,Docker Compose,Dockerfile,我正在玩MongoDB和Docker,在这一点上,我试图创建一个有用的形象,供自己在工作中使用。我创建了以下Dockerfile: FROM mongo:2.6 VOLUME /data/db /data/configdb CMD ["mongod"] EXPOSE 27017 我已将其添加到我的docker compose.yml文件中: version: '2' services: ### PHP/Apache Container php-apache: c

我正在玩MongoDB和Docker,在这一点上,我试图创建一个有用的形象,供自己在工作中使用。我创建了以下
Dockerfile

FROM mongo:2.6
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
关于我所做的设置,我有一些问题:

  • 我需要
    Dockerfile
    中的
    VOLUME/data/db/data/configdb
    ,还是足够让这行
    ~/data/mongo:/data/configdb
    位于
    docker compose.yml
  • 我假设(我是从中获得的)一旦我构建了Mongo映像,我将创建一个数据库,并使用密码向用户授予完全权限,因为它在环境变量上?我是对的?(我找不到任何有用的东西)
  • 如何将当前mongo备份(几个JSON文件)导入到应该在mongo容器上创建的数据库中?我相信我需要运行
    mongorestore
    命令,但是如何运行呢?我是否需要创建一个脚本并在每次容器启动时运行它?还是应该在映像构建期间运行?最好的方法是什么
我是否需要docker文件中的VOLUME/data/db/data/configdb,或者在docker-compose.yml中有这行~/data/mongo:/data/configdb就足够了

装载主机目录时不需要
,但它作为元数据很有用<代码>卷在装载Docker卷(非主机目录)时提供了一些特殊的“卷创建时复制数据”语义,这将影响数据初始化方法的选择

我假设(我从这里开始)一旦我构建了Mongo映像,我就会创建一个数据库,并使用环境变量上的密码向用户授予完全权限?我是对的?(我在这里找不到任何有用的东西)

MONGO_用户
MONGO_数据库
MONGO_通行证
请勿在或对
mongod
本身执行任何操作

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

  • MONGO\u INITDB\u ROOT\u用户名
  • MONGO\u INITDB\u ROOT\u密码
  • MONGO\u INITDB\u数据库
如何将当前mongo备份(几个JSON文件)导入到应该在mongo容器上创建的数据库中?我相信我需要运行mongorestore命令,但如何运行?我是否需要创建一个脚本并在每次容器启动时运行它?还是应该在映像构建期间运行?最好的方法是什么

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

mongorestore
需要运行的服务器才能还原到。在构建过程中,您需要。在运行时,您可能需要包含一个启动脚本来检查数据库是否存在


Mongo能够将任何空目录初始化为一个空的Mongo实例,所以您不必担心Mongo无法启动