2017-06-23 5 views
5

में वॉल्यूम्स_फॉम के समतुल्य समकक्ष समान प्रश्न हैं (docker-compose volumes_from equivalent with version 3, How to replace volumes_from in docker-composer v3) लेकिन मुझे नहीं लगता कि वे इस सवाल का जवाब देते हैं (या कम से कम मुझे समझ में नहीं आता कि उत्तर समस्या का समाधान कैसे करते हैं)। तो मुझे बहुत विशेष रूप से फिर से पूछने की कोशिश करें।डॉकर कंपोज़ v3

version: '2' 
services: 
    full-tests: 
    volumes: 
     - ..:/opt/project 
     - ../../../ext-libs:/opt/ext-libs 
     - ./third-mapping:/opt/third 

    unit-tests: 
    volumes_from: full-tests 

बिंदु है कि मात्रा के सेट एक बार परिभाषित किया गया है और मैं आसानी से पुनः उपयोग कर सकते उन्हें प्रयोग volumes_from:

मैं इस v2 डोकर-compose.yml है।

आप इसे v3 में कैसे लिखेंगे?

+0

यहाँ कुछ संकेत: https://github.com/moby/moby/issues/19990 – Borek

+0

एक उचित v2 तरह से अपना सामान, नहीं एक v1 रास्ता –

+0

@EugenMayer अद्यतन लिखें। – Borek

उत्तर

6

अपने प्रश्न का उत्तर देने के लिए - v3 के साथ असंभव - नीचे दिया गया अनुभाग देखें। v3 उत्तराधिकारी के रूप में उपयोग नहीं किया जाएगा (डॉकर द्वारा आधिकारिक बयान) इसका उपयोग "झुंड के मामलों" में किया जाएगा।

फिर भी, आपको क्या करना चाहिए नामित वॉल्यूम का उपयोग करना है।

आप इस

docker volume create --name volume1 -o type=none -o device=/home/$USER/projects/01 -o o=bind 

तरह मेजबान-माउंट संस्करणों के साथ यह गठजोड़ कर सकते हैं आप लंबे समय से वाक्य रचना 3.2 में पेश उपयोग करते हुए इस आसान बनाने में कर सकते हैं: https://docs.docker.com/compose/compose-file/#long-syntax-2 ताकि आप नामित मात्रा + में मेजबान पर बाँध परिभाषित कर सकते हैं डोकर-लिखें फ़ाइल उदाहरण:

services: 
    full-tests: 
    volumes:  
     - type: volume 
     source: ../ 
     target: /opt/project 
     - type: volume 
     source: ../../../ext-libs 
     target: /opt/ext-libs 

या संक्षेप में के रूप में आप था

services: 
    full-tests: 
    volumes:  
     - ../:/opt/project 
     - ../../../ext-libs:/opt/ext-libs 

हालांकि आप क्या नहीं कर सकते हैं, इस स्तर को एक नाम देने और सेवाओं में वॉल्यूम अनुभाग में पुन: उपयोग करने के लिए शीर्ष-स्तर "वॉल्यूम" परिभाषा के तहत लंबे वाक्यविन्यास डालने - यह संभव नहीं है। ऐसा करने के लिए, आप एक

volumes: 
    project: 
    external: true 
    third-party: 
    external: true 

का उपयोग और फिर वाक्य रचना CLI पर एक बाँध के विकल्प के साथ उन संस्करणों बनाने के लिए, के रूप में

ऊपर की रूपरेखा "डोकर मात्रा बनाने" का उपयोग, लेकिन आप कभी नहीं मिल जाएगा होगा volumes_from यहाँ आप के लिए कर रहा था


v3 में volumes_from का कोई बराबर है, के बाद से v3 वी 2, इसके लिए एक विकल्प के एक उत्तराधिकारी नहीं है - कृपया मेरी टिप्पणी और यहाँ सूत्रों https://github.com/rancher/rancher/issues/3316#issuecomment-310889283

01 देखना

इसे समेटने के लिए - वॉल्यूम्स_फॉम और वॉल्यूम्स के मामले में ओवरलैप है वॉल्यूम_फ्रॉम का गलत तरीका गलत तरीके से गलत तरीके से/गलत इस्तेमाल किया गया था।

क) आप चाहते हैं डेटा भर में ढेर उन्नयन (नीचे + ऊपर), तो आपको नामित लेने की मात्रा कायम किया जाना है - और अब, 2 + सेवाओं इस साझा करने के लिए की जरूरत है, सिर्फ इस नामित मात्रा volumes: का उपयोग कर माउंट।

ख) आप हालांकि, ऐसा करते हैं तो नहीं डेटा (ढेर उन्नयन से अधिक बनाए रखना चाहते जैसे उसके स्रोत कोड और छवि वास्तव में एक सामान्य आवेदन में एक उन्नयन इस) एक के रूप में शामिल है क्योंकि + httpd/प्रॉक्सी परिदृश्य, आप इस तरह के लिए एक एनन वॉल्यूम बना देगा /var/www डॉकरफ़ाइल में Volume /var/www का उपयोग करके और फिर httpd सेवा में इसे माउंट करने के लिए वॉल्यूम्स_from का उपयोग करें।


ख के साथ मुख्य बिंदु यह है कि ढेर उन्नयन पर, शीघ्र मात्रा हटा दिया जाएगा (`नीचे डोकर-रचना शीघ्र कंटेनर निकालता है, लेकिन लोगों का नाम नहीं) और इस तरह से काम करता है उन्नयन के रूप में उम्मीद, आपके पास एक नये कोडबेस

के बाद से कोड नाम वॉल्यूम पर है और उस होगा ओवरले "फ्रेश" छवि पर codebase/नई, नामित संस्करणों के साथ भी ऐसा ही करने के लिए आपको पहले उन्नयन पर भारी आश्चर्य दे देंगे कोशिश कर रहा है कंटेनर, इस प्रकार आप अपग्रेड के बाद पुराने कोडबेस पर चलेंगे।

+0

धन्यवाद, अब तक का सबसे अच्छा जवाब। तो लंबे वाक्यविन्यास के साथ, मुझे लगता है कि 'v डिवाइस' मैपिंग के साथ नाम वॉल्यूम्स के साथ मेरे v2 उदाहरण के करीब होना संभव है? मेरी दो सेवाओं के बीच अभी भी दोहराव होगा लेकिन शायद एक कारण है कि v3 मुझ पर इस नकल को मजबूर करता है, मुझे यकीन नहीं है। – Borek

+0

हां, उस सीमा के चारों ओर जाने का कोई तरीका नहीं, मेरी टिप्पणी यहां भी देखें https://github.com/docker/compose/issues/4693#issuecomment-310892561 ... लेकिन मैं आपके उपयोगकेस को उन दुर्व्यवहारों में से एक मानता हूं रोकना चाहता था (और मुझे ऐसा करने का अधिकार मिलता है) - कोई कठोर भावना नहीं। और हां एक कारण है जब आप एक झुंड में सामान फैलाने के बारे में सोचते हैं, मेजबान-माउंट इसके लिए अवरोधक कम या कम होते हैं - यह केवल एक मेजबान पर उपलब्ध है, सभी नहीं :) –

+0

निश्चित रूप से, मेरा उपयोग केस एक डॉकराइज्ड विकास पर्यावरण है , एक स्केलेबल रनटाइम नहीं। तो मेरे पास कई समान "सेवाएं" (अभ्यास में परीक्षण के एक बार धावक) और उनमें से प्रत्येक के लिए, मुझे कुछ स्थानीय फ़ोल्डरों को मैप करने की आवश्यकता होगी। (होस्ट मैपिंग डीबगिंग के लिए महत्वपूर्ण है।) शायद डॉकर-कंपोज़ के लिए प्राथमिक उपयोग केस नहीं है लेकिन v2 ने इसे अच्छी तरह से समर्थित किया है। मैं उस संस्करण के साथ रहूंगा, उम्मीद है कि यह बहिष्कृत नहीं है या कुछ अलग है अगर (यह एक उत्तराधिकारी नहीं बल्कि एक विकल्प है)। – Borek

-1

मुझे डॉकर-कंपोज़ संस्करण 3 मिला जो एकजुट होकर काम कर रहा था। मूल रूप से "volumes_from" को प्रतिस्थापित करना था और वैश्विक "वॉल्यूम" घोषणा बनाना था।

version: "3" 
services: 
    unison: 
    container_name: xxx_unison 
    image: onnimonni/unison 
    environment: 
     - UNISON_DIR=/var/www/$DOCKER_WEB_DOMAIN/htdocs/ 
     - UNISON_USER=www-data 
     - UNISON_UID=1000 
     - UNISON_GID=1001  
    volumes: 
     - unison_file:/var/www/$DOCKER_WEB_DOMAIN/htdocs/ 
    networks: 
     - frontend  
    ports: 
     - "5000:5000"  
    database: 
    container_name: xxx_database 
    image: percona 
    depends_on: 
     - unison 
    environment: 
     - MYSQL_ROOT_PASSWORD=xxx 
     - MYSQL_DATABASE=xxx # Assign a database to be created on container first load 
    volumes: 
     - ./mysql/import:/docker-entrypoint-initdb.d 
     - ./mysql/data/:/var/lib/mysql/ 
     - ./logs:/var/log/mysql 
     - ./mysql/conf:/etc/mysql/conf.d   
    ports: 
     - "3306:3306" 
    networks: 
     - frontend 
    web: 
    container_name: xxx_web 
    image: ubuntu 
    depends_on: 
     - unison  
    volumes: 
     - ./nginx/ssl/:/etc/nginx/ssl/ 
     - ./logs/:/var/log/nginx 
     - ./shell/run.sh:/run.sh 
     - unison_file:/var/www/$DOCKER_WEB_DOMAIN/htdocs/ 
    ports: 
     - "80:80" 
     - "443:443" 
    networks: 
     - frontend 
    env_file: 
     - ./.env  
networks: 
    frontend: 
volumes: 
    unison_file: 
संबंधित मुद्दे