डॉकटर कम्पोज़: मेकफाइल का उपयोग करके सरलीकृत करें

हर कुछ वर्षों में, सॉफ्टवेयर विकास उद्योग में एक बदलाव होता है। इन परिघटनाओं में से एक है माइक्रोसिस्टर्स की अवधारणा में बढ़ती रुचि। हालाँकि माइक्रोसिरोइस नवीनतम तकनीक नहीं है, लेकिन हाल ही में इसकी लोकप्रियता का शाब्दिक अर्थ आसमान छू रहा है।

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





डाक में काम करनेवाला मज़दूर


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

डॉकटर रचना


डॉकर कंपोज़ तकनीक को मल्टी-कंटेनर एप्लिकेशन को कॉन्फ़िगर करने के लिए डिज़ाइन किया गया है। एक डॉकर कंपोज परियोजना में कई डॉकटर कंटेनर शामिल हो सकते हैं, जैसा कि इस परियोजना के निर्माता की जरूरत है।

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


मेजबान सिस्टम पर दो कंटेनर चल रहे हैं

GNU मेक


एक कार्यक्रम makeअनिवार्य रूप से स्रोत कोड से कार्यक्रमों और पुस्तकालयों की विधानसभा को स्वचालित करने के लिए एक उपकरण है। सामान्य तौर पर, हम कह सकते हैं कि यह makeकिसी भी प्रक्रिया पर लागू होता है जिसमें कुछ स्रोत सामग्री को एक निश्चित परिणाम के लिए निश्चित स्रोत सामग्री में परिवर्तित करने के लिए मनमाना आदेशों का निष्पादन शामिल होता है। हमारे मामले में, टीमों docker-composeको अमूर्त लक्ष्यों ( फोनी लक्ष्य ) में बदल दिया जाएगा

प्रोग्राम को यह बताने के लिए makeकि हम उससे क्या चाहते हैं, हमें एक फ़ाइल की आवश्यकता है Makefile

हमारे Makefileसामान्य आदेश शामिल होंगे dockerऔरdocker-composeयह कई समस्याओं को हल करने के लिए डिज़ाइन किया गया है। अर्थात्, हम कंटेनर को इकट्ठा करने के बारे में बात कर रहे हैं, इसे शुरू करने, रोकने, इसे फिर से शुरू करने, कंटेनर के लिए उपयोगकर्ता के लॉगिन को व्यवस्थित करने, कंटेनर लॉग के साथ काम करने और इसी तरह की अन्य समस्याओं के समाधान के बारे में।

डॉकटर कम्पोज़ के लिए विशिष्ट उपयोग


निम्नलिखित घटकों वाले एक नियमित वेब एप्लिकेशन की कल्पना करें:

  • TimescaleDB डेटाबेस (पोस्टग्रेज)।
  • एक्सप्रेस.जेएस आवेदन।
  • पिंग (सिर्फ एक कंटेनर जो कुछ खास नहीं करता है)।

इस एप्लिकेशन को 3 डॉकटर कंटेनरों की आवश्यकता होगी और docker-composeइन कंटेनरों के प्रबंधन के लिए निर्देश वाली एक फ़ाइल होगी प्रत्येक कंटेनर में इंटरैक्शन के अलग-अलग बिंदु होंगे। उदाहरण के लिए, timescaleआप एक कंटेनर के साथ उसी तरह काम कर सकते हैं जैसे आप डेटाबेस के साथ काम करते हैं। अर्थात्, यह आपको निम्नलिखित क्रियाएं करने की अनुमति देता है:

  • लॉग इन पोस्टग्रेज शेल।
  • आयात और निर्यात तालिकाएँ।
  • एक pg_dumpतालिका या डेटाबेस बनाएँ

Express.js एप्लिकेशन के कंटेनर में expressjsनिम्नलिखित विशेषताएं हो सकती हैं:

  • सिस्टम लॉग से ताजा डेटा का आउटपुट।
  • कुछ आदेशों को निष्पादित करने के लिए शेल दर्ज करें।

कंटेनर इंटरेक्शन


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

इस विकल्प की क्षमताओं का उपयोग करके, आप सिस्टम के साथ बातचीत को केवल उन कंटेनरों तक सीमित कर सकते हैं जो फ़ाइल में उल्लिखित हैं docker-compose.yml

आदेशों का उपयोग करते समय कंटेनर इंटरैक्शन कैसे दिखते हैं, इस पर एक नज़र डालें docker-composeयदि हम कल्पना करते हैं कि हमें शेल में प्रवेश करने की आवश्यकता है psql, तो संबंधित आदेश इस तरह दिख सकते हैं:

docker-compose -f docker-compose.yml exec timescale psql -Upostgres

एक ही आदेश जिसके लिए नहीं docker-compose, लेकिन उपयोग किया जाता है docker, इस तरह दिख सकता है:

docker exec -it  edp_timescale_1 psql -Upostgres

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

उपरोक्त दोनों आदेश इतने जटिल नहीं हैं। लेकिन अगर हम "रैपर" का इस्तेमाल उस रूप में करते हैं Makefileजो हमें सरल कमांड के रूप में एक इंटरफ़ेस देगा और खुद को ऐसे लंबे कमांड को कॉल करेगा, तो उसी तरह के परिणाम प्राप्त किए जा सकते हैं:

make db-shell

यह स्पष्ट है कि उपयोग Makefileकंटेनर के साथ काम को बहुत सरल करता है!

काम करने का उदाहरण


उपरोक्त प्रोजेक्ट आरेख के आधार पर, निम्न फ़ाइल बनाएं docker-compose.yml:

version: '3.3'
services:
    api:
        build: .
        image: mywebimage:0.0.1
        ports:
            - 8080:8080
        volumes:
            - /app/node_modules/
        depends_on:
            - timescale
        command: npm run dev
        networks:
            - webappnetwork
    timescale:
        image: timescale/timescaledb-postgis:latest-pg11
        environment:
          - POSTGRES_USER=postgres
          - POSTGRES_PASSWORD=postgres
        command: ["postgres", "-c", "log_statement=all", "-c", "log_destination=stderr"]
        volumes:
          - ./create_schema.sql:/docker-entrypoint-initdb.d/create_schema.sql
        networks:
           - webappnetwork
    ping:
       image: willfarrell/ping
       environment:
           HOSTNAME: "localhost"
           TIMEOUT: 300
networks:
   webappnetwork:
       driver: bridge

डॉकर कम्पोज़ कॉन्फ़िगरेशन को प्रबंधित करने के लिए और इसका वर्णन करने वाले कंटेनरों के साथ बातचीत करने के लिए, निम्न फ़ाइल बनाएं Makefile:

THIS_FILE := $(lastword $(MAKEFILE_LIST))
.PHONY: help build up start down destroy stop restart logs logs-api ps login-timescale login-api db-shell
help:
        make -pRrq  -f $(THIS_FILE) : 2>/dev/null | awk -v RS= -F: '/^# File/,/^# Finished Make data base/ {if ($$1 !~ "^[#.]") {print $$1}}' | sort | egrep -v -e '^[^[:alnum:]]' -e '^$@$$'
build:
        docker-compose -f docker-compose.yml build $(c)
up:
        docker-compose -f docker-compose.yml up -d $(c)
start:
        docker-compose -f docker-compose.yml start $(c)
down:
        docker-compose -f docker-compose.yml down $(c)
destroy:
        docker-compose -f docker-compose.yml down -v $(c)
stop:
        docker-compose -f docker-compose.yml stop $(c)
restart:
        docker-compose -f docker-compose.yml stop $(c)
        docker-compose -f docker-compose.yml up -d $(c)
logs:
        docker-compose -f docker-compose.yml logs --tail=100 -f $(c)
logs-api:
        docker-compose -f docker-compose.yml logs --tail=100 -f api
ps:
        docker-compose -f docker-compose.yml ps
login-timescale:
        docker-compose -f docker-compose.yml exec timescale /bin/bash
login-api:
        docker-compose -f docker-compose.yml exec api /bin/bash
db-shell:
        docker-compose -f docker-compose.yml exec timescale psql -Upostgres

यहां वर्णित अधिकांश कमांड सभी कंटेनरों पर लागू होते हैं, लेकिन विकल्प का उपयोग करने c=से आप कमांड के दायरे को एक कंटेनर तक सीमित कर सकते हैं।

एक बार Makefileतैयार होने के बाद, आप इसे इस तरह उपयोग कर सकते हैं:

  • make help- के लिए उपलब्ध सभी आदेशों की एक सूची जारी करना make


उपलब्ध कमांड मदद

  • make build- से छवि की विधानसभा Dockerfileहमारे उदाहरण में, हमने मौजूदा छवियों का उपयोग किया है timescaleऔर pingलेकिन apiहम छवि को स्थानीय रूप से एकत्र करना चाहते हैं। यह वही है जो इस कमांड को निष्पादित करने के बाद किया जाएगा।


डॉकर कंटेनर विधानसभा

  • make start- सभी कंटेनरों का शुभारंभ। केवल एक कंटेनर शुरू करने के लिए, आप फॉर्म की कमांड का उपयोग कर सकते हैं make start c=timescale


टाइमकाले कंटेनर लॉन्च करें


पिंग कंटेनर लॉन्च करें

  • make login-timescale- कंटेनर के बैश सत्र में प्रवेश timescale


टाइमकाले कंटेनर में बैश चल रहा है

  • make db-shell- डेटाबेस में SQL क्वेरी को निष्पादित psqlकरने के लिए कंटेनर में लॉग इन timescaleकरें।


टाइमकालेड कंटेनर में साइकल चलाना

  • make stop - कंटेनरों को रोकना।


टाइस्केल कंटेनर को रोकना

  • make down- कंटेनरों को रोकना और निकालना। एक विशिष्ट कंटेनर को हटाने के लिए, आप निर्दिष्ट कंटेनर के साथ इस कमांड का उपयोग कर सकते हैं। उदाहरण के लिए - make down c=timescaleया make down c=api


सभी कंटेनरों को रोकें और हटाएं

सारांश


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

उपयोग Makefileकी पद्धति ने हमें फ़ाइल से कंटेनरों के साथ त्वरित और आसान बातचीत स्थापित करने में मदद की docker-compose.ymlअर्थात्, हम निम्नलिखित के बारे में बात कर रहे हैं:

  • , docker-compose.yml, .
  • , , make help .
  • , . , docker-compose -f docker-compose.yml exec timescale psql -Upostgres make db-shell.
  • Makefile , , . , .
  • Makefile, .

PS हमारे मार्केटप्लेस में एक Docker इमेज है , जो एक क्लिक में इंस्टॉल हो जाती है। आप वीपीएस पर कंटेनरों के संचालन की जांच कर सकते हैं सभी नए ग्राहकों को परीक्षण के लिए 3 दिन मुफ्त दिए जाते हैं।

प्रिय पाठकों! आप डोकर कंपोज के साथ कैसे काम करते हैं?

Source: https://habr.com/ru/post/undefined/


All Articles