2016-11-01 66 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