Kubernetes ٹیوٹوریل حصہ 1: ایپلی کیشنز، مائیکرو سروسز، اور کنٹینرز

ہماری درخواست پر حبر نے ایک مرکز بنایا Kubernetes اور ہمیں اس میں پہلی اشاعت رکھنے پر خوشی ہے۔ سبسکرائب!

Kubernetes آسان ہے. بینک مجھے اس شعبے میں کام کرنے کے لیے بہت زیادہ پیسے کیوں دیتے ہیں، جب کہ کوئی بھی اس ٹیکنالوجی میں صرف چند گھنٹوں میں مہارت حاصل کر سکتا ہے؟

Kubernetes ٹیوٹوریل حصہ 1: ایپلی کیشنز، مائیکرو سروسز، اور کنٹینرز

اگر آپ کو شک ہے کہ کبرنیٹس کو اتنی جلدی سیکھا جا سکتا ہے، تو میرا مشورہ ہے کہ آپ اسے خود آزمائیں۔ یعنی، اس مواد میں مہارت حاصل کرنے کے بعد، آپ کوبرنیٹس کلسٹر میں مائیکرو سروسز پر مبنی ایپلیکیشن چلا سکیں گے۔ میں اس کی ضمانت دے سکتا ہوں، کیونکہ یہاں بالکل وہی طریقہ استعمال کیا جاتا ہے جو میں اپنے کلائنٹس کو Kubernetes کے ساتھ کام کرنا سکھاتا ہوں۔ کیا چیز اس گائیڈ کو دوسروں سے مختلف بناتی ہے؟ اصل میں، بہت سی چیزیں ہیں. لہذا، ان میں سے زیادہ تر مواد سادہ چیزوں کی وضاحت کے ساتھ شروع ہوتا ہے - Kubernetes کے تصورات اور kubectl کمانڈ کی خصوصیات۔ ان مواد کے مصنفین فرض کرتے ہیں کہ ان کے قارئین ایپلیکیشن ڈویلپمنٹ، مائیکرو سروسز، اور ڈوکر کنٹینرز سے واقف ہیں۔ ہم دوسری طرف جائیں گے۔ سب سے پہلے، ہم اس بارے میں بات کریں گے کہ کمپیوٹر پر مائیکرو سروسز کی بنیاد پر ایپلیکیشن کیسے چلائی جائے۔ پھر ہم ہر مائیکرو سروس کے لیے کنٹینر کی تصاویر بنانے پر غور کریں گے۔ اور اس کے بعد، ہم Kubernetes سے واقف ہوں گے اور Kubernetes کے زیر انتظام کلسٹر میں مائیکرو سروسز پر مبنی ایپلیکیشن کی تعیناتی کو دیکھیں گے۔

یہ نقطہ نظر، Kubernetes کے لیے بتدریج نقطہ نظر کے ساتھ، اس بات کو سمجھنے کی گہرائی فراہم کرے گا کہ کیا ہو رہا ہے جو کہ اوسط فرد کے لیے ضروری ہے یہ سمجھنے کے لیے کہ Kubernetes میں سب کچھ کیسے کام کرتا ہے۔ Kubernetes یقینی طور پر ایک سادہ ٹیکنالوجی ہے، بشرطیکہ جو لوگ اسے سیکھنا چاہتے ہیں وہ جانتے ہوں کہ اسے کہاں اور کیسے استعمال کیا جاتا ہے۔

اب، مزید اڈو کے بغیر، آئیے شروع کریں اور اس ایپلی کیشن کے بارے میں بات کریں جس کے ساتھ ہم کام کریں گے۔

تجرباتی درخواست

ہماری درخواست صرف ایک فنکشن انجام دے گی۔ یہ ایک جملے کو بطور ان پٹ لیتا ہے، جس کے بعد، متن کے تجزیہ کے ٹولز کا استعمال کرتے ہوئے، یہ اس جملے کا جذباتی تجزیہ کرتا ہے، جس سے کسی خاص چیز کے لیے جملے کے مصنف کے جذباتی رویے کا اندازہ ہوتا ہے۔

اس ایپلی کیشن کی مین ونڈو اس طرح دکھتی ہے۔

Kubernetes ٹیوٹوریل حصہ 1: ایپلی کیشنز، مائیکرو سروسز، اور کنٹینرز
متن کے جذباتی تجزیہ کے لیے ویب ایپلیکیشن

تکنیکی نقطہ نظر سے، ایپلی کیشن تین مائیکرو سروسز پر مشتمل ہے، جن میں سے ہر ایک مخصوص مسائل کو حل کرتی ہے:

  • SA-Frontend ایک Nginx ویب سرور ہے جو جامد رد عمل فائلوں کو پیش کرتا ہے۔
  • SA-WebApp جاوا میں لکھی گئی ایک ویب ایپلیکیشن ہے جو فرنٹ اینڈ سے درخواستوں پر کارروائی کرتی ہے۔
  • SA-Logic ایک Python ایپلی کیشن ہے جو متن پر جذبات کا تجزیہ کرتی ہے۔

یہ نوٹ کرنا ضروری ہے کہ مائیکرو سروسز تنہائی میں موجود نہیں ہیں۔ وہ "ذمہ داریوں کی علیحدگی" کے خیال کو نافذ کرتے ہیں، لیکن ساتھ ہی انہیں ایک دوسرے کے ساتھ بات چیت کرنے کی بھی ضرورت ہے۔

Kubernetes ٹیوٹوریل حصہ 1: ایپلی کیشنز، مائیکرو سروسز، اور کنٹینرز
درخواست میں ڈیٹا بہاؤ

اوپر دیے گئے خاکے میں، آپ سسٹم کے نمبر والے مراحل دیکھ سکتے ہیں، جو ایپلیکیشن میں ڈیٹا کے بہاؤ کو واضح کرتے ہیں۔ آئیے ان کو دیکھتے ہیں:

  1. براؤزر سرور سے فائل کی درخواست کرتا ہے۔ index.html (جو بدلے میں، React ایپلیکیشن پیکج کو ڈاؤن لوڈ کرتا ہے)۔
  2. صارف ایپلیکیشن کے ساتھ بات چیت کرتا ہے، اس کی وجہ سے بہار پر مبنی ویب ایپلیکیشن کو کال کی جاتی ہے۔
  3. ویب ایپلیکیشن متن کا تجزیہ کرنے کی درخواست کو Python ایپلیکیشن کو بھیجتی ہے۔
  4. Python ایپلیکیشن متن کا جذباتی تجزیہ کرتی ہے اور درخواست کے جواب کے طور پر نتیجہ واپس کرتی ہے۔
  5. اسپرنگ ایپلیکیشن React ایپلیکیشن کا جواب بھیجتی ہے (جو بدلے میں، صارف کو متن کے تجزیے کا نتیجہ دکھاتی ہے)۔

ان تمام ایپلی کیشنز کا کوڈ مل سکتا ہے۔ یہاں. میں تجویز کرتا ہوں کہ آپ ابھی اس ذخیرہ کو اپنے لیے کاپی کر لیں، کیونکہ ہمارے سامنے اس کے ساتھ بہت سے دلچسپ تجربات ہیں۔

اپنی مقامی مشین پر مائیکرو سروسز پر مبنی ایپلیکیشن چلانا

درخواست کے کام کرنے کے لیے، ہمیں تینوں مائیکرو سروسز شروع کرنے کی ضرورت ہے۔ آئیے ان سب میں سے سب سے خوبصورت کے ساتھ شروع کریں - فرنٹ اینڈ ایپلی کیشن۔

▍مقامی ترقی کے لیے رد عمل مرتب کریں۔

React ایپلیکیشن چلانے کے لیے، آپ کو اپنے کمپیوٹر پر Node.js پلیٹ فارم اور NPM انسٹال کرنا ہوگا۔ ایک بار جب آپ یہ سب انسٹال کر لیں تو اپنے پروجیکٹ فولڈر میں جانے کے لیے ٹرمینل کا استعمال کریں۔ sa-frontend اور درج ذیل کمانڈ کو چلائیں:

npm install

فولڈر میں اس کمانڈ کو چلانے سے node_modules React ایپلیکیشن کی انحصار لوڈ کی جائے گی، جس کے ریکارڈ فائل میں موجود ہیں۔ package.json. ایک بار جب انحصار اسی فولڈر میں ڈاؤن لوڈ ہوجائے تو درج ذیل کمانڈ کو چلائیں:

npm start

بس۔ اب React ایپلی کیشن چل رہی ہے، آپ اپنے براؤزر میں درج ذیل ایڈریس پر جا کر اس تک رسائی حاصل کر سکتے ہیں۔ localhost:3000. آپ اس کے کوڈ میں کچھ تبدیل کر سکتے ہیں۔ آپ براؤزر میں ان تبدیلیوں کا اثر فوری طور پر دیکھیں گے۔ یہ ماڈیولز کے نام نہاد "گرم" متبادل کی بدولت ممکن ہے۔ یہ فرنٹ اینڈ ڈیولپمنٹ کو ایک سادہ اور پرلطف تجربہ بناتا ہے۔

▍ پیداوار کے لیے ری ایکٹ ایپلی کیشن کی تیاری

ری ایکٹ ایپلیکیشن کو اصل میں استعمال کرنے کے مقصد کے لیے، ہمیں اسے جامد فائلوں کے سیٹ میں تبدیل کرنے اور ویب سرور کا استعمال کرتے ہوئے کلائنٹس کو پیش کرنے کی ضرورت ہے۔

React ایپلیکیشن بنانے کے لیے، دوبارہ ٹرمینل کا استعمال کرتے ہوئے، فولڈر پر جائیں۔ sa-frontend اور درج ذیل کمانڈ کو چلائیں:

npm run build

یہ پروجیکٹ فولڈر میں ایک ڈائرکٹری بنائے گا۔ build. اس میں تمام سٹیٹک فائلیں ہوں گی جو React ایپلیکیشن کے کام کرنے کے لیے ضروری ہیں۔

▍ Nginx کا استعمال کرتے ہوئے جامد فائلوں کی خدمت کرنا

پہلے آپ کو Nginx ویب سرور انسٹال اور چلانے کی ضرورت ہے۔ یہاں آپ اسے ڈاؤن لوڈ کر سکتے ہیں اور اسے انسٹال کرنے اور چلانے کے بارے میں ہدایات حاصل کر سکتے ہیں۔ پھر آپ کو فولڈر کے مواد کو کاپی کرنے کی ضرورت ہے۔ sa-frontend/build فولڈر میں [your_nginx_installation_dir]/html.

اس اپروچ کے ساتھ، ری ایکٹ ایپلیکیشن کی تعمیر کے عمل کے دوران فائل تیار ہوتی ہے۔ index.html پر دستیاب ہوگا۔ [your_nginx_installation_dir]/html/index.html. یہ وہ فائل ہے جو بطور ڈیفالٹ، Nginx سرور اس تک رسائی حاصل کرتے وقت تیار کرتا ہے۔ سرور کو پورٹ پر سننے کے لیے ترتیب دیا گیا ہے۔ 80، لیکن فائل میں ترمیم کرکے اسے اپنی ضرورت کے مطابق بنایا جاسکتا ہے۔ [your_nginx_installation_dir]/conf/nginx.conf.

اب اپنا براؤزر کھولیں اور پر جائیں۔ localhost:80. آپ React درخواست کا صفحہ دیکھیں گے۔

Kubernetes ٹیوٹوریل حصہ 1: ایپلی کیشنز، مائیکرو سروسز، اور کنٹینرز
Nginx سرور کے ذریعہ پیش کردہ ری ایکٹ ایپلی کیشن

اگر آپ اب میدان میں کچھ داخل کرتے ہیں۔ Type your sentence اور بٹن دبائیں Send - کچھ نہیں ہوگا. لیکن، اگر آپ کنسول پر نظر ڈالتے ہیں، تو آپ وہاں غلطی کے پیغامات دیکھ سکتے ہیں۔ یہ سمجھنے کے لیے کہ یہ غلطیاں کہاں ہوتی ہیں، آئیے ایپلیکیشن کوڈ کا تجزیہ کرتے ہیں۔

▍ فرنٹ اینڈ ایپلیکیشن کوڈ کا تجزیہ

فائل کوڈ پر ایک نظر ڈالنا App.js، ہم اسے بٹن دبانے سے دیکھ سکتے ہیں۔ Send ایک طریقہ کہتا ہے۔ analyzeSentence(). اس طریقہ کار کا کوڈ ذیل میں دیا گیا ہے۔ براہ کرم نوٹ کریں کہ ہر ایک لائن کے لیے جس میں فارم کا تبصرہ ہے۔ # Номер، کوڈ کے نیچے دی گئی ایک وضاحت ہے۔ ہم اسی طرح دوسرے کوڈ کے ٹکڑوں کا تجزیہ کریں گے۔

analyzeSentence() {
    fetch('http://localhost:8080/sentiment', {  // #1
        method: 'POST',
        headers: {
            'Content-Type': 'application/json'
        },
        body: JSON.stringify({
                       sentence: this.textField.getValue()})// #2
    })
        .then(response => response.json())
        .then(data => this.setState(data));  // #3
}

1. وہ URL جس پر POST کی درخواست کی گئی ہے۔ یہ فرض کیا جاتا ہے کہ اس ایڈریس پر ایک درخواست ہے جو اس طرح کی درخواستوں کی توقع کرتی ہے۔

2.درخواست کی باڈی درخواست کو بھیج دی گئی۔ یہاں ایک مثال درخواست کے جسم ہے:

{
    sentence: "I like yogobella!"
}

3.جب کسی درخواست کا جواب موصول ہوتا ہے، تو جزو کی حالت کو اپ ڈیٹ کر دیا جاتا ہے۔ یہ جزو کو دوبارہ پیش کرنے کا سبب بنتا ہے۔ اگر ہمیں ڈیٹا موصول ہوتا ہے (یعنی ایک JSON آبجیکٹ جس میں ان پٹ ڈیٹا اور کیلکولیشن شدہ ٹیکسٹ سکور ہوتا ہے) تو ہم جزو کو آؤٹ پٹ کریں گے۔ Polarity، چونکہ مناسب شرائط کو پورا کیا جائے گا۔ اس طرح ہم جزو کی وضاحت کرتے ہیں:

const polarityComponent = this.state.polarity !== undefined ?
    <Polarity sentence={this.state.sentence} 
              polarity={this.state.polarity}/> :
    null;

ایسا لگتا ہے کہ کوڈ کافی اچھا کام کرتا ہے۔ اس میں کیا حرج ہے، ویسے بھی؟ اگر آپ فرض کریں کہ جس پتے پر درخواست POST کی درخواست بھیجنے کی کوشش کر رہی ہے، وہاں ابھی تک کوئی ایسی چیز نہیں ہے جو اس درخواست کو قبول کر سکے اور اس پر کارروائی کر سکے، تو آپ بالکل درست ہوں گے۔ یعنی، پر موصول ہونے والی درخواستوں پر کارروائی کرنا http://localhost:8080/sentiment، ہمیں بہار کی بنیاد پر ایک ویب ایپلیکیشن چلانے کی ضرورت ہے۔

Kubernetes ٹیوٹوریل حصہ 1: ایپلی کیشنز، مائیکرو سروسز، اور کنٹینرز
ہمیں ایک بہار کی درخواست کی ضرورت ہے جو POST کی درخواست کو قبول کر سکے۔

▍ بہار پر مبنی ویب ایپلیکیشن ترتیب دینا

اسپرنگ ایپلیکیشن کو متعین کرنے کے لیے، آپ کو JDK8 اور Maven اور مناسب طریقے سے ترتیب شدہ ماحولیاتی متغیرات کی ضرورت ہوگی۔ ایک بار جب آپ یہ سب انسٹال کر لیں تو آپ ہمارے پروجیکٹ پر کام جاری رکھ سکتے ہیں۔

▍کسی ایپلیکیشن کو جار فائل میں پیک کرنا

ٹرمینل کا استعمال کرتے ہوئے فولڈر میں جائیں۔ sa-webapp اور درج ذیل کمانڈ درج کریں:

mvn install

فولڈر میں اس کمانڈ کو چلانے کے بعد sa-webapp ایک ڈائریکٹری بنائی جائے گی۔ target. یہ وہ جگہ ہے جہاں جاوا ایپلیکیشن واقع ہوگی، جار فائل میں پیک کی جائے گی، جس کی نمائندگی فائل کے ذریعے کی جائے گی۔ sentiment-analysis-web-0.0.1-SNAPSHOT.jar.

▍جاوا ایپلیکیشن چلانا

فولڈر پر جائیں۔ target اور ایپلیکیشن کو درج ذیل کمانڈ سے چلائیں:

java -jar sentiment-analysis-web-0.0.1-SNAPSHOT.jar

اس کمانڈ پر عمل کرتے وقت ایک خرابی واقع ہوگی۔ اسے ٹھیک کرنا شروع کرنے کے لیے، ہم اسٹیک ٹریس ڈیٹا میں استثنیٰ کی تفصیلات کا تجزیہ کر سکتے ہیں:

Error creating bean with name 'sentimentController': Injection of autowired dependencies failed; nested exception is java.lang.IllegalArgumentException: Could not resolve placeholder 'sa.logic.api.url' in value "${sa.logic.api.url}"

ہمارے لیے یہاں سب سے اہم چیز معنی کو واضح کرنے کے ناممکنات کا ذکر ہے۔ sa.logic.api.url. آئیے اس کوڈ کا تجزیہ کرتے ہیں جس میں غلطی ہوتی ہے۔

▍جاوا ایپلیکیشن کوڈ کا تجزیہ

یہاں کوڈ کا ٹکڑا ہے جہاں غلطی ہوتی ہے۔

@CrossOrigin(origins = "*")
@RestController
public class SentimentController {
    @Value("${sa.logic.api.url}")    // #1
    private String saLogicApiUrl;
    @PostMapping("/sentiment")
    public SentimentDto sentimentAnalysis(
        @RequestBody SentenceDto sentenceDto) 
    {
        RestTemplate restTemplate = new RestTemplate();
        return restTemplate.postForEntity(
                saLogicApiUrl + "/analyse/sentiment",    // #2
                sentenceDto, SentimentDto.class)
                .getBody();
    }
}

  1. ایس میںentimentController ایک میدان ہے saLogicApiUrl. اس کی قیمت پراپرٹی کے ذریعہ بتائی گئی ہے۔ sa.logic.api.url.
  2. سٹرنگ saLogicApiUrl قدر کے ساتھ جوڑتا ہے۔ /analyse/sentiment. وہ مل کر مائیکرو سرویس کو کال کرنے کے لیے ایڈریس بناتے ہیں جو ٹیکسٹ کا تجزیہ کرتی ہے۔

▍پراپرٹی ویلیو سیٹ کریں۔

بہار میں، جائیداد کی قدروں کا معیاری ذریعہ ایک فائل ہے۔ application.properties، جس پر پایا جاسکتا ہے۔ sa-webapp/src/main/resources. لیکن اس کا استعمال جائیداد کی قدروں کو متعین کرنے کا واحد طریقہ نہیں ہے۔ یہ مندرجہ ذیل کمانڈ کا استعمال کرتے ہوئے بھی کیا جا سکتا ہے:

java -jar sentiment-analysis-web-0.0.1-SNAPSHOT.jar --sa.logic.api.url=WHAT.IS.THE.SA.LOGIC.API.URL

اس پراپرٹی کی قیمت ہماری Python ایپلیکیشن کے پتے کی طرف اشارہ کرنی چاہیے۔

اسے ترتیب دے کر، ہم اسپرنگ ویب ایپلیکیشن کو بتاتے ہیں کہ متن کے تجزیہ کی درخواستوں کو انجام دینے کے لیے اسے کہاں جانا ہے۔

ہماری زندگی کو پیچیدہ نہ کرنے کے لیے، ہم فیصلہ کریں گے کہ Python ایپلیکیشن یہاں دستیاب ہوگی۔ localhost:5000 اور آئیے اس کے بارے میں نہ بھولنے کی کوشش کریں۔ نتیجے کے طور پر، اسپرنگ ایپلیکیشن کو لانچ کرنے کی کمانڈ اس طرح نظر آئے گی:

java -jar sentiment-analysis-web-0.0.1-SNAPSHOT.jar --sa.logic.api.url=http://localhost:5000

Kubernetes ٹیوٹوریل حصہ 1: ایپلی کیشنز، مائیکرو سروسز، اور کنٹینرز
ہمارے سسٹم میں ایک Python ایپلیکیشن غائب ہے۔

اب ہمیں صرف Python ایپلی کیشن کو چلانا ہے اور سسٹم توقع کے مطابق کام کرے گا۔

▍ ایک ازگر ایپلیکیشن ترتیب دینا

Python ایپلیکیشن چلانے کے لیے، آپ کے پاس Python 3 اور Pip انسٹال ہونا ضروری ہے، اور مناسب ماحول کے متغیرات کو صحیح طریقے سے سیٹ کرنا چاہیے۔

▍انسٹال کرنا انحصار

اپنے پروجیکٹ فولڈر میں جائیں۔ sa-logic/sa اور درج ذیل کمانڈز چلائیں:

python -m pip install -r requirements.txt
python -m textblob.download_corpora

▍ ایپلیکیشن لانچ کریں۔

انحصار کو انسٹال کرنے کے بعد، ہم ایپلیکیشن چلانے کے لیے تیار ہیں:

python sentiment_analysis.py

اس کمانڈ کو چلانے کے بعد ہمیں درج ذیل بتایا جائے گا۔

* Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)

اس کا مطلب ہے کہ ایپلیکیشن چل رہی ہے اور درخواستوں کا انتظار کر رہی ہے۔ localhost:5000/

▍ کوڈ ریسرچ

آئیے یہ سمجھنے کے لیے Python ایپلیکیشن کوڈ کو دیکھیں کہ یہ درخواستوں کا کیا جواب دیتا ہے:

from textblob import TextBlob
from flask import Flask, request, jsonify
app = Flask(__name__)                                   #1
@app.route("/analyse/sentiment", methods=['POST'])      #2
def analyse_sentiment():
    sentence = request.get_json()['sentence']           #3
    polarity = TextBlob(sentence).sentences[0].polarity #4
    return jsonify(                                     #5
        sentence=sentence,
        polarity=polarity
    )
if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000)                #6

  1. کسی چیز کو شروع کرنا Flask.
  2. POST کی درخواستوں کو انجام دینے کے لیے ایک پتہ بتانا۔
  3. جائیداد کی بازیافت sentence درخواست کے جسم سے.
  4. ایک گمنام آبجیکٹ شروع کرنا TextBlob اور قدر حاصل کرنا polarity درخواست کے باڈی میں موصول ہونے والے پہلے جملے کے لیے (ہمارے معاملے میں، یہ واحد جملہ ہے جسے تجزیہ کے لیے بھیجا گیا ہے)۔
  5. ایک جواب واپس کرنا جس کے جسم میں جملے کا متن اور اس کے لیے حسابی اشارے شامل ہوں۔ polarity.
  6. ایک فلاسک ایپلیکیشن لانچ کریں، جو یہاں دستیاب ہوگی۔ 0.0.0.0:5000 (آپ فارم کی تعمیر کا استعمال کرکے بھی اس تک رسائی حاصل کرسکتے ہیں۔ localhost:5000).

ایپلی کیشن بنانے والی مائیکرو سروسز اب چل رہی ہیں۔ وہ ایک دوسرے کے ساتھ بات چیت کرنے کے لئے تیار ہیں. کام کے اس مرحلے پر ایپلیکیشن کا خاکہ ایسا ہی لگتا ہے۔

Kubernetes ٹیوٹوریل حصہ 1: ایپلی کیشنز، مائیکرو سروسز، اور کنٹینرز
تمام مائیکرو سروسز جو ایپلیکیشن بناتی ہیں انہیں ورکنگ آرڈر میں لایا جاتا ہے۔

اب، جاری رکھنے سے پہلے، براؤزر میں اپنی React ایپلیکیشن کھولیں اور اس کے ساتھ کچھ جملے پارس کرنے کی کوشش کریں۔ اگر سب کچھ صحیح طریقے سے کیا جاتا ہے - بٹن دبانے کے بعد Send آپ ٹیکسٹ فیلڈ کے نیچے تجزیہ کے نتائج دیکھیں گے۔

اگلے حصے میں، ہم اس بارے میں بات کریں گے کہ اپنی مائیکرو سروسز کو ڈوکر کنٹینرز میں کیسے چلایا جائے۔ Kubernetes کلسٹر پر چلنے کے لیے ایپلیکیشن تیار کرنے کے لیے یہ ضروری ہے۔

ڈوکر کنٹینرز

Kubernetes کنٹینرائزڈ ایپلی کیشنز کی تعیناتی، اسکیلنگ اور انتظام کو خودکار کرنے کا ایک نظام ہے۔ اسے "کنٹینر آرکیسٹریٹر" بھی کہا جاتا ہے۔ اگر Kubernetes کنٹینرز کے ساتھ کام کرتا ہے، تو اس سسٹم کو استعمال کرنے سے پہلے ہمیں پہلے ان کنٹینرز کو حاصل کرنا چاہیے۔ لیکن پہلے، آئیے بات کرتے ہیں کہ کنٹینرز کیا ہیں۔ یہ کیا ہے اس سوال کا شاید بہترین جواب اس میں مل سکتا ہے۔ دستاویزات ڈاکر کو:

کنٹینر امیج ایک ہلکا پھلکا، خود ساختہ، قابل عمل پیکیج ہے جس میں ایک ایپلیکیشن ہے، جس میں اسے چلانے کے لیے ضروری ہر چیز شامل ہے: ایپلیکیشن کوڈ، ایگزیکیوشن ماحول، سسٹم ٹولز اور لائبریریاں، سیٹنگز۔ کنٹینرائزڈ پروگراموں کو لینکس اور ونڈوز ماحول میں استعمال کیا جا سکتا ہے، اور وہ بنیادی ڈھانچے سے قطع نظر ہمیشہ یکساں کام کریں گے۔

اس کا مطلب ہے کہ کنٹینرز کسی بھی کمپیوٹر پر چلائے جا سکتے ہیں، بشمول پروڈکشن سرورز، اور ان میں موجود ایپلی کیشنز کسی بھی ماحول میں یکساں کام کریں گی۔

کنٹینرز کی خصوصیات کو دریافت کرنے اور ایپلی کیشنز کو چلانے کے دوسرے طریقوں سے ان کا موازنہ کرنے کے لیے، آئیے ایک ورچوئل مشین اور کنٹینر کا استعمال کرتے ہوئے React ایپلیکیشن کو پیش کرنے کی ایک مثال دیکھیں۔

▍ ورچوئل مشین کا استعمال کرتے ہوئے ری ایکٹ ایپلی کیشن کی جامد فائلوں کو پیش کرنا

ورچوئل مشینوں کا استعمال کرتے ہوئے جامد فائلوں کی خدمت کو منظم کرنے کی کوشش کرتے ہوئے، ہمیں درج ذیل نقصانات کا سامنا کرنا پڑے گا:

  1. وسائل کا غیر موثر استعمال، کیونکہ ہر ورچوئل مشین ایک مکمل آپریٹنگ سسٹم ہے۔
  2. پلیٹ فارم پر انحصار۔ جو کچھ مقامی کمپیوٹر پر کام کرتا ہے وہ پروڈکشن سرور پر کام نہیں کر سکتا۔
  3. ورچوئل مشین پر مبنی حل کی سست اور وسائل سے متعلق اسکیلنگ۔

Kubernetes ٹیوٹوریل حصہ 1: ایپلی کیشنز، مائیکرو سروسز، اور کنٹینرز
Nginx ویب سرور ایک ورچوئل مشین پر چلنے والی جامد فائلوں کی خدمت کرتا ہے۔

اگر اسی طرح کے مسئلے کو حل کرنے کے لیے کنٹینرز کا استعمال کیا جاتا ہے، تو ورچوئل مشینوں کے مقابلے میں، درج ذیل طاقتوں کو نوٹ کیا جا سکتا ہے۔

  1. وسائل کا موثر استعمال: Docker کا استعمال کرتے ہوئے آپریٹنگ سسٹم کے ساتھ کام کرنا۔
  2. پلیٹ فارم آزاد۔ ایک کنٹینر جسے ایک ڈویلپر اپنے کمپیوٹر پر چلا سکتا ہے کہیں بھی کام کرے گا۔
  3. تصویری تہوں کے استعمال کے ذریعے ہلکا پھلکا تعیناتی۔

Kubernetes ٹیوٹوریل حصہ 1: ایپلی کیشنز، مائیکرو سروسز، اور کنٹینرز
Nginx ویب سرور ایک کنٹینر میں چلنے والی جامد فائلوں کی خدمت کرتا ہے۔

ہم نے صرف چند نکات پر ورچوئل مشینوں اور کنٹینرز کا موازنہ کیا، لیکن یہ بھی کنٹینرز کی طاقت کا احساس دلانے کے لیے کافی ہے۔ یہاں آپ Docker کنٹینرز کے بارے میں تفصیلات حاصل کر سکتے ہیں۔

▍ React ایپلیکیشن کے لیے کنٹینر کی تصویر بنانا

ڈوکر کنٹینر کا بنیادی بلڈنگ بلاک فائل ہے۔ Dockerfile. اس فائل کے شروع میں، کنٹینر کی بنیادی تصویر سے ایک ریکارڈ بنایا جاتا ہے، پھر ہدایات کا ایک سلسلہ ہوتا ہے جس میں بتایا جاتا ہے کہ ایک کنٹینر کیسے بنایا جائے جو کسی خاص ایپلی کیشن کی ضروریات کو پورا کرے۔

اس سے پہلے کہ ہم فائل کے ساتھ کام شروع کریں۔ Dockerfile، آئیے یاد رکھیں کہ ہم نے Nginx سرور پر اپ لوڈ کرنے کے لیے React ایپلیکیشن فائلوں کو تیار کرنے کے لیے کیا کیا:

  1. ری ایکٹ ایپلیکیشن پیکج بنانا (npm run build).
  2. Nginx سرور شروع کرنا۔
  3. ڈائرکٹری کے مواد کو کاپی کرنا build پروجیکٹ فولڈر سے sa-frontend سرور فولڈر میں nginx/html.

ذیل میں آپ کنٹینر بنانے اور آپ کے مقامی کمپیوٹر پر کیے گئے مندرجہ بالا اقدامات کے درمیان مماثلتیں دیکھ سکتے ہیں۔

▍ SA-Frontend ایپلیکیشن کے لیے Dockerfile کی تیاری

وہ ہدایات جو اس میں درج ہوں گی۔ Dockerfile درخواست کے لئے SA-Frontend، صرف دو ٹیموں پر مشتمل ہے۔ حقیقت یہ ہے کہ Nginx ترقیاتی ٹیم نے ایک بنیادی تیار کیا ہے تصویر Nginx کے لیے، جسے ہم اپنی تصویر بنانے کے لیے استعمال کریں گے۔ یہ دو مراحل ہیں جن کی ہمیں وضاحت کرنے کی ضرورت ہے:

  1. تصویر کی بنیاد Nginx امیج ہونی چاہیے۔
  2. فولڈر کے مشمولات sa-frontend/build تصویر کے فولڈر میں کاپی کرنے کی ضرورت ہے۔ nginx/html.

اگر آپ اس تفصیل سے فائل کی طرف جاتے ہیں۔ Dockerfile، پھر یہ اس طرح نظر آئے گا:

FROM nginx
COPY build /usr/share/nginx/html

جیسا کہ آپ دیکھ سکتے ہیں، یہاں سب کچھ بہت آسان ہے، اور فائل کے مندرجات بھی کافی پڑھنے کے قابل اور قابل فہم ہوتے ہیں۔ یہ فائل سسٹم کو تصویر لینے کو کہتی ہے۔ nginx اس میں پہلے سے موجود ہر چیز کے ساتھ، اور ڈائریکٹری کے مواد کو کاپی کریں۔ build ڈائریکٹری میں nginx/html.

یہاں آپ کے ذہن میں یہ سوال ہو سکتا ہے کہ میں کیسے جانتا ہوں کہ آپ کو فولڈر سے فائلیں کہاں کاپی کرنے کی ضرورت ہے۔ build، یعنی جہاں سے راستہ آیا ہے۔ /usr/share/nginx/html. حقیقت میں، یہاں بھی کچھ بھی پیچیدہ نہیں ہے. حقیقت یہ ہے کہ متعلقہ معلومات میں پایا جا سکتا ہے تفصیل تصویر.

▍تصویر بنانا اور اسے ذخیرہ میں اپ لوڈ کرنا

اس سے پہلے کہ ہم تیار شدہ تصویر کے ساتھ کام کر سکیں، ہمیں اسے امیج ریپوزٹری میں دھکیلنا ہوگا۔ ایسا کرنے کے لیے، ہم مفت کلاؤڈ امیج ہوسٹنگ پلیٹ فارم Docker Hub استعمال کریں گے۔ کام کے اس مرحلے پر آپ کو درج ذیل کام کرنے کی ضرورت ہے:

  1. انسٹال کریں۔ میں Docker.
  2. Docker Hub ویب سائٹ پر رجسٹر ہوں۔
  3. ٹرمینل میں درج ذیل کمانڈ کو چلا کر اپنے اکاؤنٹ میں لاگ ان کریں:
    docker login -u="$DOCKER_USERNAME" -p="$DOCKER_PASSWORD"

اب آپ کو ڈائریکٹری میں جانے کے لیے ٹرمینل استعمال کرنے کی ضرورت ہے۔ sa-frontend اور وہاں درج ذیل کمانڈ چلائیں:

docker build -f Dockerfile -t $DOCKER_USER_ID/sentiment-analysis-frontend .

یہاں اور آگے اسی طرح کے احکامات میں $DOCKER_USER_ID آپ کے Docker Hub صارف نام سے تبدیل کیا جانا چاہیے۔ مثال کے طور پر، کمانڈ کا یہ حصہ اس طرح نظر آ سکتا ہے: rinormaloku/sentiment-analysis-frontend.

اس صورت میں، اس حکم کو اس سے ہٹا کر مختصر کیا جا سکتا ہے۔ -f Dockerfileچونکہ یہ فائل پہلے سے ہی اس فولڈر میں موجود ہے جس میں ہم اس کمانڈ پر عمل کر رہے ہیں۔

تیار شدہ تصویر کو ذخیرہ میں بھیجنے کے لیے، ہمیں درج ذیل کمانڈ کی ضرورت ہے:

docker push $DOCKER_USER_ID/sentiment-analysis-frontend

اسے مکمل کرنے کے بعد، Docker Hub پر اپنے ذخیروں کی فہرست چیک کریں تاکہ یہ سمجھ سکیں کہ آیا تصویر کو کلاؤڈ اسٹوریج پر اپ لوڈ کرنا کامیاب رہا ہے۔

▍کنٹینر چلانا

اب کوئی بھی اس تصویر کو ڈاؤن لوڈ اور چلا سکتا ہے، جسے جانا جاتا ہے۔ $DOCKER_USER_ID/sentiment-analysis-frontend. ایسا کرنے کے لیے، آپ کو حکموں کی درج ذیل ترتیب کو چلانے کی ضرورت ہے:

docker pull $DOCKER_USER_ID/sentiment-analysis-frontend
docker run -d -p 80:80 $DOCKER_USER_ID/sentiment-analysis-frontend

اب کنٹینر چل رہا ہے، ہم اپنی ضرورت کی دوسری تصاویر بنا کر کام جاری رکھ سکتے ہیں۔ لیکن اس سے پہلے کہ ہم جاری رکھیں، آئیے ڈیزائن کو سمجھیں۔ 80:80، جو امیج لانچ کمانڈ میں ظاہر ہوتا ہے اور مبہم معلوم ہوسکتا ہے۔

  • پہلا نمبر۔ 80 - یہ میزبان پورٹ نمبر ہے (یعنی مقامی کمپیوٹر)۔
  • دوسرا نمبر۔ 80 کنٹینر کی وہ بندرگاہ ہے جس پر درخواست بھیجی جانی چاہیے۔

مندرجہ ذیل مثال پر غور کریں۔

Kubernetes ٹیوٹوریل حصہ 1: ایپلی کیشنز، مائیکرو سروسز، اور کنٹینرز
پورٹ فارورڈنگ

سسٹم پورٹ سے درخواستوں کو ری ڈائریکٹ کرتا ہے۔ <hostPort> فی بندرگاہ <containerPort>. یعنی بندرگاہ تک رسائی 80 کمپیوٹر کو پورٹ پر ری ڈائریکٹ کیا جاتا ہے۔ 80 کنٹینر

بندرگاہ کے بعد سے 80 مقامی کمپیوٹر پر کھولا گیا، پھر آپ اس کمپیوٹر سے ایپلیکیشن تک رسائی حاصل کر سکتے ہیں۔ localhost:80. اگر آپ کا سسٹم ڈوکر کو سپورٹ نہیں کرتا ہے، تو ایپلی کیشن کو ڈوکر ورچوئل مشین پر چلایا جا سکتا ہے، جس کا ایڈریس اس طرح نظر آئے گا۔ <docker-machine ip>:80. ڈوکر ورچوئل مشین کا آئی پی ایڈریس معلوم کرنے کے لیے، آپ کمانڈ استعمال کر سکتے ہیں۔ docker-machine ip.

اس وقت، فرنٹ اینڈ ایپلیکیشن کنٹینر کو کامیابی کے ساتھ لانچ کرنے کے بعد، آپ کو براؤزر میں اس کا صفحہ کھولنے کے قابل ہونا چاہیے۔

▍ .dockerignore فائل

درخواست کی تصویر جمع کرنا SA-Frontendہم دیکھ سکتے ہیں کہ یہ عمل انتہائی سست ہے۔ ایسا اس لیے ہوتا ہے کیونکہ امیج بلڈ سیاق و سباق کو ڈاکر ڈیمون کو بھیجا جانا چاہیے۔ بلڈ سیاق و سباق کی نمائندگی کرنے والی ڈائریکٹری کو کمانڈ کی آخری دلیل کے طور پر بیان کیا گیا ہے۔ docker build. ہمارے معاملے میں، اس کمانڈ کے آخر میں ایک نقطہ ہے۔ یہ مندرجہ ذیل ڈھانچے کو تعمیراتی سیاق و سباق میں شامل کرنے کا سبب بنتا ہے:

sa-frontend:
|   .dockerignore
|   Dockerfile
|   package.json
|   README.md
+---build
+---node_modules
+---public
---src

لیکن یہاں موجود تمام فولڈرز میں سے، ہمیں صرف فولڈر کی ضرورت ہے۔ build. کچھ اور لوڈ کرنا وقت کا ضیاع ہے۔ آپ ڈوکر کو یہ بتا کر تعمیر کو تیز کر سکتے ہیں کہ کن ڈائریکٹریوں کو نظر انداز کرنا ہے۔ ایسا کرنے کے لیے ہمیں فائل کی ضرورت ہے۔ .dockerignore. آپ، اگر آپ فائل سے واقف ہیں۔ .gitignore، اس فائل کی ساخت شاید واقف معلوم ہوگی۔ یہ ان ڈائریکٹریوں کی فہرست دیتا ہے جنہیں امیج بلڈ سسٹم نظر انداز کر سکتا ہے۔ ہمارے معاملے میں، اس فائل کے مندرجات اس طرح نظر آتے ہیں:

node_modules
src
public

فائل .dockerignore فائل کے طور پر ایک ہی فولڈر میں ہونا ضروری ہے Dockerfile. اب تصویر بنانے میں چند سیکنڈ لگیں گے۔

آئیے اب جاوا ایپلی کیشن کے لیے امیج پر کام کرتے ہیں۔

▍جاوا ایپلیکیشن کے لیے کنٹینر امیج بنانا

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

فائل کھولیں۔ Dockerfileجو پروجیکٹ فولڈر میں ہے۔ sa-webapp. اگر آپ اس فائل کا متن پڑھیں تو آپ کو اس میں صرف دو نئی تعمیرات نظر آئیں گی، جن کی شروعات کلیدی الفاظ سے ہوتی ہے۔ ENV и EXPOSE:

ENV SA_LOGIC_API_URL http://localhost:5000
…
EXPOSE 8080

مطلوبہ الفاظ ENV آپ کو ڈوکر کنٹینرز کے اندر ماحولیاتی متغیرات کا اعلان کرنے کی اجازت دیتا ہے۔ خاص طور پر، ہمارے معاملے میں، یہ آپ کو متن کا تجزیہ کرنے والی ایپلیکیشن کے API تک رسائی کے لیے URL کی وضاحت کرنے کی اجازت دیتا ہے۔

مطلوبہ الفاظ EXPOSE آپ کو ڈوکر کو بندرگاہ کھولنے کے لیے بتانے کی اجازت دیتا ہے۔ ہم ایپلیکیشن چلاتے ہوئے اس پورٹ کو استعمال کرنے جا رہے ہیں۔ یہاں آپ اسے دیکھ سکتے ہیں۔ Dockerfile درخواست کے لئے SA-Frontend ایسا کوئی حکم نہیں ہے۔ یہ صرف دستاویزی مقاصد کے لیے ہے، دوسرے لفظوں میں، یہ تعمیر اس کے لیے ہے جو پڑھے گا۔ Dockerfile.

تصویر بنانا اور اسے مخزن میں دھکیلنا بالکل ویسا ہی لگتا ہے جیسا کہ پچھلی مثال میں ہے۔ اگر آپ ابھی تک اپنی صلاحیتوں پر زیادہ پراعتماد نہیں ہیں، تو متعلقہ کمانڈز فائل میں مل سکتے ہیں۔ README.md فولڈر میں sa-webapp.

Python ایپلیکیشن کے لیے کنٹینر امیج بنانا

اگر آپ فائل کے مندرجات کو دیکھیں Dockerfile فولڈر میں sa-logic، تب آپ کو وہاں اپنے لیے کوئی نئی چیز نہیں ملے گی۔ تصویر بنانے اور اسے ذخیرہ میں بھیجنے کے احکامات بھی آپ کو پہلے سے ہی واقف ہونے چاہئیں، لیکن، ہماری دوسری ایپلی کیشنز کی طرح، وہ فائل میں مل سکتے ہیں۔ README.md فولڈر میں sa-logic.

▍کنٹینرائزڈ ایپلی کیشنز کی جانچ کرنا

کیا آپ کسی ایسی چیز پر بھروسہ کر سکتے ہیں جس کا آپ نے تجربہ نہیں کیا ہے؟ میں بھی نہیں کر سکتا۔ آئیے اپنے کنٹینرز کی جانچ کریں۔

  1. آئیے ایپلیکیشن کنٹینر لانچ کریں۔ sa-logic اور اسے پورٹ پر سننے کے لیے ترتیب دیں۔ 5050:
    docker run -d -p 5050:5000 $DOCKER_USER_ID/sentiment-analysis-logic
  2. آئیے ایپلیکیشن کنٹینر لانچ کریں۔ sa-webapp اور اسے پورٹ پر سننے کے لیے ترتیب دیں۔ 8080. اس کے علاوہ، ہمیں اس پورٹ کو کنفیگر کرنے کی ضرورت ہے جس پر پائتھون ایپلی کیشن جاوا ایپلیکیشن کی درخواستوں کے لیے ماحولیاتی متغیر کو دوبارہ تفویض کر کے سنے گی۔ SA_LOGIC_API_URL:
    $ docker run -d -p 8080:8080 -e SA_LOGIC_API_URL='http://<container_ip or docker machine ip>:5000' $DOCKER_USER_ID/sentiment-analysis-web-app

ڈوکر کنٹینر یا ورچوئل مشین کا آئی پی ایڈریس معلوم کرنے کا طریقہ جاننے کے لیے، فائل سے رجوع کریں۔ پڑھیں.

آئیے ایپلیکیشن کنٹینر لانچ کریں۔ sa-frontend:

docker run -d -p 80:80 $DOCKER_USER_ID/sentiment-analysis-frontend

اب سب کچھ براؤزر میں ایڈریس پر جانے کے لیے تیار ہے۔ localhost:80 اور ایپلی کیشن کو آزمائیں۔

براہ کرم نوٹ کریں کہ اگر آپ نے پورٹ کو تبدیل کیا ہے۔ sa-webapp، یا اگر آپ ڈوکر ورچوئل مشین چلا رہے ہیں، تو آپ کو فائل میں ترمیم کرنے کی ضرورت ہوگی۔ App.js فولڈر سے sa-frontendطریقہ کار میں آئی پی ایڈریس یا پورٹ نمبر تبدیل کرکے analyzeSentence()، پرانے ڈیٹا کی بجائے موجودہ معلومات کو تبدیل کرنا۔ اس کے بعد، آپ کو تصویر کو دوبارہ جوڑنے اور اسے استعمال کرنے کی ضرورت ہے۔

ہمارا ایپلیکیشن ڈایاگرام اب ایسا لگتا ہے۔

Kubernetes ٹیوٹوریل حصہ 1: ایپلی کیشنز، مائیکرو سروسز، اور کنٹینرز
مائیکرو سروسز کنٹینرز میں چلتی ہیں۔

خلاصہ: ہمیں کبرنیٹس کلسٹر کی ضرورت کیوں ہے؟

ہم نے ابھی فائلوں کی جانچ کی ہے۔ Dockerfile، تصاویر بنانے اور انہیں ڈوکر ریپوزٹری میں دھکیلنے کے بارے میں بات کی۔ اس کے علاوہ، ہم نے فائل کا استعمال کرتے ہوئے امیج اسمبلی کو تیز کرنے کا طریقہ سیکھا۔ .dockerignore. نتیجے کے طور پر، ہماری مائیکرو سروسز اب ڈوکر کنٹینرز میں چلتی ہیں۔ یہاں آپ کے پاس مکمل طور پر جائز سوال ہو سکتا ہے کہ ہمیں کبرنیٹس کی ضرورت کیوں ہے۔ اس مواد کا دوسرا حصہ اس سوال کا جواب دینے کے لیے وقف کیا جائے گا۔ اس دوران، درج ذیل سوال پر غور کریں:
آئیے مان لیں کہ متن کے تجزیہ کے لیے ہماری ویب ایپلیکیشن دنیا بھر میں مقبول ہو چکی ہے۔ اس کے پاس ہر منٹ لاکھوں درخواستیں آتی ہیں۔ اس کا مطلب ہے کہ مائیکرو سروسز sa-webapp и sa-logic بہت زیادہ بوجھ کے تحت ہو جائے گا. مائیکرو سروسز چلانے والے کنٹینرز کی پیمائش کیسے کریں؟

Kubernetes ٹیوٹوریل حصہ 1: ایپلی کیشنز، مائیکرو سروسز، اور کنٹینرز

ماخذ: www.habr.com

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