2016-03-08 14 views
6

के अंदर रूट उपयोगकर्ता एक डॉकर कंटेनर में Composer चलाने पर एक मूल प्रश्न है।संगीतकार कंटेनर

क्या composer को कंटेनर के अंदर उपयोगकर्ता root चलाने के लिए ठीक है? मैं भ्रमित हूं कि बनाई गई फ़ाइलों के मालिक (उदाहरण के लिए composer require का उपयोग करते समय) root है।

कंटेनर के अंदर root के रूप में चलाया गया है ठीक है सर्वोत्तम अभ्यास?

उत्तर

7

कंटेनर के अंदर रूट का उपयोग ठीक है, क्योंकि कंटेनर में बहुत से विशेषाधिकार हैं। यह हार्डवेयर या माउंट पथ तक नहीं पहुंच सकता है। यह अनिवार्य रूप से एक गैर-विशेषाधिकार प्राप्त उपयोगकर्ता है।

आवेदन स्थापित करना निश्चित रूप से कंटेनर के अंदर किया जाना चाहिए। Dockerfile जो छवि बनाता है उसे एप्लिकेशन को प्रारंभ करने के लिए इंस्टॉल करना है, और यह कंटेनर के अंदर होता है। यदि आप एक कस्टम एप्लिकेशन (उदा। Php7) चलाने के लिए कंटेनर का उपयोग कर रहे हैं जो नोड के साथ बनाया गया है और ऐसे में, एक निर्माण कंटेनर जो इंस्टॉलेशन करता है, एप्लिकेशन के अद्यतन को अलग करने और होस्ट सिस्टम से व्यवहार स्थापित करने का सही तरीका है।

डॉकर के साथ एप्लिकेशन को तैनात करते समय अनिवार्य रूप से किसी कंटेनर के बाहर कुछ भी नहीं चलना चाहिए। किसी भी cron स्क्रिप्ट को docker exec container script.sh या कंटेनर के अंदर रन आवधिक नौकरियों के समान चलाना चाहिए, उदाहरण के लिए।

आम तौर पर, यदि आवेदन एक विन्यास के आधार पर अद्यतन मॉड्यूल की तरह कुछ करने के लिए रूट विशेषाधिकारों की आवश्यकता है, मैं docker-compose का प्रयोग कर एक build कंटेनर जो रूट के रूप में यह सब करता है और फिर बाहर निकल जाता है स्थापित करने के लिए। मैं जितनी संभव हो उतनी क्षमताओं को हटाने के लिए वास्तविक अनुप्रयोग कंटेनर के लिए cap-drop अनुभाग का उपयोग करता हूं।

विशेषाधिकारों को छोड़ने के लिए कई अनुप्रयोगों को setuid या setgid की आवश्यकता होती है। nginx इनकी आवश्यकता है ताकि यह root से www-data:www-data में बदल सके। nginx विफल होगा यदि यह उपयोगकर्ता www-data के रूप में आता है। आवेदन परिवर्तन करने के बाद उन क्षमताओं को छोड़ देना चाहिए।

-6

एक डॉकर कंटेनर का उपयोग केवल एक एप्लिकेशन चलाने के लिए किया जाना चाहिए। एप्लिकेशन इंस्टॉल करने वाली कुछ भी कंटेनर के बाहर की जानी चाहिए।

आप आमतौर पर एक कॉन्फ़िगरेशन प्रदान करते हैं जो कंटेनर को कहीं भी संग्रहीत उत्पादन फ़ाइलों को इंगित करता है। यह संगीतकार द्वारा स्थापित कुछ भी के लिए प्रवेश बिंदु होगा। किसी भी कैश निर्देशिका के अपवाद के साथ, कंटेनर के पास कहीं भी कोई लेखन अनुमति नहीं होनी चाहिए।

+0

dockerized अनुप्रयोगों आत्म निहित होना चाहिए, और उन्हें –

+1

चलाने अब सवाल है के लिए मेजबान वातावरण पर निर्भर नहीं: कैसे एक कंटेनर बनाया जाता है, आवेदन के अंदर भी शामिल है। क्या वह कंटेनर खुद को बनाना चाहिए? सभी शामिल सिस्टम libs को अद्यतन कौन कर रहा है जो अद्यतन प्राप्त कर सकते हैं, अक्सर महत्वपूर्ण सुरक्षा अद्यतन? आपको अभी भी उस चीज़ की आवश्यकता होगी जो उस कंटेनर के बाहर डॉकर कंटेनर बनाता है। ऐसा क्यों नहीं है कि "कुछ" एप्लिकेशन को एक चलने योग्य राज्य में कंटेनर में भी डाल देता है? – Sven