* อัพเดท *
ฉันคิดว่าวิธีที่ดีที่สุดในการเรียกใช้คำสั่งบางอย่างคือการเขียน Dockerfile แบบกำหนดเองที่ทำทุกอย่างที่ฉันต้องการก่อนจะเรียกใช้ CMD อย่างเป็นทางการจากรูปภาพ
นักเทียบท่า-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
บล็อกคุณจากการทำงานที่เหลือ
นักเทียบท่า-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
ดังนั้นส้อมนี้ mongo ทำ monogimport แล้วฆ่า mongo ทางแยกที่ถูกถอดออกแล้วเริ่มต้นใหม่อีกครั้งโดยไม่แยกออก ไม่แน่ใจว่ามีวิธีเชื่อมต่อกับกระบวนการที่แยกไว้หรือไม่ แต่จะใช้งานได้
หมายเหตุ: หากคุณต้องการโหลดข้อมูลเริ่มต้นบางส่วนอย่างเคร่งครัดนี่เป็นวิธีที่ทำได้:
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