* अपडेट करें *
मुझे लगा कि कुछ कमांड चलाने का सबसे अच्छा तरीका एक कस्टम डॉकरीफाइल लिखना है जो मैं चाहता हूं कि आधिकारिक सीएमडी को छवि से भाग जाने से पहले सब कुछ करना चाहिए।
डोकर-compose.yaml:
version: '3'
# Can be used as an alternative to VBox/Vagrant
services:
mongo:
container_name: mongo
image: mongo
build:
context: .
dockerfile: deploy/local/Dockerfile.mongo
ports:
- "27017:27017"
volumes:
- ../.data/mongodb:/data/db
Dockerfile.mongo:
FROM mongo:3.2.12
RUN mkdir -p /fixtures
COPY ./fixtures /fixtures
RUN (mongod --fork --syslog && \
mongoimport --db wcm-local --collection clients --file /fixtures/clients.json && \
mongoimport --db wcm-local --collection configs --file /fixtures/configs.json && \
mongoimport --db wcm-local --collection content --file /fixtures/content.json && \
mongoimport --db wcm-local --collection licenses --file /fixtures/licenses.json && \
mongoimport --db wcm-local --collection lists --file /fixtures/lists.json && \
mongoimport --db wcm-local --collection properties --file /fixtures/properties.json && \
mongoimport --db wcm-local --collection videos --file /fixtures/videos.json)
यह शायद इसे करने का सबसे साफ तरीका है।
* पुराना तरीका *
मैंने अपने आदेशों के साथ एक शेल स्क्रिप्ट बनाई। इस मामले में मैं शुरू करना चाहता था mongod
, और भाग रहा था , mongoimport
लेकिन कॉलिंग mongod
आपको बाकी को चलाने से रोकता है।
docker-compose.yaml :
version: '3'
services:
mongo:
container_name: mongo
image: mongo:3.2.12
ports:
- "27017:27017"
volumes:
- ./fixtures:/fixtures
- ./deploy:/deploy
- ../.data/mongodb:/data/db
command: sh /deploy/local/start_mongod.sh
start_mongod.sh :
mongod --fork --syslog && \
mongoimport --db wcm-local --collection clients --file /fixtures/clients.json && \
mongoimport --db wcm-local --collection configs --file /fixtures/configs.json && \
mongoimport --db wcm-local --collection content --file /fixtures/content.json && \
mongoimport --db wcm-local --collection licenses --file /fixtures/licenses.json && \
mongoimport --db wcm-local --collection lists --file /fixtures/lists.json && \
mongoimport --db wcm-local --collection properties --file /fixtures/properties.json && \
mongoimport --db wcm-local --collection videos --file /fixtures/videos.json && \
pkill -f mongod && \
sleep 2 && \
mongod
तो यह कांटा मोंगो बनाता है, मोनोगिमपोर्ट करता है और फिर कांटे हुए मोंगो को मारता है जिसे अलग कर दिया जाता है, और फिर से बिना कोचिंग के इसे शुरू कर देता है। सुनिश्चित नहीं है कि कांटे की प्रक्रिया में संलग्न होने का कोई तरीका है लेकिन यह काम करता है।
नोट: यदि आप कड़ाई से कुछ प्रारंभिक db डेटा लोड करना चाहते हैं तो यह करने का तरीका है:
mongo_import.sh
#!/bin/bash
# Import from fixtures
# Used in build and docker-compose mongo (different dirs)
DIRECTORY=../deploy/local/mongo_fixtures
if [[ -d "/fixtures" ]]; then
DIRECTORY=/fixtures
fi
echo ${DIRECTORY}
mongoimport --db wcm-local --collection clients --file ${DIRECTORY}/clients.json && \
mongoimport --db wcm-local --collection configs --file ${DIRECTORY}/configs.json && \
mongoimport --db wcm-local --collection content --file ${DIRECTORY}/content.json && \
mongoimport --db wcm-local --collection licenses --file ${DIRECTORY}/licenses.json && \
mongoimport --db wcm-local --collection lists --file ${DIRECTORY}/lists.json && \
mongoimport --db wcm-local --collection properties --file ${DIRECTORY}/properties.json && \
mongoimport --db wcm-local --collection videos --file ${DIRECTORY}/videos.json
mongo_fixtures / *। json फ़ाइलें mongoexport कमांड के माध्यम से बनाई गई थीं।
डोकर-compose.yaml
version: '3'
services:
mongo:
container_name: mongo
image: mongo:3.2.12
ports:
- "27017:27017"
volumes:
- mongo-data:/data/db:cached
- ./deploy/local/mongo_fixtures:/fixtures
- ./deploy/local/mongo_import.sh:/docker-entrypoint-initdb.d/mongo_import.sh
volumes:
mongo-data:
driver: local
/bin/bash