ابن سعید
خادم
ڈاکر (Docker) ایک سافٹوئیر کنٹینرائزیشن پلیٹفارم ہے۔ اس کی مدد سے کسی بھی سافٹوئیر کو اس کی تمام ضروریات، انحصارات، و ترتیبات سمیت ڈبہ بند کر کے ہر جگہ اس کی یکساں کارکردگی کو یقینی بنایا جا سکتا ہے۔ گو کہ اس مقصد کے لیے ورچؤل مشین کا استعمال بھی کیا جا سکتا ہے، لیکن ورچؤل مشین کے بر عکس سافٹوئیر کنٹینر میں مکمل آپریٹنگ سسٹم شامل نہیں کیا جاتا، لہٰذا کنٹینرز نسبتاً کافی ہلکے پھلکے، سریع العمل، اور کم وسائل میں خاصے مؤثر ہوتے ہیں۔ حالانکہ کسی ایک مشین کے تمام کنٹینرز کے تمام پروسیسیز میزبان آپریٹنگ سسٹم میں براہ راست چل رہے ہوتے ہیں، لیکن ہر کنٹینر کچھ اس طرح ملفوف ہوتا ہے کہ اس کو اپنے سوا باقی کسی اور پروسیس یا اپنے محدود فائل سسٹم کے سوا خارجی فائل سسٹم کا ادراک نہیں ہوتا، الا یہ کہ اسے بتایا جائے۔ سافٹوئیر کنٹینر کی مدد سے یہ بھی ممکن ہے کہ ایک ہی مشین میں ایک ہی سافٹوئیر کے کئی نسخے بیک وقت چلائے جائیں، گر چہ ان کے انحصارات باہم متضاد کیوں نہ ہوں۔
ڈاکر کنٹینرز کے استعمال کے لیے ضروری ہے کہ کمپیوٹر میں ڈاکر سافٹوئیر نصب ہو۔ ڈاکر کمیونٹی ایڈیشن ونڈوز، میک، اور کئی لینکس آپریٹنگ سسٹمز کے لیے مفت دستایب ہے۔ یوں تو ڈاکر کے استعمال اور اس کے نظم و ضبط کو سہل بنانے کے لیے کئی گرافیکل انٹرفیس دستیاب ہیں، جن میں چند براؤزر ایڈ آنز بھی شامل ہیں، لیکن اس کے مؤثر استعمال کے لیے اس کی کمانڈ لائن انٹرفیس سے واقفیت مفید ہو گی، لہٰذا ہم یہاں محض مؤخر الذکر کا استعمال کریں گے۔
کسی ڈاکر کنٹینر کو چلانے سے قبل متعلقہ ڈاکر امیج کی ضرورت ہوتی ہے۔ ڈاکر امیج عموماً ڈاکر فائل (Dockerfile) کی مدد سے بنائی جاتی ہے۔ گو کہ ڈاکر امیج بغیر کسی ڈاکر فائل کے بھی بنائی جا سکتی ہے، لیکن اختصار کی نیت سے ہم یہاں ان طریقوں کے بیان سے گریز برتیں گے۔ ڈاکر فائل کی ابتدا پہلے سے موجود کسی امیج کو بنیاد بنا کر کی جاتی ہے۔ ڈاکر ہب میں کئی مشہور زمانہ سافٹوئیر آفیشئیل ریپوزیٹریز کی ذیل میں موجود ہیں جو بہترین بنیادی امیج ثابت ہو سکتے ہیں، اس کے علاوہ دیگر لوگوں نے بے شمار امیجیز پبلکلی شائع کر رکھی ہیں، لیکن خالی تختی سے شروعات مقصود ہو تو "scratch" نامی امیج کو بنیاد بنایا جا سکتا ہے۔ بعد ازاں اس میں تہ بہ تہ دیگر ضروریات کا بیان شامل کیا جاتا ہے، مثلاً، امیج کے اندر کسی مخصوص مقام پر کوئی فولڈر بنانا، بائنریز، لائبریریز، کوڈ، اور کنفیگیوریشن فائلیں نقل کرنا، ضروری سافٹوئیر نصب کرنا، غیر ضروری فائلیں حذف کرنا، انوائرنمنٹ ویرئیبل متعین کرنا، اور ورکنگ ڈائریکٹری تبدیل کرنا وغیرہ۔ پھر ایک کمانڈ کے ذریعہ اس ڈاکر فائل کی مدد سے متعلقہ ڈاکر امیج بنائی جاتی ہے جو ڈاکر فائل کے مطابق پرت در پرت اس مشین کے ڈاکر نظام میں محفوظ ہو جاتی ہے جہاں اس کمانڈ کو چلایا گیا ہو۔ ڈاکر امیجیز کو دوسری مشینوں تک منتقل کرنے کے لیے اسے ڈاکر ہب میں بھیج کر وہاں سے دوسری مشینوں میں ڈاؤنلوڈ کیا جا سکتا ہے، اسی ڈاکر فائل کی مدد سے دوسری مشینوں میں دوبارہ امیج کو تیار کیا جا سکتا ہے، یا (tar.gz فورمیٹ میں) ایکسپورٹ اور امپورٹ کیا جا سکتا ہے۔ ڈاکر ہب میں ایک سہولت یہ بھی موجود ہے کہ گٹ ہب یا بٹ بکٹ میں موجود کسی کوڈ ریپوزیٹری میں ڈاکر فائل موجود ہو تو کوڈ میں ہوئی ہر تبدیلی کے بعد خود کار طریقے سے اس کی ڈاکر امیج ڈاکر ہب میں بنائی جا سکتی ہے۔ ڈاکر امیج کی تیاری یا حصول کے بعد اس امیج سے ایک یا زائد کنٹینرز چلائے جا سکتے ہیں۔ کنٹینرز چلاتے ہوئے اگر متعلقہ امیج اس مشین کے ڈاکر نظام میں دستیاب نہیں یا اس کی چند پرتیں موجود نہیں تو وہ خود کار طور پر ڈاکر ہب رجسٹری سے ڈاؤنلوڈ کر لی جاتی ہیں۔
اگر آپ کے کمپیوٹر میں ڈاکر نصب ہے تو کمانڈ لائن پر درج ذیل کمانڈ آزمائیں۔ اس کا مطلب یہ ہے کہ ibnesayeed/urlextractor نامی امیج سے ایک عدد ڈاکر کنٹینر چلایا جائے اور اس میں اردو محفل کا ربط بطور آرگیومینٹ بھیجا جائے (اس کی جگہ کسی دوسرے یو آر ایل پر بھی تجربہ کیا جا سکتا ہے)۔ اس کمانڈ کا مقصد یہ ہے کہ ارگیومینٹ کے طور پر دیے گئے ربط پر موجود صفحے میں جتنے بھی روابط ہیں ان سب کو نچوڑ کر پیش کیا جائے۔ پہلی دفعہ یہ کمانڈ چلانے پر موجودہ مشین میں ibnesayeed/urlextractor امیج دستیاب نہ ہوگی اس لیے اس کی تمام پرتیں ڈاکر ہب رجسٹری سے ڈاؤنلوڈ کی جائیں گی، اس کے بعد یو آر ایل کھنگالنے کا کام انجام پائے گا۔ دوسری دفعہ یہ تجربہ دہرانے پر امیج ڈاؤنلوڈ کا اضافی عمل نہیں دہرایا جائے گا، حتیٰ کہ اس امیج کو نظام سے حذف کر دیا گیا ہو۔ امیج کے نام میں ibnesayeed کا سابقہ اس لیے موجود ہے کیونکہ ہم نے اس امیج کو ڈاکر ہب میں عمومی استعمال کے لیے اپلوڈ کر رکھا ہے، جہاں آفیشئیل امیجیز کے علاوہ باقی تمام امیجیز کے ناموں میں ارسال کرنے والے رکن یا آرگنائزیشن کی آئی ڈی شامل ہوتی ہے تاکہ مختلف لوگوں کی یکساں ناموں کی امیجیز متصادم نہ ہوں۔ اگر کسی رجسٹری میں امیجیز کو اپلوڈ کرنا مقصود نہ ہو تو بغیر کسی سابقے کے نام بھی جائز ہوں گے۔
کوڈ:
$ docker container run ibnesayeed/urlextractor http://www.urduweb.org/mehfil/
اب کسی ویب پیج سے یو آر ایل اخذ کرنے کے لیے ایک اسکرپٹ لکھتے ہیں اور دیکھتے ہیں کہ اس میں کیا مسائل درپیش ہوں گے اور ڈاکر کی مدد سے ان کو کیسے حل کیا جا سکتا ہے۔ ذیل میں main.py نام سے ایک عدد پائتھون فائل کا مواد پیش کیا جا رہا ہے۔ یہ سادہ سی اسکریپٹ کمانڈ لائن پر فراہم کرائے گئے آخری ارگیومینٹ کو یو آر ایل مان کر اسے انٹرنیٹ سے ڈاؤنلوڈ کرے گی، اس کے مواد کو ایک ایچ ٹی ایم ایل پارسر کی مدد سے پارس کر کے اس میں موجود تمام اینکر ایلیمینٹس کے ہائپر ریفرینس کو اخذ کر کے پرنٹ کر دے گی۔
PHP:
#!/usr/bin/env python
import sys
import requests
from bs4 import BeautifulSoup
r = requests.get(sys.argv[-1])
data = r.text
soup = BeautifulSoup(data)
for link in soup.find_all("a"):
print(link.get("href"))
اس اسکرپٹ کو ایکزیکیوٹ کرنے کی کوشش میں کئی مسائل کا سامنا ہو سکتا ہے۔ مثلاً کمپیوٹر میں پائتھون نصب نہیں، یا اس کا بہت پرانا نسخہ نصب ہے جسے اپڈیٹ کرنے کی صورت میں دوسرے موجودہ سافٹوئیر متاثر ہو سکتے ہیں۔ اگر پائتھون نصب بھی ہو تو بھی ریکوئیسٹس اور بیوٹیفل سوپ نامی دو تھرڈ پارٹی پائتھون لائبریریاں غیر موجود ہو سکتی ہیں جو اس اسکرپٹ میں مستعمل ہیں۔ پائتھون کی اضافی لائبریریوں کو نصب کرنے کے لیے جن انسٹالرز کی ضرورت ہوتی ہے وہ پائتھون رن ٹائم میں موجود نہیں ہوتیں، بلکہ اس کے ڈیویلپر پیکیج میں شامل ہوتی ہیں، لہٰذا لینکس مشینوں میں پہلے سے پائتھون موجود بھی ہو تو بھی یہ لائبریریاں بآسانی نصب نہیں کی جا سکیں گی۔ متعلقہ اضافی لائبریریوں کو نصب کرنے کے بعد ممکن ہے کہ اس اسکرپٹ کی پرمیشن بطور ایکزیکیوٹیبل اسکرپٹ طے نہ کی گئی ہو۔ ان سب مسائل سے نمٹنے کے بعد اس اسکرپٹ سے خاطر خواہ کام لیا جا سکتا ہے، لیکن یہ اسکرپٹ کسی اور مشین پر چلانی ہو تو نئے سرے سے سارے مسائل دور کرنے ہوں گے۔ اب آئیے اس اسکرپٹ کو ڈاکرائز کرتے ہیں تاکہ ان مسائل کا سد باب کیا جا سکے۔ اس کے لیے ذیل میں ایک Dockerfile کا نمونہ پیش ہے (دونوں فائلیں اس جسٹ میں موجود ہیں)۔
PHP:
FROM python
LABEL maintainer="Sawood Alam <@ibnesayeed>"
RUN pip install beautifulsoup4
RUN pip install requests
COPY main.py /app/
WORKDIR /app
RUN chmod a+x main.py
ENTRYPOINT ["./main.py"]
اس Dockerfile کو اپنے کمپیوٹر کے اسی فولڈر میں رکھیں جہاں مذکورہ بالا main.py فائل موجود ہے۔ پھر کمانڈ لائن پر اسی فولڈر میں جائیں اور درج ذیل کمانڈ چلائیں۔
کوڈ:
$ docker image build -t ibnesayeed/urlextractor .
اس کمانڈ کے اخیر میں ایک ڈاٹ "." موجود ہے جس کا مطلب ہے موجودہ فولڈر۔ اس کمانڈ کا مطلب یہ ہے کہ موجودہ فولڈر میں موجود Dockerfile کی مدد سے ایک عدد ڈاکر امیج تیار کی جائے جس نام (یا ٹیگ) ibnesayeed/urlextractor ہو۔ اس میں ibnesayeed کی جگہ اپنی ڈاکر ہب آئی ڈی کا استعمال کریں (اگر امیج کو ڈاکر ہب میں شامل کرنا مقصود ہو) یا سرے سے کوئی سابقہ ہی استعمال نہ کریں۔ کمانڈ چلانے پر مذکورہ ڈاکر فائل کی بنیاد پر سب سے پہلے پائتھون کے تازہ ترین نسخے کی آفیشئیل ڈاکر امیج بطور بنیاد ڈاؤن لوڈ ہوگی (اگر پہلے سے ڈاکر امیج کیش میں موجود نہ ہوئی)، پھر اگلی پرت کے طور پر رکھ رکھاؤ کرنے والے کا نام اور رابطہ بطور لیبل شامل ہوگا، پھر یکے بعد دیگرے بیوٹیفل سوپ اور ریکوئیسٹس لائبریریز نصب ہوں گی، پھر میزبان مشین کے موجودہ فولڈر میں موجود main.py اسکرپٹ فائل امیج کے اندر app فولڈر میں نقل کر دی جائے گی (یہ فولڈر پہلے سو موجود نہیں، لیکن از خود بن جائے گا)، پھر app فولڈر کو بطور ورکنگ ڈائریکٹری طے کر دیا جائے گا جو کنٹینر چلاتے ہوئے بھی برقرار رہے گا (الا یہ کہ اسے تبدیل کیا جائے)، پھر main.py فائل کو ایکزیکیوٹیبل قرار دیا جائے گا، اور اخیر میں اس پائتھون اسکرپٹ کو اینٹری پوائنٹ کے طور پر متعین کر دیا جائے گا تاکہ کنٹینر چلاتے ہوئے اسکرپٹ کا نام بطور آرگیومینٹ شامل کرنے کی ضرورت نہ ہو۔ اس کے بعد فراہم کردہ نام سے ایک عدد ڈاکر امیج بن کر میزبان مشین کے ڈاکر امیج کیش میں محفوظ ہو جائے گی جس کی مدد سے اس مشین پر ایک یا زائد کنٹینرز چلائے جا سکتے ہیں یا شراکت کی غرض سے درج ذیل کمانڈ کی مدد سے ڈاکر ہب میں بھیجا جا سکتا ہے۔ واضح رہے کہ ڈاکر ہب میں بھیجنے کے لیے ڈاکر ہب کا اکاؤنٹ ہونا ضروری ہے۔
کوڈ:
$ docker image push ibnesayeed/urlextractor
ڈاکر امیج بناتے ہوئے نظام از خود اس کے ساتھ latest کا ٹیگ شامل کر دیتا ہے جو کہ طے شدہ ٹیگ ہے یعنی امیج بناتے ہوئے یا کنٹینر چلاتے ہوئے اس کی وضاحت نہ کی جائے تو یہ مانا جاتا ہے کہ متعلقہ امیج کا latest ٹیگ مقصود ہے۔ امیج بناتے ہوئے، کنٹینر چلاتے ہوئے، یا ڈاکر فائل میں بنیادی امیج کی صورت کسی مخصوص ٹیگ کی وضاحت مقصود ہو تو نام کے ساتھ کولن نشان ":" کے بعد متعلقہ ٹیگ کا لاحقہ شامل کیا جا سکتا ہے۔ اس طرح بعض تبدیلیوں کے ساتھ ایک ہی امیج کی کئی صورتیں بیک وقت نظام میں موجود ہو سکتی ہیں اور ڈیویلپمنٹ کے وقت مختلف تبدیلیوں کے ساتھ سافٹوئیر کی ٹیسٹنگ میں معاون ہو سکتی ہیں۔
چونکہ ہر کنٹینر کی اپنی علیحدہ دنیا ہوتی ہے، لہٰذا ان میں چل رہے پروسیسیز کو باہر سے استعمال میں لانے کے لیے عموماً رن ٹائم پر پورٹ میپنگ کی جاتی ہے۔ اسی طرح کنٹینر کے ختم ہوتے ہی اس کا فائل سسٹم بھی ذائل ہو جاتا ہے، لہٰذا ضروری فائلوں کو برقرار رکھنے کے لیے والیومز کا استعمال کیا جاتا ہے جن کی مدد سے میزبان مشین کے فائل سسٹم کے کسی فولڈر کو کنٹینر میں ماؤنٹ کرنا ممکن ہوتا ہے۔ اس کی تفصیلات ڈاکر رن ریفرینس سے حاصل کی جا سکتی ہیں۔
عموماً پیچیدہ سافٹوئیر ایک سے زائد سرویسیز استعمال کرتے ہیں، مثلاً زین فورو یا ورڈ پریس کا نظام ایک عدد ویب سرور، ایک عدد ڈیٹا بیس سرور، اور ایک عدد پی ایچ پی انٹرپریٹر کا متقاضی ہے۔ اس مقصد کے لیے کچھ لوگ ایک ہی ڈاکر امیج میں ساری ضروریات شامل کر دیتے ہیں، جبکہ کچھ لوگ سبھی خدمات کے لیے علیحدہ علیحدہ امیجیز بناتے ہیں اور رن ٹائم پر انہیں مربوط کرتے ہیں۔ مؤخر الذکر طریقہ اس لحاظ سے بہتر ہے کہ مختلف خدمات کو علیحدہ علیحدہ اپڈیٹ کرنا اور حسب ضرورت اسکیل کرنا سہل ہوتا ہے۔ لیکن کنٹینر آرکسٹریشن کا موضوع اس مختصر تعارفی مضمون کے دائرہ کار سے باہر ہے۔
ذیل میں پریزینٹیشن سلائڈس کی صورت ڈاکر کا مختصر تعارف پیش کیا گیا ہے اور ساتھ ہی کچھ مفید روابط بھی فراہم کرائے گئے ہیں۔
پچھلے سال ہم نے ویب آرکائیونگ کے ایک پیچیدہ سافٹوئیر، آرکائیو اسپارک کے ڈاکرائزیشن کا تجربہ قلمبند کیا تھا اور یہ دکھایا تھا کہ ہم نے کیسے اس کی تنصیب و ترتیب کی پیچیدگیوں کو ختم کر کے محض ایک کمانڈ کے ذریعہ چلانے کے قابل بنا دیا۔ اردو ویب کی بعض خدمات ڈاکرائز کر دی گئی ہیں اور باقی پر مستقبل میں کام کرنے کا ارادہ ہے۔ لگے ہاتھوں ہم یہ بھی بتا دیں کہ حال ہی میں ہمیں اولڈ ڈومینئین یونیورسٹی کا ڈاکر کیمپس ایمبیسڈر چنا گیا ہے۔