एक दूरस्थ मेजबान पर एक डॉकर कंटेनर के लिए उत्तरदायी प्लेबुक लागू करना

मैंने जवाब के साथ कई डॉकर कंटेनरों के सेटअप को स्वचालित किया है। यह बहुत अच्छी तरह से काम करता है लेकिन कुछ पुनरावर्ती कार्य हैं जिन्हें डॉकर कंटेनरों के भीतर निष्पादित किया जाना है।

उत्तरदायी के लिए डॉकर कनेक्शन ड्राइवर का उपयोग करके इसे कार्यान्वित करना संभव है लेकिन ऐसा लगता है जब डॉकर धावक मेजबान पर उत्तर चल रहा है। यह मामला नहीं है और यदि संभव हो तो मैं एकाधिक होस्टों पर उत्तरदायी नहीं चलाना चाहता हूं। कंटेनरों के भीतर प्लेबुक निष्पादित करने के लिए उत्तरदायी उपयोग करने का कोई बेहतर तरीका है?

// मैंने जिज्ञासा से इसे आजमाया और यह सीधे डॉकर धावक पर उत्तरदायी का उपयोग करके बहुत अच्छी तरह से काम करता है, ... वैसे भी मेरा पसंदीदा समाधान नहीं है।

2
मेरी राय में डॉकर छवियों को अपरिवर्तनीय और स्टेटलेस होना चाहिए।
जोड़ा लेखक rfunduk, स्रोत
इस stackoverflow.com/a/41626257/3888850 के बारे में कैसे?
जोड़ा लेखक Levi, स्रोत
खैर धन्यवाद! आश्चर्य है कि मुझे वह पोस्ट क्यों नहीं मिला, .... ओ.ओ. उसके पास कुछ सुरक्षा प्रभाव होंगे लेकिन मैं इससे निपट सकता हूं! मैं उस पर वापस रिपोर्ट करने जा रहा था जब मुझे इसे आजमाने का मौका मिला, ...
जोड़ा लेखक davidb, स्रोत
@ लेवी: आपकी मदद के लिए धन्यवाद मैंने अपनी खुद की पोस्ट का जवाब दिया और इसे अधिक समझने योग्य तरीके से वर्णित किया।
जोड़ा लेखक davidb, स्रोत
@ 030 अच्छा मुझे लगता है कि कंटेनर में आवेदन पर निर्भर करता है। मेरे परिदृश्य में हस्ताक्षर अद्यतन और एप्लिकेशन के कार्यों को केंद्रीय रूप से ट्रिगर करने की आवश्यकता है और मुझे यह सत्यापित करने की आवश्यकता है कि बाहर से डॉकर कंटेनर में प्रक्रिया की प्रगति एसडीएन कार्यक्षमताओं को ट्रिगर करने के लिए
जोड़ा लेखक davidb, स्रोत

2 उत्तर

@Levi की सहायता से ( स्टैक ओवरफ्लो ) मैं ड्रिगर कंटेनर में स्ट्रिगेट को जोड़ने के लिए एक तरीका खोजने में कामयाब रहा, Ansibles डॉकर कनेक्शन ड्राइवर और रिमोट डॉकर की एपीआई क्षमता।

सबसे पहले आपको एपीआई का पर्दाफाश करना होगा जो डिफ़ॉल्ट रूप से मामला नहीं है। बस systemd स्क्रिप्ट के ExecStart निरंतर -H tcp: //0.0.0.0: 1337 जोड़ें। फिर स्टार्ट स्क्रिप्ट को पुनः लोड करें और डॉकर सेवा को पुनरारंभ करें। ( यह </ए> ब्लॉगपोस्ट)

फिर आप इस तरह की सूची फ़ाइल में कंटेनर सूचीबद्ध कर सकते हैं:

[containers]
container-name ansible_connection=docker ansible_docker_extra_args="-H tcp://1.2.3.4:1337"

और आपके द्वारा उपयोग की जाने वाली किसी भी प्लेबुक को निष्पादित करें।

ansible-playbook -i docker_inventory playbooks/my_playbook.yml

इस तरह इसे लागू करने के इस तरीके के ऊपर यह है कि आप एसएसएच और डॉकर कंटेनर के माध्यम से बनाए गए "वास्तविक" मेजबान/वीएमएस को मिश्रित कर सकते हैं। मुझे एक नकारात्मक बात का जिक्र करना है कि डॉकर एपीआई एक नियंत्रण सुरंग के रूप में एसएसएच का उपयोग करने से बहुत धीमी है।

यह सेटअप बहुत असुरक्षित कारण है और इसका एकमात्र उद्देश्य अवधारणा को समझाना है। उत्पादन में इसका उपयोग करने से पहले आपको सुरक्षा सुविधाओं में पढ़ना चाहिए और जहां तक ​​संभव हो सके डेमॉन तक पहुंच सीमित करनी चाहिए।

3
जोड़ा

यह तीन कदम प्रक्रिया हो सकती है

  1. Create a playbook with following command -

    docker exec mycontainer /bin/sh -c "cmd1;cmd2;...;cmdn"
    

    or Docker file entrypoint option

    FROM ubuntu
    ENTRYPOINT ["top", "-b"]
    CMD ["-c"]
    
  2. ansible-playbook playbooks/PLAYBOOK_NAME.yml --limit "mycontainer"

0
जोड़ा
मैं यह देखने में असफल रहा कि यह प्रश्न का उत्तर कैसे देता है, आपको संपादित करना चाहिए ताकि यह कुछ स्पष्टीकरण जोड़ सके कि यह दूरस्थ रूप से कैसे काम करता है (नहीं डॉकर होस्ट पर)
जोड़ा लेखक Chris Jester-Young, स्रोत
मुझे लगता है कि आप इस तरह के सवाल को गलत समझते हैं। मुझे पता है कि मैं होस्ट सिस्टम से डॉकर कंटेनर में कमांड कैसे निष्पादित कर सकता हूं लेकिन मैं न केवल आदेशों को निष्पादित करना चाहता हूं। मैं डॉकर कंटेनरों के लिए Ansible का उपयोग करने में सक्षम होना चाहता हूं जैसे कि वे स्टैंडअलोन मेजबान हैं।
जोड़ा लेखक davidb, स्रोत