डॉकटर कम्पोज बनाम डॉकरीफाइल - कौन सा बेहतर है?


384

मैं डॉकर के बारे में पढ़ रहा हूं और सीख रहा हूं , और उपयोग करने के लिए Django सेटअप को सही ढंग से चुनने की कोशिश कर रहा हूं। अब तक या तो है:

डॉकटर कम्पोज या डॉकरीफाइल

मैं समझता हूं कि Dockerfilesइसका उपयोग किया जाता है Docker Compose, लेकिन मुझे यकीन नहीं है कि क्या FROMअलग-अलग छवियों के लिए कई कमांडों के साथ एक बड़े डॉकफाइल में सब कुछ डालना अच्छा है ?

मैं कई अलग-अलग छवियों का उपयोग करना चाहता हूं जिनमें शामिल हैं:

uwsgi
nginx
postgres
redis
rabbitmq
celery with cron

डॉकर का उपयोग करके इस प्रकार के वातावरण को स्थापित करने में सर्वोत्तम अभ्यास क्या हैं, इस पर सलाह दें ।

यदि यह मदद करता है, तो मैं एक मैक पर हूं, इसलिए boot2docker का उपयोग कर रहा हूं

मेरे द्वारा लिए गए कुछ मुद्दे:

  1. Docker Compose Python3 के साथ संगत नहीं है
  2. मैं अपनी परियोजना को कंटेनरीकृत करना चाहता हूं, इसलिए यदि एक बड़ा डॉकफाइल आदर्श नहीं है, तो मुझे लगता है कि मुझे डोकर कंपोज का उपयोग करके इसे तोड़ने की आवश्यकता होगी
  3. मैं परियोजना Py2 और Py3 को संगत बनाने के लिए ठीक हूं, इसलिए मैं django-compose की ओर झुक रहा हूं

5
यह मामला बेहतर होगा कि "क्या मुझे एक या एक से अधिक कंटेनरों के रूप में अपना ऐप चलाना चाहिए?" ऐसा लगता है कि यह निर्भर करता है और चिंता के स्केलिंग और पृथक्करण (एक कंटेनर प्रति सेवा) के मामलों को ध्यान में रखा जाना चाहिए। ये मदद कर सकते हैं: stackoverflow.com/questions/30534939/… और quora.com/…
Fabien Snauwaert

आधिकारिक डॉकर "आरंभ करना" डॉक्स
jchook

जवाबों:


238

इसका उत्तर न तो है।

यदि आप अपने प्रोजेक्ट के लिए बिल्ड कमांड जोड़ते हैं तो Docker Compose (इसमें कंपोज़ कहा जाता है) Dockerfile का उपयोग करेगा docker-compose.yml

आपका डॉकर वर्कफ़्लो आपके द्वारा Dockerfileबनाई जाने वाली प्रत्येक छवि के लिए उपयुक्त होना चाहिए , फिर buildकमांड का उपयोग करके छवियों को इकट्ठा करने के लिए कंपोज़ का उपयोग करें ।

आप का उपयोग कर अपने व्यक्तिगत Dockerfiles के लिए पथ निर्दिष्ट कर सकते हैं build /path/to/dockerfiles/blahजहां /path/to/dockerfiles/blahजहां blah के है Dockerfileजीवन।


10
क्या आप docker-composeउत्पादन या केवल देव में उपयोग करते हैं ? आपकी सहायता के लिए धन्यवाद।
हारून लेलेयर

18
@booyaa आप उस पर विस्तृत कर सकते हैं?
मार्टिन थोमा

2
जवाब के लिए धन्यवाद! Dockerfile छवि के लिए कॉन्फिगरेशन निर्दिष्ट करता है, और docker-compose.yml एक साथ इमेजेज को इकट्ठा करता है .. एक बात जो मैं इंगित करना चाहता हूं, वह है, यदि docker-compose.ymlकेवल पब्लिक इमेज (इंटरनेट / डॉकटर हब से इमेज को खींचना) का उपयोग करना है, तो किसी को भी ज़रूरत नहीं है कमांड चलाने के लिए डॉकरफाइल docker-compose up
ओल्ड्यॉन्ग

549

Dockerfile

यहां छवि विवरण दर्ज करें

Dockerfile एक साधारण टेक्स्ट फ़ाइल है जिसमें उपयोगकर्ता द्वारा किसी इमेज को इकट्ठा करने के लिए कहे जा सकने वाले कमांड शामिल हैं।

उदाहरण, डॉकरफाइल

FROM ubuntu:latest
MAINTAINER john doe 

RUN apt-get update
RUN apt-get install -y python python-pip wget
RUN pip install Flask

ADD hello.py /home/hello.py

WORKDIR /home

डॉकर कम्पोज़

यहां छवि विवरण दर्ज करें

डॉकर कम्पोज़

  • मल्टी-कंटेनर डॉकर एप्लिकेशन को परिभाषित करने और चलाने के लिए एक उपकरण है।

  • उन सेवाओं को परिभाषित करें जो आपके ऐप को बनाते हैं docker-compose.ymlताकि उन्हें एक अलग वातावरण में एक साथ चलाया जा सके।

  • सिर्फ रन करके एक कमांड में एक ऐप चलाएं docker-compose up

उदाहरण, docker-compose.yml

version: "3"
services:
  web:
    build: .
    ports:
    - '5000:5000'
    volumes:
    - .:/code
    - logvolume01:/var/log
    links:
    - redis
  redis:
    image: redis
    volumes:
      logvolume01: {}

43
@ एसजी का जवाब है कि डॉकटर बनाम डोकर कंपोज की समझ के अभाव के आधार पर यह प्रश्न गलत है। पूरी तरह से समझाते हुए कि कैसे दो बातचीत शायद सबसे अच्छा जवाब है जिसके बारे में मैं सोच सकता हूं।
एमपीएवर

53
मुझे नहीं पता कि यह सटीक ब्रेकडाउन डॉकर के होम पेज पर क्यों नहीं बैठा है। धन्यवाद।
codykochmann

4
मैं इस तरह के डॉक्स को वेब पर हाल ही में जारी किए गए टूल / समाधान / चौखटे में गायब देखता हूं। मुझे लगता है कि यह देखना मुश्किल है कि किसी को इस मामले में आपकी जरूरत है कि आप पहले से ही जानते हैं या समाधान का आविष्कार किया है।
पीटर ब्रैनफॉर्न

36
इस उत्तर से क्या गायब है, रचना के बारे में अधिक जानकारी है। क्या रचना पटकथा को डॉकफाइल कहती है? यह कैसे पता चलता है कि क्या रचना है? उदाहरण दिखाता है image: redisलेकिन क्या यह डॉकहॉब से है? स्थानीय निर्देशिका? आदि ... यह मेरे जैसे एक newb के लिए भ्रामक बनाता है यह समझने के लिए कि वास्तव में क्या चल रहा है
जो फिलिप्स

5
यह प्रतिक्रिया डॉकटर रचना के बहु-कंटेनर उद्देश्य पर जोर देती है, लेकिन संभवतः कई अन्य परिदृश्य हैं जिन्हें आप केवल एक कंटेनर के साथ भी उपयोग करना चाहते हैं जैसे कि आप जिस पोर्ट को अपने कंटेनर को चलाना चाहते हैं उसे निर्दिष्ट करना (dockerfile afic में संभव नहीं है)।
पनसौल

99

लिखें फ़ाइल का वर्णन अपने चल रहे राज्य में कंटेनर , कैसे के बारे में विवरणों छोड़ने कंटेनर का निर्माण करने के लिए Dockerfileshttp://deninet.com/blog/1587/docker-scratch-part-4-compose-and-volumes

जब आप विकास में कम्पोज़ के साथ अपने ऐप को परिभाषित करते हैं , तो आप इस परिभाषा का उपयोग विभिन्न अनुप्रयोगों जैसे सीआई, स्टेजिंग, और उत्पादन में अपने एप्लिकेशन को चलाने के लिए कर सकते हैंhttps://docs.docker.com/compose/production/

ऐसा भी लगता है कि कम्पोज़ को 1.11 के रूप में उत्पादन सुरक्षित माना जाता है , क्योंकि https://docs.docker.com/v1.11/compose/production/ पर अब https: // डॉक्स जैसे उत्पादन में इसका उपयोग नहीं करने की चेतावनी है। .docker.com / v1.10 / रचना / उत्पादन / करता है।


1
इस मुद्दे को लाने के लिए धन्यवाद। क्या आप कृपया 1.11 पर उत्पादन सुरक्षा के लिए कुछ और जोड़ सकते हैं?
एमए हुसैन टोनू

92

docker-compose आपके पास आदेशों का एक टन लिखने के लिए मौजूद रहता है जो आपको docker-cli के साथ करना होगा।

docker-compose भी एक ही समय में कई कंटेनरों को स्टार्टअप करना आसान बनाता है और स्वचालित रूप से उन्हें किसी न किसी रूप में नेटवर्किंग के साथ जोड़ता है।

Docker-compose का उद्देश्य docker cli के रूप में कार्य करना है, लेकिन कई कमांड को अधिक तेज़ी से जारी करना है।

डॉकटर-कम्पोज़ का उपयोग करने के लिए, आपको उन कमांड्स को एनकोड करना होगा जो आप एक docker-compose.ymlफाइल में पहले चला रहे थे ।

आप उन्हें यम फ़ाइल में पेस्ट करने के लिए नहीं जा रहे हैं, एक विशेष वाक्यविन्यास है।

एक बार बनाने के बाद, आपको इसे डॉकटर-कम्पोज़ी क्ली को फीड करना होगा और यह फ़ाइल को पार्स करने और हमारे द्वारा निर्दिष्ट सही कॉन्फ़िगरेशन के साथ सभी विभिन्न कंटेनरों को बनाने के लिए क्ली तक होगा।

तो आपके पास अलग कंटेनर होंगे, उदाहरण के लिए कह सकते हैं, एक है redis-serverऔर दूसरा है node-appऔर आप चाहते हैं कि Dockerfileआपकी वर्तमान निर्देशिका में इसका उपयोग करके बनाया जाए ।

इसके अतिरिक्त, उस कंटेनर को बनाने के बाद आप कंटेनर से लोकल मशीन में कुछ पोर्ट मैप करेंगे ताकि उसके अंदर चल रही हर चीज को एक्सेस किया जा सके।

तो अपनी docker-compose.ymlफ़ाइल के लिए आप पहली पंक्ति को शुरू करना चाहते हैं जैसे:

version: '3'

यह बताता है कि डॉकर जिस संस्करण का docker-composeआप उपयोग करना चाहते हैं। उसके बाद आपको जोड़ना होगा:

version: '3'
services: 
  redis-server: 
    image: 'redis'
  node-app:
    build: .

कृपया इंडेंटेशन पर ध्यान दें, बहुत महत्वपूर्ण है। इसके अलावा, एक सेवा के लिए नोटिस मैं एक छवि को हथियाने वाला हूं, लेकिन दूसरी सेवा के लिए मैं docker-composeउस छवि को बनाने के लिए वर्तमान निर्देशिका के अंदर देखने के लिए कह रहा हूं जिसका उपयोग दूसरे कंटेनर के लिए किया जाएगा।

फिर आप सभी अलग-अलग बंदरगाहों को निर्दिष्ट करना चाहते हैं जो आप इस कंटेनर पर खोलना चाहते हैं।

version: '3'
services: 
  redis-server: 
    image: 'redis'
  node-app:
    build: .
    ports:
      -

कृपया ध्यान दें, यम फ़ाइल में एक डैश है कि हम एक सरणी कैसे निर्दिष्ट करते हैं। इस उदाहरण में मैं 8081अपने स्थानीय मशीन 8081पर कंटेनर पर मैपिंग कर रहा हूं जैसे:

version: '3'
services: 
  redis-server: 
    image: 'redis'
  node-app:
    build: .
    ports:
      - "8081:8081"

तो पहला पोर्ट आपकी स्थानीय मशीन है, और दूसरा कंटेनर पर पोर्ट है, आप भ्रम की स्थिति से बचने के लिए दोनों के बीच अंतर कर सकते हैं:

version: '3'
services:
  redis-server:
    image: 'redis'
  node-app:
    build: .
    ports:
      - "4001:8081"

अपनी docker-compose.ymlफ़ाइल को इस तरह से विकसित करने से यह इन कंटेनरों को अनिवार्य रूप से एक ही नेटवर्क पर बनाएगा और उनके पास एक दूसरे के साथ संवाद करने और किसी भी तरह से संपर्क करने की उनकी नि: शुल्क पहुंच होगी और वे जितनी चाहें उतनी जानकारी का आदान-प्रदान करेंगे।

जब दो कंटेनरों का उपयोग करके बनाया जाता है docker-composeतो हमें किसी पोर्ट घोषणा की आवश्यकता नहीं होती है।

अब मेरे उदाहरण में, हमें Nodejs ऐप में कुछ कोड कॉन्फ़िगरेशन करने की आवश्यकता है जो कुछ इस तरह दिखता है:

const express = require('express');
const redis = require('redis');

const app = express();
const client = redis.createClient({
  host: 'redis-server'
});

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

अब, यदि आप कभी भी अपने आप को एक Nodejs ऐप के साथ काम करते हुए पाते हैं और आप यह सुनिश्चित करना चाहते हैं कि आप डिफ़ॉल्ट पोर्ट Nodejs के उपयोग से अवगत हैं, तो मैं इसे जोड़ूंगा:

const express = require('express');
const redis = require('redis');

const app = express();
const client = redis.createClient({
  host: 'redis-server',
  port: 6379
});

इसलिए डॉकर यह देखने वाला है कि नोड ऐप खोज रहा है redis-serverऔर इस चालू कंटेनर में उस कनेक्शन को रीडायरेक्ट करता है।

पूरे समय, Dockerfileकेवल यह होता है:

FROM node:alpine

WORKDIR '/app'

COPY /package.json ./
RUN npm install
COPY . .

CMD ["npm", "start"]

इसलिए, जबकि इससे पहले कि आप docker run myimageफ़ाइल के अंदर सभी कंटेनरों या सेवाओं का एक उदाहरण बनाने के लिए दौड़ सकते हैं जिसे आप बजाय चला सकते हैं, docker-compose upऔर आपको एक छवि निर्दिष्ट करने की आवश्यकता नहीं है क्योंकि डॉकर वर्तमान कार्यशील निर्देशिका में दिखेगा और पहले की तलाश करेगा docker-compose.ymlवहाँ अंदर फ़ाइल करें।

इससे पहले docker-compose.yml, हम की दो अलग-अलग आदेशों का सामना करना पड़ा docker build .और docker run myimageहै, लेकिन में docker-composeदुनिया आप अपने चित्रों तुम लिखो पुनर्निर्माण करना चाहते हैं docker-compose up --build। यह डॉकटर को कंटेनरों को फिर से शुरू करने के लिए कहता है लेकिन नवीनतम परिवर्तनों को प्राप्त करने के लिए इसका पुनर्निर्माण करता है।

इसलिए docker-composeकई कंटेनरों के साथ काम करना आसान बनाता है। अगली बार जब आप पृष्ठभूमि में कंटेनरों के इस समूह को शुरू कर सकते हैं जो आप कर सकते हैं docker-compose up -dऔर उन्हें रोकने के लिए आप कर सकते हैं docker-compose down


13
@ क्रिस यह लगभग वैसा ही है जैसे इस और स्वीकृत उत्तर के बीच 3 साल का ज्ञान है।
नारुतो सेम्पाई

मुझे आश्चर्य है कि अगर docker-compose upमेरी स्थिति में सिर्फ एक सेवा का उपयोग करने के लिए मेरे लिए कोई अच्छा कारण है? एक और शब्द, docker run xxxअगर मैं उपयोग करता हूं, तो किसी भी लाभ की तुलना करें docker-compose up?
5

@atline Pansoul के के जवाब देख stackoverflow.com/a/45549372/3366962 उपयोग कर के लाभ पर docker-composeएक कंटेनर के लिए
go2null

1
@PaRRazvanBerg आप "या" भाग सही है (और रेडिस 6379का डिफ़ॉल्ट पोर्ट है)।
कृष्णप्रभाकर

1
Docker-compose.yml के उदाहरणों ने मुझे कुछ सवालों के जवाब देने में मदद की, जिनके बारे में मेरे पास docker-compose था। स्वीकृत उत्तर उपयोगी नहीं है, खासकर ऐसे लोगों के लिए जो नए कार्य करने वाले हैं।
मौलिक 13

43

अपने वर्कफ़्लो में, मैं अपने सिस्टम के प्रत्येक भाग के लिए एक डॉकफ़िल जोड़ता हूं और इसे कॉन्फ़िगर करता हूं कि प्रत्येक भाग व्यक्तिगत रूप से चल सकता है। फिर मैं उन्हें एक साथ लाने और उन्हें लिंक करने के लिए एक docker-compose.yml जोड़ता हूं।

सबसे बड़ा लाभ (मेरी राय में): कंटेनरों को लिंक करते समय , आप एक नाम को परिभाषित कर सकते हैं और इस नाम के साथ अपने कंटेनरों को पिंग कर सकते हैं। इसलिए आपका डेटाबेस नाम के साथ dbऔर अब उसके आईपी द्वारा सुलभ हो सकता है ।


क्या आप नाम से db तक पहुँचने के बारे में अधिक विस्तार से बता सकते हैं?
वेदरन मारिसेविक।

किस भाग पर? डॉकटर-कम्पोज़ में यह तुच्छ है, क्योंकि यह एक सामान्य तरीका है जब इसे नाम देने के लिए अपनी सेवाओं को परिभाषित करते हुए इसे कॉन्फ़िगर करने की आवश्यकता के बिना इसे एक्सेस किया जा सकता है। हमारे सीआई में मैं एक नेटवर्क बना रहा हूं, इस नेटवर्क में कंटेनर बनाएं और उन्हें एक नाम दें। फिर आप उन्हें कंटेनरों के अंदर उनके नाम से भी पहुँचा सकते हैं (होस्ट से नहीं)
n2o

संगीतकार में मेरा मतलब है। इसलिए मैं कंपोज़र में छवियों को लिंक करता हूं, और आईपी के बजाय मेरे ऐप कॉन्फिगर में, मैंने कंपोजर फ़ाइल में जो भी नाम दिया है, उसके द्वारा MySQL को टार्गर करता हूं?
वेदरन मारिसेविक।

यह सही है। आपको एक लिंक भी बताने की आवश्यकता नहीं है। यदि नेटवर्क अलग-अलग निर्दिष्ट नहीं है, तो वे डिफ़ॉल्ट रूप से जुड़े हुए हैं। इस उदाहरण में सेवा "वेब" मेजबान पिंग कर सकते हैं "Redis" इसके नाम से "Redis"
N2O

37

"बेहतर" सापेक्ष है। यह सब इस बात पर निर्भर करता है कि आपकी जरूरतें क्या हैं। डॉकर कम्पोजर कई कंटेनरों को ऑर्केस्ट्रेट करने के लिए है। यदि ये चित्र पहले से ही docker रजिस्ट्री में मौजूद हैं, तो उन्हें कंपोज़ फ़ाइल में सूचीबद्ध करना बेहतर है। यदि इन छवियों या कुछ अन्य छवियों को आपके कंप्यूटर पर फ़ाइलों से निर्मित किया जाना है, तो आप उन छवियों के निर्माण की प्रक्रियाओं का वर्णन एक डॉकरफाइल में कर सकते हैं।

मैं समझता हूं कि Dockerfiles का उपयोग Docker Compose में किया जाता है, लेकिन मुझे यकीन नहीं है कि क्या अलग-अलग छवियों के लिए कई FROM कमांड के साथ एक बड़े Dockerfile में सब कुछ डालना अच्छा है?

एक एकल डॉकफाइल में कई FROM का उपयोग करना बहुत अच्छा विचार नहीं है क्योंकि सुविधा को हटाने का प्रस्ताव है। 13026

यदि उदाहरण के लिए, आप एक अनुप्रयोग का उपयोग करना चाहते हैं जो एक डेटाबेस का उपयोग करता है और आपके कंप्यूटर पर एप्लिकेशन फ़ाइलों का उपयोग करता है, तो आप एक doकर फ़ाइल के साथ कम्पोज़ फाइल का उपयोग इस प्रकार कर सकते हैं

डोकर-compose.yml

mysql:
  image: mysql:5.7
  volumes:
    - ./db-data:/var/lib/mysql
  environment:
    - "MYSQL_ROOT_PASSWORD=secret"
    - "MYSQL_DATABASE=homestead"
    - "MYSQL_USER=homestead"
  ports:
    - "3307:3306"
app:
  build:
    context: ./path/to/Dockerfile
    dockerfile: Dockerfile
  volumes:
    - ./:/app
  working_dir: /app

Dockerfile

FROM php:7.1-fpm 
RUN apt-get update && apt-get install -y libmcrypt-dev \
  mysql-client libmagickwand-dev --no-install-recommends \
  && pecl install imagick \
  && docker-php-ext-enable imagick \
  && docker-php-ext-install pdo_mysql \
  && curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer

30

Dockerfile और Docker Compose, Dockerland में दो अलग-अलग अवधारणाएँ हैं। जब हम डॉकटर के बारे में बात करते हैं, तो सबसे पहले जो चीजें दिमाग में आती हैं, वे हैं ऑर्केस्ट्रेशन, ओएस स्तर वर्चुअलाइजेशन, चित्र, कंटेनर, आदि। मैं प्रत्येक को समझाने की कोशिश करूंगा:

छवि: एक छवि एक अपरिवर्तनीय, साझा करने योग्य फ़ाइल है जो डॉकर-विश्वसनीय रजिस्ट्री में संग्रहीत है। एक डॉकर छवि केवल पढ़ने वाली परतों की एक श्रृंखला से निर्मित होती है। प्रत्येक परत एक निर्देश का प्रतिनिधित्व करती है जो छवि के डॉकरफाइल में दी जा रही है। एक छवि सभी आवश्यक बायनेरिज़ को चलाने के लिए रखती है।

यहां छवि विवरण दर्ज करें

कंटेनर: एक छवि के एक उदाहरण को कंटेनर कहा जाता है । एक कंटेनर सिर्फ एक निष्पादन योग्य छवि बाइनरी है जिसे होस्ट ओएस द्वारा चलाया जाना है। एक चल रही छवि एक कंटेनर है।

यहां छवि विवरण दर्ज करें

Dockerfile: Dockerfile एक टेक्स्ट डॉक्यूमेंट है जिसमें सभी कमांड / बिल्ड निर्देश होते हैं, एक उपयोगकर्ता इमेज को इकट्ठा करने के लिए कमांड लाइन पर कॉल कर सकता है। यह एक के रूप में सहेजा जाएगा Dockerfile। (लोअरकेस 'f' पर ध्यान दें।)

यहां छवि विवरण दर्ज करें

Docker-Compose: Compose मल्टी-कंटेनर Docker अनुप्रयोगों को परिभाषित करने और चलाने के लिए एक उपकरण है। कम्पोज़ के साथ, आप अपने एप्लिकेशन की सेवाओं (कंटेनरों) को कॉन्फ़िगर करने के लिए एक YAML फ़ाइल का उपयोग करते हैं। फिर, एक ही आदेश के साथ, आप अपने कॉन्फ़िगरेशन से सभी सेवाओं को बनाते हैं और शुरू करते हैं। रचना फ़ाइल के रूप में सहेजा जाएगा docker-compose.yml


14

कल्पना कीजिए कि आप एक सॉफ्टवेयर कंपनी के प्रबंधक हैं और आपने बस एक नया सर्वर खरीदा है। बस हार्डवेयर।

Dockerfileनिर्देशों के एक सेट के रूप में सोचें कि आप अपने सिस्टम प्रशासक को बताएंगे कि इस ब्रांड के नए सर्वर पर क्या स्थापित किया जाए। उदाहरण के लिए:

  • हमें एक डेबियन लाइनक्स चाहिए
  • एक अपाचे वेब सर्वर जोड़ें
  • हमें postgresql की भी आवश्यकता है
  • आधी रात कमांडर स्थापित करें
  • जब सब हो जाए, तो हमारे प्रोजेक्ट की सभी * .php, * .jpg, आदि फाइलों को वेबसर्वर ( /var/www) में कॉपी करें

इसके विपरीत, docker-compose.ymlनिर्देशों के एक सेट के रूप में सोचें कि आप अपने सिस्टम व्यवस्थापक को बताएंगे कि सर्वर दुनिया के बाकी हिस्सों के साथ कैसे संपर्क कर सकता है। उदाहरण के लिए,

  • इसके पास दूसरे कंप्यूटर से साझा किए गए फ़ोल्डर तक पहुंच है,
  • यह पोर्ट 80 होस्ट कंप्यूटर के पोर्ट 8000 के समान है,
  • और इसी तरह।

(यह एक सटीक व्याख्या नहीं है लेकिन इसके साथ शुरू करने के लिए पर्याप्त अच्छा है।)


4

Dockerfiles एक नंगे हड्डी उबंटू से उदाहरण के लिए एक छवि बनाने के लिए है, आप एक छवि पर और दूसरी छवि पर mysqlकॉल कर सकते हैं ।mySQLmywordpressmywordpress

कम्पोज YAML फाइलें इन छवियों को लेने और उन्हें जोर से चलाने के लिए हैं। उदाहरण के लिए यदि आपके पास अपनी docker-compose.ymlफ़ाइल में एक सेवा कॉल है db:

services:
   db:
     image: mySQL  --- image that you built.

और एक सेवा जिसे worpress कहा जाता है जैसे:

wordpress: 
    image: mywordpress

तो mywordpress कंटेनर के अंदर आप dbअपने mySQL कंटेनर से कनेक्ट करने के लिए उपयोग कर सकते हैं । यह जादू संभव है क्योंकि आपका डॉक होस्ट एक नेटवर्क ब्रिज (नेटवर्क ओवरले) बनाता है।


0

माइक्रोसर्विसेस वर्ल्ड (एक सामान्य साझा कोडबेस) में, प्रत्येक माइक्रोसैस सर्विस Dockerfileका रूट स्तर पर (आम तौर पर सभी माइक्रोसर्विस के बाहर और जहां आपके माता-पिता POM रहता है) थोड़ी docker-compose.ymlदेर के लिए होता है, आप एक पूर्ण-विकसित ऐप में सभी माइक्रोसर्विस को समूह में परिभाषित करेंगे ।

आपके मामले में "Dockerfile" पर "Docker Compose" को प्राथमिकता दी जाती है। "ऐप" सोचो "सोचो" लिखें।


0

Dockerfile एक फ़ाइल है जिसमें एक छवि को इकट्ठा करने के लिए टेक्स्ट कमांड होते हैं।

मल्टी-कंटेनर वातावरण को चलाने के लिए डॉकर कंपोज़ का उपयोग किया जाता है।

अपने विशिष्ट परिदृश्य में, यदि आपके पास आपके द्वारा उल्लिखित प्रत्येक तकनीक के लिए कई सेवाएं हैं (सर्विस 1 का उपयोग कर रेड्डी, सर्विस 2 का उपयोग खरगोश mq आदि), तो आपके पास प्रत्येक सेवाओं के लिए एक डॉकफाइल हो सकता है और चलाने के लिए एक सामान्य डॉकटर-कंपाइल। कंटेनर के रूप में सभी "Dockerfile"।

यदि आप उन सभी को एक ही सेवा में चाहते हैं, तो docker-compose एक व्यवहार्य विकल्प होगा।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.