2016-10-29 15 views
6

Dockerfile और docker-compose.yml फ़ाइलों के बीच संबंध क्या है?डॉकरफाइल बनाम डॉकर-compose.yml

जैसे मैं FROM, RUN (apt-get आदि और CMD आदेशों का उपयोग करते Dockerfile उपयोग कर किसी भी लिनक्स सेटअप का निर्माण कर सकते लगता है। लेकिन ऐसा लगता है, यह बहुत पुन: प्रयोज्य (मैं पूरी छवि को पुन: उपयोग कर सकते हैं, लेकिन सेवाओं hardcdoded और नहीं कर रहे हैं । अन्य परियोजनाओं द्वारा पुन: प्रयोज्य)

मैं नई परियोजनाओं पर फ़ाइलों की दोनों का उपयोग दूँ

मान लीजिए कि मैं नियमित रूप से दीप ढेर है करना चाहते हैं?

  • लिनक्स हे एस (debian:wheezy)
  • Apache वेब सर्वर (httpd:2.2)
  • MySQL (mariadb)
  • पीएचपी (php:5.6)

एक, नियमित रूप से मशीन पर रूप में एक साथ चल रहा है।

और मेरे मेजबान सिस्टम पर एक निर्देशिका में:

  • एप्लिकेशन स्रोत के लिए मात्रा फ़ाइलें
  • vhost कॉन्फ़िग फ़ाइल
  • अपाचे लॉग
  • DB में लगातार डेटा

मैं पसंद सरकारी, आधार रेपोस और छवियों, नहीं का उपयोग कर ऑल-इन-वाले पूर्व कॉन्फ़िगर।

कैसे config फ़ाइलें इस मामले में की तरह लग रहे करने वाले हैं?

मैं उबंटू पर docker-compose v.1.8.1 और docker बनाम 1.12.3 का उपयोग कर रहा हूं।

उत्तर

7

डॉकर पृथक मशीन (कंटेनर) बनाता है। प्रत्येक कंटेनर केवल एक प्रक्रिया (अपाचे या Mysql या अन्य) होता है; और Dockerfile एक छवि का निर्माण करने के लिए कैसे परिभाषित करता है।

डोकर रचना रन, लिंक और कंटेनरों की गुच्छा एक साथ कॉन्फ़िगर अनुमति देता है।

आपके मामले में अपाचे को एक "mysql" कहां जाना चाहिए। और MySQL ऊपर waked जा करने के लिए इससे पहले कि आप अपाचे कंटेनर चलाने की जरूरत है।

Dockerfile परिभाषित करता है कि ऐप छवि कैसे बनाएं। ऐप्लिकेशन छवि आप आवेदन और वेब ब्राउज़र शामिल हैं।

FROM apache:php5.6 

ADD /src /var/www/awesome_project #add a project src code 
ADD /config/apache/awesome_project.conf /etc/apache2/sites-available/ # add a configuration 
# make any things 

तो फिर तुम छवि docker build my_app:latest .

निर्माण करने के लिए इस बिंदु आप छवि बनाई है पर जरूरत है, और आप अनुप्रयोग चलाने के लिए और db से

आप 2 तरीके यह करने के लिए है की जरूरत है यह लिंक करता है:

1) मूल डॉकर दृष्टिकोण। आप db कंटेनर

docker run --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:latest

चलाने के लिए और आप अनुप्रयोग कंटेनर चलाने की आवश्यकता के बाद (छवि से पहले बनाया गया था) इस बिंदु हम आवेदन काम किया है पर

docker run --name my_app --link some-mysql:mysql -P -d my_app

। इस साधारण चीज को बिट करें क्योंकि हम 2 लंबे कमांड बनाते हैं। यदि आपको किसी अन्य मशीन पर कॉपी एप्लिकेशन की आवश्यकता है तो आपको इस आदेश को बिल्कुल दोहराना होगा।

2) डॉकर-रचना रास्ता कंटेनर चलाने के लिए कॉन्फ़िगरेशन बनाने की अनुमति देता है। यह वर्णन किया गया है कि वास्तव में कंटेनर कैसे चलाते हैं।

सरल docker-compose.yml config इस दृष्टिकोण

db: 
    image: mysql 
    environment: 
    - MYSQL_USER=root 
    - MYSQL_PASSWORD=root 

app: 
    image: my_app:latest 
    ports: 
    - 80:80 
    depends_on: 
    - db 
    environment: 
    # Database 
    - DB_USER_NAME=root 
    - DB_USER_PASSWORD=root 

इस config आप एक साथ 2 कंटेनर चलाने के लिए, लिंक और उन्हें कॉन्फ़िगर की अनुमति देता है उदाहरण देकर स्पष्ट करना।

यह बहुत आसान उदाहरण है। और डॉकर कंपोज़ का उपयोग करने के पेशेवर स्पष्ट नहीं हैं, लेकिन यदि आपके पास 5+ कंटेनर हैं तो उन्हें बिना किसी रचना के एक साथ चलाने के लिए बहुत मुश्किल है।

+0

तो 'डॉकरफ़ाइल' की आवश्यकता नहीं है? मैं केवल 'docker-compose.yml' का उपयोग करके अपने प्रश्न में वर्णित पूरे ढेर को परिभाषित कैसे करूं? क्या डॉकरफाइल डॉकर कॉन्फ़िगरेशन का एक पुराना तरीका है या निम्न स्तर की छवियों जैसे डिस्ट्रो क्लोन बनाने के लिए उपयुक्त तरीका है? – Sfisioza

+1

आपको डॉकरफ़ाइल की आवश्यकता है। डॉकरफ़ाइल परिभाषित करता है कि कुछ डॉकर छवि (निम्न स्तर पर) कैसे बनाएं। डॉकर कंपोज़ परिभाषित करता है कि कैसे कंटेनर (छवियों से) को एक साथ चलाने, लिंक करने, कॉन्फ़िगर करने के लिए –

+0

क्या आप कृपया मेरे प्रश्न से सेटअप के संबंध में दोनों फाइलों का पूरा उदाहरण प्रदान कर सकते हैं? – Sfisioza

6

Dockerfile:

  • एक डोकर छवि के लिए एक नुस्खा है
  • केवल समर्थन करता है, पोर्टेबल विकल्प

docker-compose.yaml (दूसरों के लिए विकल्पों कंटेनर रन समय पर निर्दिष्ट किया जाना है):

  • चल रही सेवाओं के समूह के लिए एक नुस्खा है
  • गैर पोर्टेबल विकल्प
  • समर्थन बनाने और नेटवर्क और मात्रा को विन्यस्त का समर्थन करता है अधिभावी पोर्टेबल विकल्प Dockerfile
  • में परिभाषित किया गया का समर्थन करता है
  • भी build:

का उपयोग करके एक छवि का निर्माण कॉन्फ़िगर कर सकते हैं दोनों एक साथ उपयोग करना आम है।

Dockerfile लगभग हमेशा कस्टम छवि बनाने के लिए उपयोग किया जाता है। कुछ छवियों का उपयोग सेवाओं (लंबी चल रही प्रक्रियाओं) को चलाने के लिए किया जा सकता है, लेकिन कुछ छवियों का उपयोग अल्पकालिक इंटरैक्टिव प्रक्रियाओं (जैसे यूनिट परीक्षण चलाना) चलाने के लिए किया जा सकता है।

docker-compose.yaml उपयोगी है जब आप एक या अधिक सेवाओं को चलाने के लिए चाहते हैं।

+0

और पोर्टेबल विकल्प क्या हैं? – Sfisioza

+1

पोर्टेबल विकल्प ऐसे विकल्प हैं जो सभी होस्टों पर समान तरीके से व्यवहार करते हैं। 'ENV' का उपयोग करके पर्यावरण चर सेट करने के लिए। एक गैर पोर्टेबल विकल्प मेजबान बाइंड माउंट की तरह कुछ होगा, जहां इसे काम करने के लिए होस्ट पर निर्देशिका की आवश्यकता होती है। – dnephin

+0

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

संबंधित मुद्दे