विकल्प ए: अपनी छवि के अंदर फ़ाइलों को शामिल करें। यह आदर्श से कम है क्योंकि आप अपनी छवि के साथ कॉन्फ़िगरेशन फ़ाइलों को मिश्रित कर रहे हैं (जिसमें वास्तव में केवल आपकी बाइनरी होनी चाहिए, न कि आपकी कॉन्फ़िगरेशन), लेकिन फ़ाइलों को भेजने के लिए केवल डॉकर-कंपोज़ का उपयोग करने की आवश्यकता को पूरा करता है।
यह विकल्प आपकी छवि बनाने के लिए डॉकर-कंपोज़ का उपयोग करके हासिल किया जाता है, और यह बिल्ड बिल्ड निर्देशिका से किसी भी फाइल को दूरस्थ डॉकर इंजन पर भेज देगा।
version: '2'
services:
my-db-app:
build: db/.
image: custom-db
और db/Dockerfile लगेगा जैसे:
FROM mysql:latest
COPY ./sql /sql
entrypoint/cmd अपरिवर्तित रहेंगी आपका docker-compose.yml
कैसा दिखेगा। यदि छवि पहले से मौजूद है और आपको एसक्यूएल फाइलों को बदलने की जरूरत है तो आपको docker-compose up --build
चलाने की आवश्यकता होगी।
विकल्प बी: अपने डाटा स्टोर करने की एक मात्रा का प्रयोग करें। यह सीधे डॉकर-कंपोज़ के अंदर नहीं किया जा सकता है। हालांकि यह छवि के बाहर से कंटेनर में फ़ाइलों को शामिल करने का पसंदीदा तरीका है। आप पैक और उन फ़ाइलों को अनपैक करने के डोकर CLI और टार की तरह एक आदेश के साथ इनपुट पुनर्निर्देशन का उपयोग करके नेटवर्क के पार मात्रा पॉप्युलेट कर सकती stdin पर भेजा जा रहा है:
tar -cC sql . | docker run --rm -it -v sql-files:/sql \
busybox /bin/sh -c "tar -xC /sql"
भागो एक स्क्रिप्ट के माध्यम से और फिर उसी की है कि स्क्रिप्ट उस कॉन्फ़िगर को पुनः लोड करने के लिए डीबी कंटेनर को उछालती है।
विकल्प C: नेटवर्क संलग्न फाइल सिस्टम के कुछ प्रकार का उपयोग करें।
# create a reusable volume
$ docker volume create --driver local \
--opt type=nfs \
--opt o=addr=192.168.1.1,rw \
--opt device=:/path/to/dir \
foo
# or from the docker run command
$ docker run -it --rm \
--mount type=volume,dst=/container/path,volume-driver=local,volume-opt=type=nfs,volume-opt=o=addr=192.168.1.1,volume-opt=device=:/host/path \
foo
# or to create a service
$ docker service create \
--mount type=volume,dst=/container/path,volume-driver=local,volume-opt=type=nfs,volume-opt=o=addr=192.168.1.1,volume-opt=device=:/host/path \
foo
विकल्प डी:: यदि आप मेजबान जहाँ आप अपने डोकर CLI चल रहे हैं पर एनएफएस कॉन्फ़िगर कर सकते हैं, तो आप नीचे दिए गए विकल्पों में से एक का उपयोग कर दूरस्थ डोकर नोड से उन NFS साझेदारियों से कनेक्ट कर सकते झुंड मोड के साथ, आप फ़ाइलों को अपनी छवि में कॉन्फ़िगर के रूप में शामिल कर सकते हैं। यह कॉन्फ़िगरेशन फ़ाइलों को अनुमति देता है, जो सामान्य रूप से घुमाव में किसी भी नोड पर धकेलने की आवश्यकता होती है, जहां नोड की मांग पर भेजा जाता है जहां आपकी सेवा चल रही है। यह इसे परिभाषित करने के लिए docker-compose.yml
फ़ाइल का उपयोग करता है, लेकिन स्वामी मोड डॉकर-कंपोज़ का उपयोग नहीं कर रहा है, इसलिए यह आपकी विशिष्ट आवश्यकताओं के अनुरूप नहीं हो सकता है। आप एक नोड स्वाद मोड क्लस्टर चला सकते हैं, इसलिए यह विकल्प उपलब्ध है भले ही आपके पास केवल एक नोड हो। इस विकल्प की आवश्यकता है कि आपकी प्रत्येक एसक्यूएल फाइलों को एक अलग कॉन्फ़िगरेशन के रूप में जोड़ा जाता है।
version: '3.4'
configs:
sql_file_1:
file: ./file_1.sql
services
my-db-app:
image: my-db-app:latest
configs:
- source: sql_file_1
target: /sql/file_1.sql
mode: 444
तो बजाय एक docker-compose up
, आप एक docker stack deploy -c docker-compose.yml my-db-stack
चलाने चाहते हैं: docker-compose.yml
कैसा दिखेगा।
services:
my-db-app:
command: /shell_scripts/go.sh
volumes:
- ./shell_scripts:/shell_scripts
मैंने आपके डेटा को अपनी स्थानीय मशीन से होस्ट (या तो स्थानीय या दूरस्थ) में कॉपी करने के दो तरीके प्रदान किए। यहां देखें http://stackoverflow.com/a/39348811/1556338 सामान्य रूप से आप अपने डेटा को छवि से दूर रखना चाहते हैं। इससे आपकी छवि विभिन्न परिवेशों में पुन: प्रयोग योग्य हो जाती है (dev/test/prod, clientA, clientB, आदि)। – Alkaline
हां, 'डॉकर सीपी' काम करेगा लेकिन डॉकर-कंपोज़ के हिस्से के रूप में नहीं, यह एक अलग कदम है। यह हासिल करने के लिए सिर्फ एक शेल स्क्रिप्ट में डॉकर-रचना को लपेटना अच्छा होगा। –
दुर्भाग्यवश डॉकर रचना सीमित है। चूंकि आपका उपयोग अधिक विशिष्ट हो जाता है, इसलिए आप कुछ चीजों के लिए खोल स्क्रिप्टिंग का उपयोग करने से बचने में सक्षम नहीं होंगे। रचना नए झुंड मोड के साथ भी काम नहीं करता है। – Alkaline