दोनों के बीच क्या अंतर है 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 build
docker-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
)