ڈاکر: برا مشورہ

ڈاکر: برا مشورہ

جب میں کار چلانا سیکھ رہا تھا تو پہلے ہی سبق میں انسٹرکٹر نے چوراہے پر الٹا گاڑی چلا دی، اور پھر کہا کہ آپ کو ایسا نہیں کرنا چاہیے - کبھی بھی نہیں۔ مجھے یہ قاعدہ فوراً اور ساری زندگی یاد رہا۔

آپ نے بچوں کو گریگوری آسٹر کی طرف سے "بری نصیحت" پڑھی، اور آپ دیکھتے ہیں کہ کتنی آسانی سے اور قدرتی طور پر یہ بات ان پر ابھرتی ہے کہ انہیں ایسا نہیں کرنا چاہیے۔

ڈاکر فائل کو صحیح طریقے سے کیسے لکھنا ہے اس پر بہت سارے مضامین لکھے گئے ہیں۔ لیکن مجھے غلط ڈاکر فائلز لکھنے کے بارے میں ہدایات نہیں ملیں۔ میں اس خلا کو پُر کر رہا ہوں۔ اور ہو سکتا ہے کہ جن پروجیکٹس میں مجھے سپورٹ ملے، اس میں ایسی ڈاکر فائلز کم ہوں گی۔

تمام کردار، حالات اور ڈاکر فائل فرضی ہیں۔ اگر آپ خود کو پہچانتے ہیں تو معذرت۔

ایک ڈاکر فائل بنانا، ناگوار اور خوفناک

پیٹر (سینئر جاوا/روبی/پی ایچ پی ڈویلپر): ساتھی واسیلی، کیا آپ نے پہلے ہی ڈوکر پر ایک نیا ماڈیول اپ لوڈ کیا ہے؟
واسیلی (جونیئر): نہیں، میرے پاس وقت نہیں تھا، میں اس ڈاکر کے ساتھ اس کا پتہ نہیں لگا سکتا۔ اس پر بہت سارے مضامین ہیں، یہ چکرا دینے والا ہے۔

پیٹر: ہمارے پاس ایک سال پہلے کی آخری تاریخ تھی۔ مجھے آپ کی مدد کرنے دیں، ہم اس عمل میں اس کا پتہ لگائیں گے۔ مجھے بتائیں کہ آپ کے لئے کیا کام نہیں کرتا ہے۔

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

اور پہلی لائن Dockerfile میں ظاہر ہوتی ہے:

FROM ubuntu:latest

پیٹر: آگے کیا ہے، ہم نے اپنا ماڈیول لکھنے کے لیے کیا استعمال کیا؟
واسیلی: تو روبی، ایک ویب سرور ہے اور سروس ڈیمنز کے ایک جوڑے کو لانچ کیا جانا چاہیے۔
پیٹر: ہاں، ہمیں کیا چاہیے: روبی، بنڈلر، نوڈج، امیج میجک اور اور کیا... اور ساتھ ہی، نئے پیکجز حاصل کرنے کے لیے اپ گریڈ بھی کریں۔
واسیلی: اور ہم ایسا صارف نہیں بنائیں گے کہ ہم جڑ کے نیچے نہ رہیں؟
پیٹر: بھاڑ میں جاؤ، پھر آپ کو ابھی بھی حقوق کے ساتھ بیوقوف بنانا ہوگا۔
واسیلی: مجھے یہ سب ایک کمانڈ میں ڈالنے کے لیے، تقریباً 15 منٹ کا وقت درکار ہے، میں نے پڑھا ہے کہ...
(پیٹر بے رحمی سے پیچیدہ اور بہت ہوشیار جونیئر کو روکتا ہے۔)
پیٹر: الگ الگ کمانڈ میں لکھیں، پڑھنے میں آسانی ہوگی۔

ڈاکر فائل بڑھتی ہے:

FROM ubuntu:latest
RUN apt-get update
RUN apt-get upgrade
RUN apt-get -y install libpq-dev imagemagick gsfonts ruby-full
RUN gem install bundler
RUN curl -sL https://deb.nodesource.com/setup_9.x | sudo bash -
RUN apt-get install -y nodejs
RUN bundle install --without development test --path vendor/bundle
RUN rm -rf /usr/local/bundle/cache/*.gem 
RUN apt-get clean 
RUN rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*

پھر ایگور ایوانووچ، DevOps (لیکن Dev سے زیادہ Ops)، چیختے ہوئے دفتر میں پھٹ پڑے:

اے آئی: پیٹیا، آپ کے ڈویلپرز نے فوڈ ڈیٹا بیس کو دوبارہ توڑ دیا، یہ کب ختم ہوگا...

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

AI: آپ کیا کر رہے ہیں؟
واسیلی: پیٹر ایک نئے ماڈیول کے لیے ڈاکر فائل بنانے میں میری مدد کر رہا ہے۔
AI: مجھے ایک نظر ڈالنے دو... آپ نے یہاں کیا لکھا ہے، آپ ایک الگ کمانڈ سے ریپوزٹری کو صاف کرتے ہیں، یہ ایک اضافی پرت ہے... لیکن اگر آپ نے Gemfile کو کاپی نہیں کیا ہے تو آپ انحصار کیسے انسٹال کریں گے! اور عام طور پر، یہ کوئی اچھا نہیں ہے.
پیٹر: براہ کرم اپنے کاروبار کے بارے میں سوچیں، ہم کسی طرح اس کا پتہ لگائیں گے۔

ایگور ایوانووچ نے افسوس سے آہ بھری اور یہ جاننے کے لیے چھوڑ دیا کہ ڈیٹا بیس کو کس نے توڑا۔

پیٹر: جی ہاں، لیکن وہ کوڈ کے بارے میں صحیح تھا، ہمیں اسے تصویر میں ڈالنے کی ضرورت ہے۔ اور آئیے فوری طور پر ssh اور سپروائزر انسٹال کریں، ورنہ ہم ڈیمن شروع کر دیں گے۔

واسیلی: پھر میں پہلے Gemfile اور Gemfile.lock کو کاپی کروں گا، پھر میں سب کچھ انسٹال کروں گا، اور پھر میں پورے پروجیکٹ کو کاپی کروں گا۔ اگر Gemfile تبدیل نہیں ہوتی ہے، تو تہہ کو کیشے سے لے لیا جائے گا۔
پیٹر: آپ سب ان تہوں کے ساتھ کیوں ہیں، ایک بار میں سب کچھ کاپی کریں۔ فوراً کاپی کریں۔ بالکل پہلی لائن۔

ڈاکر فائل اب اس طرح نظر آتی ہے:

FROM ubuntu:latest
COPY ./ /app
WORKDIR /app
RUN apt-get update
RUN apt-get upgrade
RUN apt-get -y install libpq-dev imagemagick gsfonts ruby-full ssh supervisor
RUN gem install bundler
RUN curl -sL https://deb.nodesource.com/setup_9.x | sudo bash -
RUN apt-get install -y nodejs

RUN bundle install --without development test --path vendor/bundle
RUN rm -rf /usr/local/bundle/cache/*.gem 
RUN apt-get clean 
RUN rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* 

پیٹر: تو، آگے کیا؟ کیا آپ کے پاس سپروائزر کے لیے تشکیلات ہیں؟
واسیلی: نہیں، نہیں۔ لیکن میں اسے جلدی کروں گا۔
پیٹر: پھر آپ یہ کریں گے۔ آئیے اب ایک init اسکرپٹ کا خاکہ بناتے ہیں جو ہر چیز کو لانچ کرے گا۔ ٹھیک ہے، تو آپ nohup کے ساتھ ssh شروع کریں، تاکہ ہم کنٹینر سے رابطہ کر سکیں اور دیکھ سکیں کہ کیا غلط ہوا ہے۔ پھر اسی طرح سپروائزر چلائیں۔ ٹھیک ہے، پھر آپ صرف مسافر چلاتے ہیں.
س: لیکن میں نے پڑھا ہے کہ ایک عمل ہونا چاہئے، لہذا ڈوکر کو معلوم ہو گا کہ کچھ غلط ہو گیا ہے اور وہ کنٹینر کو دوبارہ شروع کر سکتا ہے۔
P: بکواس کے ساتھ اپنے سر کو پریشان مت کرو. اور عام طور پر، کیسے؟ آپ یہ سب ایک عمل میں کیسے چلاتے ہیں؟ Igor Ivanovich کو استحکام کے بارے میں سوچنے دیں، یہ بے وجہ نہیں ہے کہ وہ تنخواہ وصول کرتا ہے۔ ہمارا کام کوڈ لکھنا ہے۔ اور عام طور پر، اسے آپ کا شکریہ کہنے دیں کہ ہم نے اس کے لیے ڈاک فائل لکھی ہے۔

10 منٹ اور بلیوں کے بارے میں دو ویڈیوز بعد میں۔

س: میں نے سب کچھ کر لیا ہے۔ میں نے مزید تبصرے شامل کیے ہیں۔
P: مجھے دکھائیں!

Dockerfile کا تازہ ترین ورژن:

FROM ubuntu:latest

# Копируем исходный код
COPY ./ /app
WORKDIR /app

# Обновляем список пакетов
RUN apt-get update 

# Обновляем пакеты
RUN apt-get upgrade

# Устанавливаем нужные пакеты
RUN apt-get -y install libpq-dev imagemagick gsfonts ruby-full ssh supervisor

# Устанавливаем bundler
RUN gem install bundler

# Устанавливаем nodejs используется для сборки статики
RUN curl -sL https://deb.nodesource.com/setup_9.x | sudo bash -
RUN apt-get install -y nodejs

# Устанавливаем зависимости
RUN bundle install --without development test --path vendor/bundle

# Чистим за собой кэши
RUN rm -rf /usr/local/bundle/cache/*.gem 
RUN apt-get clean 
RUN rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* 

# Запускаем скрипт, при старте контейнера, который запустит все остальное.
CMD [“/app/init.sh”]

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

ٹھیک ہے، اب ہمارے پاس بالکل خوفناک ڈاکر فائل ہے، جس کی نظر سے ایگور ایوانووچ چھوڑنا چاہیں گے اور اس کی آنکھوں کو ایک اور ہفتے تک تکلیف ہوگی۔ Dockerfile، یقینا، اس سے بھی بدتر ہو سکتا ہے، کمال کی کوئی حد نہیں ہے. لیکن ایک آغاز کے لئے، یہ کرے گا.

میں گریگوری آسٹر کے ایک اقتباس کے ساتھ ختم کرنا چاہوں گا:

اگر آپ کو ابھی تک یقین نہیں ہے۔
ہم نے زندگی کا راستہ چنا
اور تم نہیں جانتے کیوں؟
اپنا مزدوری سفر شروع کریں،
دالانوں میں روشنی کے بلب توڑ دو -
لوگ آپ کو "شکریہ" کہیں گے۔
آپ لوگوں کی مدد کریں گے۔
بجلی بچائیں۔

ماخذ: www.habr.com

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