亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何使用docker-compose播種mongo數據庫?

如何使用docker-compose播種mongo數據庫?

慕森王 2019-12-13 09:59:39
我正在嘗試分發在幾個鏈接的容器中運行的一組連接的應用程序,這些容器包括一個mongo數據庫,該數據庫需要:分發包含一些種子數據;允許用戶添加其他數據。理想情況下,數據還將保存在鏈接的數據卷容器中。我可以mongo使用mongo不裝載任何卷的基本實例(dockerhub映像:psychemedia/mongo_nomount-本質上是不帶該VOLUME /data/db語句的基本mongo Dockerfile )和Dockerfile配置的方式將數據放入容器中:ADD . /filesWORKDIR /filesRUN mkdir -p /data/db && mongod --fork --logpath=/tmp/mongodb.log && sleep 20 && \mongoimport  --db testdb --collection testcoll  --type csv --headerline --file ./testdata.csv  #&& mongod --shutdown其中與Dockerfile ./testdata.csv位于同一目錄(./mongo-with-data)中。我的docker-compose配置文件包括以下內容:mongo:  #image: mongo  build: ./mongo-with-data  ports:    - "27017:27017"  #Ideally we should be able to mount this against a host directory  #volumes:  #  - ./db/mongo/:/data/db  #volumes_from:  #  - devmongodata#devmongodata:#    command: echo created#    image: busybox#    volumes: #       - /data/db每當我嘗試裝入VOLUME時,似乎就好像/data/db刪除了原始種子數據(存儲在其中)一樣。我猜想,在將卷安裝到/data/db該卷時,它將替換當前存在的任何卷。也就是說,docker用戶指南建議:創建容器時將初始化卷。如果容器的基本映像在指定的安裝點包含數據,則在卷初始化時將現有數據復制到新卷中?因此,如果我將VOLUME命令放在種子RUN命令之后,我希望數據能夠持久保存嗎?那我在做什么錯?從長遠來看,我想自動化幾個鏈接容器的構建,然后分發一個Vagrantfile/ docker-compose的YAML文件,該文件將啟動一組鏈接應用程序,其中包括一個預先mongo填充的數據庫,該數據庫帶有(部分預先填充的)持久數據容器。
查看完整描述

3 回答

?
犯罪嫌疑人X

TA貢獻2080條經驗 獲得超4個贊

我使用另一個docker容器執行此操作,該容器的唯一目的是播種mongo,然后退出。我懷疑這與ebaxt的想法相同,但是當我尋找答案時,我只是想看看一個簡單而又簡單的示例。所以這是我的:


docker-compose.yml


mongodb:

  image: mongo

  ports:

    - "27017:27017"


mongo-seed:

  build: ./mongo-seed

  links:

    - mongodb


# my webserver which uses mongo (not shown in example)

webserver:

  build: ./webserver

  ports:

    - "80:80"

  links:

    - mongodb

mongo-seed / Dockerfile


FROM mongo


COPY init.json /init.json

CMD mongoimport --host mongodb --db reach-engine --collection MyDummyCollection --type json --file /init.json --jsonArray

mongo-seed / init.json


[

  {

    "name": "Joe Smith",

    "email": "[email protected]",

    "age": 40,

    "admin": false

  },

  {

    "name": "Jen Ford",

    "email": "[email protected]",

    "age": 45,

    "admin": true

  }

]


查看完整回答
反對 回復 2019-12-13
?
慕哥6287543

TA貢獻1831條經驗 獲得超10個贊

我發現使用Docker自定義映像和使用卷很有用,而不是創建另一個用于播種的容器。


檔案結構


.

├── docker-compose.yml

├── mongo

│   ├── data

│   ├── Dockerfile

│   └── init-db.d

│       └── seed.js

Dockerfile/中提到的每個文件位置docker-compose.yml都相對于docker-compose.yml


DOCKERFILE


FROM mongo:3.6


COPY ./init-db.d/seed.js /docker-entrypoint-initdb.d

docker-compose.yml


version: '3'


services:

  db:

    build: ./mongo

    restart: always

    volumes:

      - ./mongo/data:/data/db #Helps to store MongoDB data in `./mongo/data`

    environment:

      MONGO_INITDB_ROOT_USERNAME: {{USERNAME}}

      MONGO_INITDB_ROOT_PASSWORD: {{PWD}}

      MONGO_INITDB_DATABASE: {{DBNAME}}

seed.js


// Since Seeding in Mongo is done in alphabetical order... It's is important to keep

// file names alphabetically ordered, if multiple files are to be run.


db.test.drop();

db.test.insertMany([

  {

    _id: 1,

    name: 'Tensor',

    age: 6

  },

  {

    _id: 2,

    name: 'Flow',

    age: 10

  }

])

docker-entrypoint-initdb.d可以用于創建不同的用戶和mongodb管理相關的東西,只需創建按字母順序排序的名為js腳本的腳本即可,createUser等等。


有關如何自定義MongoDB Docker服務的更多詳細信息,請閱讀此


另外,最好確保您的密碼和用戶名不受Public的影響,不要將憑據推送到public git上,而應使用Docker Secrets。另請閱讀本秘密教程


請注意,不必進入docker-swarm模式即可使用機密。撰寫文件也支持秘密。檢查一下


秘密也可以在MongoDB Docker Services中使用


查看完整回答
反對 回復 2019-12-13
?
FFIVE

TA貢獻1797條經驗 獲得超6個贊

您可以使用Mongo Seeding Docker映像。


為什么?


您已經準備好使用Docker映像了

您不受JSON文件的束縛-還支持JavaScript和TypeScript文件(包括使用TypeScript進行的可選模型驗證)

Docker Compose的示例用法:


version: '3'

services:

  database:

    image: 'mongo:3.4.10'

    ports:

    - '27017:27017'

  api:

    build: ./api/

    command: npm run dev

    volumes: 

    - ./api/src/:/app/src/

    ports:

    - '3000:3000'

    - '9229:9229'

    links:

    - database

    depends_on:

    - database

    - data_import

    environment: 

    - &dbName DB_NAME=dbname

    - &dbPort DB_PORT=27017 

    - &dbHost DB_HOST=database

  data_import:

    image: 'pkosiec/mongo-seeding:3.0.0'

    environment:

    - DROP_DATABASE=true

    - REPLACE_ID=true

    - *dbName

    - *dbPort

    - *dbHost

    volumes:

    - ./data-import/dev/:/data-import/dev/

    working_dir: /data-import/dev/data/

    links:

    - database

    depends_on:

    - database

免責聲明:我是這個圖書館的作者。


查看完整回答
反對 回復 2019-12-13
  • 3 回答
  • 0 關注
  • 1113 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號