2016-11-01 69 views
4

我正在玩MongoDB和Docker,在这一点上,我正尝试为自己创建一个有用的图像,以便在工作中使用。我创建了以下Dockerfile需要一些建议dockerizing MongoDB

FROM mongo:2.6 
MAINTAINER Reynier Perez <[email protected]> 
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/configdbDockerfile或足够有这条线~/data/mongo:/data/configdbdocker-compose.yml
  • 我假设(和我从here),只要我建立的Mongo映像,我将创建一个数据库,并授予用户密码的完整权限,因为它是在环境变量?我是对的? (我找不到任何有用的东西here
  • 如何将当前mongo备份(多个JSON文件)导入到应该在mongo容器上创建的数据库中?我相信我需要运行mongorestore命令,但是如何?我是否需要创建脚本并在每次容器启动时运行它?或者我应该在图像构建过程中运行?什么是最好的方法?

回答

3

我需要VOLUME /数据/ DB /数据/ configdb在Dockerfile或将足以这一行〜/数据/蒙戈:在泊坞窗-compose.yml /数据/ configdb?

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

假设(我从这里开始),当我构建Mongo镜像时,我将创建一个数据库并为用户提供完整的权限,因为密码与环境变量相同?我是对的? (我无法找到任何有用这里)

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

类似的环境变量

蒙戈图像增加了支持:

  • MONGO_INITDB_ROOT_USERNAME
  • MONGO_INITDB_ROOT_PASSWORD
  • MONGO_INITDB_DATABASE

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

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

mongorestore需要运行服务器才能恢复。在构建过程中,您需要launch the server and restore in the same RUN step。在运行时,您可能需要包含一个启动脚本来检查数据库的存在。

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

+0

我试着从Ansible开始,但是对于单个任务来说可能稍后如果这仍然在增长,我会再考虑一次。即使我接受你的答案为正确的答案,你是否可以改进它,为bash添加一个简单的脚本示例,允许创建一个数据库并添加一个用户?我没有线索 – ReynierPM