`Docker- रचना बनाएँ` और` docker build` में क्या अंतर है?


87

दोनों के बीच क्या अंतर है docker-compose build और docker build?

मान लीजिए एक डॉक्यूमेंटेड प्रोजेक्ट पथ में एक docker-compose.ymlफ़ाइल है:

docker-compose build

तथा

docker build

जवाबों:


109

docker-composeडॉक सीएलआई के चारों ओर एक आवरण माना जा सकता है (वास्तव में यह अजगर में एक और कार्यान्वयन है जैसा कि टिप्पणियों में कहा गया है ) समय हासिल करने और 500 वर्णों वाली लंबी लाइनों से बचने के लिए (और एक ही समय में कई कंटेनर भी शुरू करें)। यह docker-compose.ymlमापदंडों को पुनः प्राप्त करने के लिए नामक एक फाइल का उपयोग करता है ।

आप डोकर-लिखें फ़ाइल स्वरूप के लिए संदर्भ पा सकते हैं यहाँ

तो मूल रूप docker-compose buildसे आपका पढ़ा जाएगा docker-compose.yml, build:कथन युक्त सभी सेवाओं की तलाश करें और docker buildप्रत्येक के लिए चलाएं ।

प्रत्येकbuild:Dockerfile एक संदर्भ निर्दिष्ट कर सकता है , और डॉक करने के लिए पास होने का तर्क देता है।

एक उदाहरण docker-compose.ymlफ़ाइल के साथ समाप्त करने के लिए :

version: '3.2'

services:
  database:
    image: mariadb
    restart: always
    volumes:
      - ./.data/sql:/var/lib/mysql

  web:
    build:
      dockerfile: Dockerfile-alpine
      context: ./web
    ports:
      - 8099:80
    depends_on:
      - database 

कॉल करते समय docker-compose build, केवल webलक्ष्य को निर्मित करने के लिए एक छवि की आवश्यकता होगी। docker buildआदेश दिखाई देगा:

docker build -t web_myproject -f Dockerfile-alpine ./web

2
"Web_myproject" टैग कहां से आया है या यह केवल एक उदाहरण है? क्या आप डॉकटर-कम्पोज़ के साथ निर्माण करते समय सभी छवि नाम निर्दिष्ट कर सकते हैं?
पलकबा

5
webकंटेनर नाम से आता है। myprojectउस फ़ोल्डर का नाम है जिसमें आप हैं। यदि आप webकंटेनर वाले दो प्रोजेक्ट्स पर काम करते हैं तो यह टकराव से बचा जाता है ।
ह्यूगोशका


docker-compose.ymlऊपर दिए गए आधार पर , webसेवा नाम से आता है।
आइजेनफील्ड

1
यह मेरी समझ भी थी, लेकिन ऐसा लगता है कि कुछ सूक्ष्म अंतर हैं। उदाहरण के लिए फ़ाइल लेयर हैश की गणना दोनों के बीच थोड़ी भिन्न होती है।
vidstige


9

मूल रूप से, docker-compose, docker को केवल docker कमांड की तुलना में उपयोग करने का एक बेहतर तरीका है।

अगर यहां सवाल यह है कि अगर docker-compose बिल्ड कमांड है, तो कई चित्रों वाली एक ज़िप प्रकार की चीज का निर्माण करेगा, जो अन्यथा सामान्य Dockerfile के साथ अलग से बनाया गया होगा, तो सोच गलत है।

डॉकटर-कंपोज़ बिल्ड, डॉकटर-कम्पोज़.इमल में व्यक्तिगत सेवा प्रविष्टि में जाकर, व्यक्तिगत छवियों का निर्माण करेगा।

डॉकरों की छवियों, कमांड के साथ, हम सभी व्यक्तिगत छवियों को भी सहेजा जा सकता है।

असली जादू है डॉकटर-कंपोज़।

यह मूल रूप से परस्पर कंटेनरों का एक नेटवर्क बनाएगा, जो एक होस्टनाम के समान कंटेनर के नाम के साथ एक दूसरे से बात कर सकते हैं।


5

पहले उत्तर से जोड़ना ...

आप सेवा की परिभाषा के तहत छवि नाम और कंटेनर नाम दे सकते हैं।

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

अन्यथा छवि नाम जो docker उपयोग करेगा वह फ़ोल्डर (निर्देशिका) और सेवा नाम का संघटन होगा। उदाहरण के लिए myprojectdir_web

इसलिए वांछित छवि नाम को स्पष्ट रूप से रखना बेहतर है जो docker build कमांड निष्पादित होने पर उत्पन्न होगा।

उदाहरण के लिए चित्र: mywebserviceImage container_name: my-webServiceImage- कंटेनर

उदाहरण docker-compose.yml फ़ाइल:

version: '3.2'
services:
  web:
    build:
      dockerfile: Dockerfile-alpine
      context: ./web
    ports:
      - 8099:80
    image: mywebserviceImage
    container_name: my-webServiceImage-Container
    depends_on:
      - database

उप-श्रेणी को उन build:ताकतों के मूल्य के रूप में निर्दिष्ट करना जो आपके पास सटीक फ़ाइल नाम के रूप में हैं Dockerfile। उदाहरण के लिए, में। एक अच्छा build: ./webउपयोग context:है!
eigenfield

2

के बीच अंतर के बारे में कुछ अतिरिक्त शब्द docker buildऔर docker-compose build। दोनों में कैश के रूप में मौजूदा छवि का उपयोग करके छवियों के निर्माण का एक विकल्प है।

  • के साथ docker build, विकल्प है--cache-from <image>
  • के साथ docker-composer, अनुभाग cache_fromमें एक टैग है build

दुर्भाग्य से, अब तक, इस स्तर पर, एक के द्वारा बनाई गई छवियां परतों के कैश के रूप में दूसरे के साथ संगत नहीं हैं ( Ids संगत नहीं हैं )। हालाँकि, docker-compose v1.25.0 (2019-11-18) , एक प्रायोगिक सुविधा COMPOSE_DOCKER_CLI_BUILD पेश docker-composeकरता है, ताकि देशी डॉक बिल्डर का उपयोग किया जा सके (इसलिए, द्वारा बनाई गई छवियां)docker build को परतों के कैश के रूप में इस्तेमाल किया जा सकता है docker-compose build)

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