ڈوکر کمپوز: ترقی سے پیداوار تک

کورس کے آغاز کی توقع میں تیار کردہ پوڈ کاسٹ ٹرانسکرپشن کا ترجمہ "لینکس ایڈمنسٹریٹر"

ڈوکر کمپوز: ترقی سے پیداوار تک

ڈوکر کمپوز ورکنگ بنانے کا ایک حیرت انگیز ٹول ہے۔
آپ کی درخواست میں استعمال ہونے والے اسٹیک کے لیے ماحول۔ یہ آپ کو وضاحت کرنے کی اجازت دیتا ہے۔
آپ کی درخواست کا ہر ایک جزو، ایک واضح اور سادہ نحو کے بعد YAML-
فائلوں
.

کی آمد کے ساتھ۔ ڈاکر کمپوز v3 ان YAML فائلوں کو براہ راست پیداواری ماحول میں استعمال کیا جا سکتا ہے جب اس کے ساتھ کام کیا جائے۔
جھرمٹ ڈاکر بھیڑ.

لیکن کیا اس کا مطلب یہ ہے کہ آپ اسی docker-compose فائل کو استعمال کرسکتے ہیں۔
ترقی کے عمل اور پیداوار کے ماحول میں؟ یا اسی فائل کے لیے استعمال کریں۔
مچان ٹھیک ہے، عام طور پر، ہاں، لیکن اس فعالیت کے لیے ہمیں درج ذیل کی ضرورت ہے:

  • متغیر انٹرپولیشن: کچھ کے لیے ماحولیاتی متغیرات کا استعمال
    اقدار جو ہر ماحول میں بدلتی ہیں۔
  • کنفیگریشن اوور رائڈ: سیکنڈ کی وضاحت کرنے کی صلاحیت (یا کوئی
    ایک اور بعد میں) docker-compose فائل جس کے حوالے سے کچھ بدل جائے گا۔
    پہلے، اور docker compose دونوں فائلوں کو ضم کرنے کا خیال رکھے گا۔

ترقی اور پیداوار فائلوں کے درمیان فرق

ڈویلپمنٹ کے دوران، آپ کو کوڈ میں ہونے والی تبدیلیوں کی جانچ کرنا چاہیں گے۔
حقیقی وقت. ایسا کرنے کے لیے، عام طور پر سورس کوڈ کے ساتھ والیوم نصب کیا جاتا ہے۔
کنٹینر جس میں آپ کی درخواست کا رن ٹائم ہوتا ہے۔ لیکن پیداواری ماحول کے لیے
یہ طریقہ مناسب نہیں ہے۔

پیداوار میں، آپ کے پاس بہت سے نوڈس کے ساتھ ایک کلسٹر ہے، اور حجم مقامی ہے۔
اس نوڈ کے نسبت جس پر آپ کا کنٹینر (یا سروس) چل رہا ہے، لہذا آپ ایسا نہیں کرتے
آپ بغیر کسی پیچیدہ آپریشن کے سورس کوڈ کو ماؤنٹ کر سکتے ہیں جس میں شامل ہیں۔
کوڈ سنکرونائزیشن، سگنلز، وغیرہ

اس کے بجائے، ہم عام طور پر آپ کے کوڈ کے مخصوص ورژن کے ساتھ ایک تصویر بنانا چاہتے ہیں۔
اسے مناسب ٹیگ کے ساتھ نشان زد کرنے کا رواج ہے (آپ سیمنٹک استعمال کرسکتے ہیں۔
ورژن بنانا یا آپ کی صوابدید پر کوئی دوسرا سسٹم)۔

کنفیگریشن اوور رائڈ

اختلافات کو دیکھتے ہوئے اور یہ کہ آپ کا انحصار منظرناموں میں مختلف ہو سکتا ہے۔
ترقی اور پیداوار، یہ واضح ہے کہ ہمیں مختلف کنفیگریشن فائلوں کی ضرورت ہوگی۔

ڈوکر کمپوز مختلف کمپوز فائلوں کو ضم کرنے کی حمایت کرتا ہے۔
حتمی ترتیب حاصل کریں. یہ کیسے کام کرتا ہے مثال میں دیکھا جا سکتا ہے:

$ cat docker-compose.yml
version: "3.2"

services:
  whale:
    image: docker/whalesay
    command: ["cowsay", "hello!"]
$ docker-compose up
Creating network "composeconfigs_default" with the default driver
Starting composeconfigs_whale_1
Attaching to composeconfigs_whale_1
whale_1  |  ________
whale_1  | < hello! >
whale_1  |  --------
whale_1  |     
whale_1  |      
whale_1  |       
whale_1  |                     ##        .
whale_1  |               ## ## ##       ==
whale_1  |            ## ## ## ##      ===
whale_1  |        /""""""""""""""""___/ ===
whale_1  |   ~~~ {~~ ~~~~ ~~~ ~~~~ ~~ ~ /  ===- ~~~
whale_1  |        ______ o          __/
whale_1  |                     __/
whale_1  |           __________/
composeconfigs_whale_1 exited with code 0

جیسا کہ کہا گیا ہے، ڈوکر کمپوز متعدد کمپوز کو یکجا کرنے کی حمایت کرتا ہے۔
files، یہ آپ کو دوسری فائل میں مختلف پیرامیٹرز کو اوور رائڈ کرنے کی اجازت دیتا ہے۔ مثال کے طور پر:

$ cat docker-compose.second.yml
version: "3.2"
services:
  whale:
    command: ["cowsay", "bye!"]

$ docker-compose -f docker-compose.yml -f docker-compose.second.yml up
Creating composeconfigs_whale_1
Attaching to composeconfigs_whale_1
whale_1  |  ______
whale_1  | < bye! >
whale_1  |  ------
whale_1  |     
whale_1  |      
whale_1  |       
whale_1  |                     ##        .
whale_1  |               ## ## ##       ==
whale_1  |            ## ## ## ##      ===
whale_1  |        /""""""""""""""""___/ ===
whale_1  |   ~~~ {~~ ~~~~ ~~~ ~~~~ ~~ ~ /  ===- ~~~
whale_1  |        ______ o          __/
whale_1  |                     __/
whale_1  |           __________/
composeconfigs_whale_1 exited with code 0

یہ نحو ترقی کے دوران بہت آسان نہیں ہے، جب کمانڈ
کئی بار کرنے کی ضرورت ہوگی.

خوش قسمتی سے، ڈوکر کمپوز خود بخود ایک خاص فائل کی تلاش کرتا ہے جسے کہا جاتا ہے۔
docker-compose.override.yml اقدار کو اوور رائیڈ کرنے کے لیے docker compose.yml. اگر
دوسری فائل کا نام تبدیل کریں، آپ کو وہی نتیجہ ملتا ہے، صرف اصل کمانڈ کا استعمال کرتے ہوئے:

$ mv docker-compose.second.yml docker-compose.override.yml
$ docker-compose up
Starting composeconfigs_whale_1
Attaching to composeconfigs_whale_1
whale_1  |  ______
whale_1  | < bye! >
whale_1  |  ------
whale_1  |     
whale_1  |      
whale_1  |       
whale_1  |                     ##        .
whale_1  |               ## ## ##       ==
whale_1  |            ## ## ## ##      ===
whale_1  |        /""""""""""""""""___/ ===
whale_1  |   ~~~ {~~ ~~~~ ~~~ ~~~~ ~~ ~ /  ===- ~~~
whale_1  |        ______ o          __/
whale_1  |                     __/
whale_1  |           __________/
composeconfigs_whale_1 exited with code 0

ٹھیک ہے، یہ یاد رکھنا آسان ہے۔

متغیرات کا انٹرپولیشن

کنفیگریشن فائل سپورٹ انٹرپولیشن
متغیر
اور پہلے سے طے شدہ اقدار۔ یعنی آپ درج ذیل کام کر سکتے ہیں۔

services:
  my-service:
    build:
      context: .
    image: private.registry.mine/my-stack/my-service:${MY_SERVICE_VERSION:-latest}
...

اور اگر آپ کرتے ہیں ڈوکر کمپوز بلڈ (یا پش) ماحولیاتی متغیر کے بغیر
$MY_SERVICE_VERSION، قدر استعمال کی جائے گی۔ تازہ ترینلیکن اگر آپ سیٹ کرتے ہیں۔
تعمیر سے پہلے ماحولیاتی متغیر کی قدر، یہ تعمیر یا دھکیلتے وقت استعمال کی جائے گی۔
رجسٹر کرنے کے لئے private.registry.mine.

میرے اصول

میرے لیے کام کرنے والے طریقے آپ کے لیے بھی کام کر سکتے ہیں۔ میں ان کی پیروی کرتا ہوں۔
سادہ اصول:

  • پروڈکشن، ڈویلپمنٹ (یا دوسرے ماحول) کے لیے میرے تمام اسٹیک کی وضاحت کی گئی ہے۔
    docker-compose فائلیں
  • میرے تمام ماحول کو زیادہ سے زیادہ احاطہ کرنے کے لیے کنفیگریشن فائلوں کی ضرورت ہے۔
    نقل سے بچیں.
  • مجھے ہر ماحول میں کام کرنے کے لیے ایک سادہ کمانڈ کی ضرورت ہے۔
  • بنیادی ترتیب فائل میں بیان کی گئی ہے۔ docker compose.yml.
  • ماحولیاتی متغیرات کو تصویری ٹیگز یا دیگر کی وضاحت کے لیے استعمال کیا جاتا ہے۔
    متغیرات جو ماحول سے دوسرے ماحول میں مختلف ہو سکتے ہیں (اسٹیجنگ، انضمام،
    پیداوار)۔
  • پیداواری متغیرات کی قدریں بطور قدر استعمال ہوتی ہیں۔
    پہلے سے طے شدہ طور پر، اگر اسٹیک کو بغیر پروڈکشن میں شروع کیا جاتا ہے تو یہ خطرات کو کم کرتا ہے۔
    ماحولیاتی متغیر مقرر کریں.
  • پیداواری ماحول میں سروس شروع کرنے کے لیے، کمانڈ استعمال کریں۔ docker stack deploy - compose-file docker-compose.yml -with-registry-auth my-stack-name.
  • کام کا ماحول کمانڈ کا استعمال کرتے ہوئے شروع کیا جاتا ہے۔ docker comp-d.

آئیے ایک سادہ سی مثال دیکھتے ہیں۔

# docker-compose.yml
...
services:
  my-service:
    build:
      context: .
    image: private.registry.mine/my-stack/my-service:${MY_SERVICE_VERSION:-latest}
    environment:
      API_ENDPOINT: ${API_ENDPOINT:-https://production.my-api.com}
...

И

# docker-compose.override.yml
...
services:
  my-service:
    ports: # This is needed for development!
      - 80:80
    environment:
      API_ENDPOINT: https://devel.my-api.com
    volumes:
      - ./:/project/src
...

میں استعمال کر سکتا ہوں۔ docker-compose (docker-compose up)اسٹیک کو چلانے کے لیے
ڈویلپمنٹ موڈ جس میں سورس کوڈ نصب ہے۔ /project/src.

میں ان ہی فائلوں کو پروڈکشن میں استعمال کر سکتا ہوں! اور میں یقینی طور پر استعمال کرسکتا ہوں۔
ایک ہی فائل docker compose.yml سٹیجنگ کے لئے. اس کو وسعت دینے کے لیے
پروڈکشن، مجھے صرف پہلے سے طے شدہ ٹیگ کے ساتھ تصویر بنانے اور بھیجنے کی ضرورت ہے۔
CI مرحلے میں:

export MY_SERVICE_VERSION=1.2.3
docker-compose -f docker-compose.yml build
docker-compose -f docker-compose.yml push

پیداوار میں، یہ مندرجہ ذیل کمانڈز کا استعمال کرتے ہوئے چلایا جا سکتا ہے:

export MY_SERVICE_VERSION=1.2.3
docker stack deploy my-stack --compose-file docker-compose.yml --with-registry-auth

اور اگر آپ اسٹیج پر بھی ایسا ہی کرنا چاہتے ہیں تو آپ کو صرف وضاحت کرنے کی ضرورت ہے۔
سٹیجنگ ماحول میں کام کرنے کے لیے ضروری ماحولیاتی متغیرات:

export MY_SERVICE_VERSION=1.2.3
export API_ENDPOINT=http://staging.my-api.com
docker stack deploy my-stack --compose-file docker-compose.yml --with-registry-auth

نتیجے کے طور پر، ہم نے دو مختلف ڈوکر کمپوز فائلوں کا استعمال کیا، جس کے بغیر
آپ کے پاس موجود کسی بھی ماحول کے لیے ڈپلیکیٹ کنفیگریشنز استعمال کی جا سکتی ہیں!

کورس کے بارے میں مزید معلومات حاصل کریں۔ "لینکس ایڈمنسٹریٹر"

ماخذ: www.habr.com

نیا تبصرہ شامل کریں