दोनों के बीच क्या अंतर है docker-compose build और docker build?
मान लीजिए एक डॉक्यूमेंटेड प्रोजेक्ट पथ में एक docker-compose.ymlफ़ाइल है:
docker-compose build
तथा
docker build
दोनों के बीच क्या अंतर है docker-compose build और docker build?
मान लीजिए एक डॉक्यूमेंटेड प्रोजेक्ट पथ में एक docker-compose.ymlफ़ाइल है:
docker-compose build
तथा
docker build
जवाबों:
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
webकंटेनर नाम से आता है। myprojectउस फ़ोल्डर का नाम है जिसमें आप हैं। यदि आप webकंटेनर वाले दो प्रोजेक्ट्स पर काम करते हैं तो यह टकराव से बचा जाता है ।
docker-compose.ymlऊपर दिए गए आधार पर , webसेवा नाम से आता है।
docker-compose builddocker-compose.ymlफ़ाइल में सेवाओं का निर्माण करेगा ।
https://docs.docker.com/compose/reference/build/
docker build Dockerfile द्वारा परिभाषित छवि का निर्माण करेगा।
मूल रूप से, docker-compose, docker को केवल docker कमांड की तुलना में उपयोग करने का एक बेहतर तरीका है।
अगर यहां सवाल यह है कि अगर docker-compose बिल्ड कमांड है, तो कई चित्रों वाली एक ज़िप प्रकार की चीज का निर्माण करेगा, जो अन्यथा सामान्य Dockerfile के साथ अलग से बनाया गया होगा, तो सोच गलत है।
डॉकटर-कंपोज़ बिल्ड, डॉकटर-कम्पोज़.इमल में व्यक्तिगत सेवा प्रविष्टि में जाकर, व्यक्तिगत छवियों का निर्माण करेगा।
डॉकरों की छवियों, कमांड के साथ, हम सभी व्यक्तिगत छवियों को भी सहेजा जा सकता है।
असली जादू है डॉकटर-कंपोज़।
यह मूल रूप से परस्पर कंटेनरों का एक नेटवर्क बनाएगा, जो एक होस्टनाम के समान कंटेनर के नाम के साथ एक दूसरे से बात कर सकते हैं।
पहले उत्तर से जोड़ना ...
आप सेवा की परिभाषा के तहत छवि नाम और कंटेनर नाम दे सकते हैं।
उदाहरण के लिए, नीचे दिए गए डॉक-कम्पोज़ उदाहरण में 'वेब' नामक सेवा के लिए, आप छवि का नाम और कंटेनर नाम स्पष्ट रूप से दे सकते हैं, ताकि डॉक करने वाले को चूक का उपयोग न करना पड़े।
अन्यथा छवि नाम जो 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:है!
के बीच अंतर के बारे में कुछ अतिरिक्त शब्द 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)