ڊڪر: خراب صلاح

ڊڪر: خراب صلاح

جڏهن مان ڪار هلائڻ سکي رهيو هئس، ته پهرئين سبق ۾ ئي استاد ريورس ۾ چونڪ تي چڙهيو، ۽ پوءِ چيائين ته توکي ائين نه ڪرڻ گهرجي- هرگز نه. مون کي اهو قاعدو فوري طور تي ياد آهي ۽ منهنجي باقي زندگي لاء.

توهان پڙهو ”خراب صلاح“ گريگوري آسٽر پاران ٻارن کي، ۽ توهان ڏسندا آهيو ته ڪيتري آساني سان ۽ قدرتي طور تي اهو انهن تي اچي ٿو ته انهن کي اهو نه ڪرڻ گهرجي.

ڊاڪر فائل کي صحيح طريقي سان ڪيئن لکڻ لاءِ ڪيترائي مضمون لکيا ويا آهن. پر مون کي هدايتون نه آيون ته ڪيئن لکڻ لاءِ غلط Dockerfiles. مان هن خال کي ڀريندس. ۽ ٿي سگهي ٿو ته پروجيڪٽ ۾ جيڪي مون کي مدد ملي ٿي، اتي گهٽ اهڙيون ڊاکر فائلون هونديون.

سڀ ڪردار، حالتون ۽ Dockerfile فرضي آهن. جيڪڏھن توھان پاڻ کي سڃاڻو، معاف ڪجو.

Dockerfile ٺاهڻ، خراب ۽ خوفناڪ

پيٽر (سينئر جاوا/روبي/ پي ايڇ ڊي ڊولپر): ڪوليگ واسيلي، ڇا توهان پهريان ئي هڪ نئون ماڊل اپ لوڊ ڪيو آهي Docker تي؟
واسيلي (جونيئر): نه، مون وٽ وقت نه هو، مان ان کي هن ڊاکر سان نه ٿو سمجهي سگهان. ان تي تمام گهڻا مضمون آهن، اهو حيران ڪندڙ آهي.

پيٽر: اسان وٽ هڪ سال اڳ جي آخري حد هئي. مون کي توهان جي مدد ڪرڻ ڏيو، اسان ان کي پروسيس ۾ ڄاڻنداسين. مون کي ٻڌايو ته ڇا توهان لاء ڪم نٿو ڪري.

واسيلي: مان هڪ بنيادي تصوير نه ٿو چونڊي سگهان ته اها گهٽ ۾ گهٽ آهي، پر هر شيءِ آهي جيڪا توهان کي گهربل آهي.
پطرس: ubuntu تصوير وٺو، ان ۾ سڀ ڪجھ آھي جيڪو توھان جي ضرورت آھي. ۽ ڪيتريون ئي غير ضروري شيون بعد ۾ هٿ ۾ اينديون. ۽ تازو ٽيگ لڳائڻ نه وساريو ته جيئن نسخو هميشه جديد هجي.

۽ پهرين لڪير ۾ ظاهر ٿئي ٿو Dockerfile:

FROM ubuntu:latest

پطرس: اڳتي ڇا آهي، اسان پنهنجي ماڊل لکڻ لاءِ ڇا استعمال ڪيو؟
واسيلي: سو روبي، اتي ھڪڙو ويب سرور آھي ۽ ڪجھ سروس ڊيمن کي لانچ ڪيو وڃي.
پيٽر: ها، اسان کي ڪهڙي ضرورت آهي: روبي، بنڊر، نوڊج، اميج ميجڪ ۽ ٻيو ڇا... ۽ ساڳئي وقت، ضرور اپ گريڊ ڪريو نوان پيڪيجز حاصل ڪرڻ لاءِ.
واسيلي: ۽ اسان صارف نه ٺاهينداسين ته جيئن اسان روٽ هيٺ نه ٿينداسين؟
پطرس: ان تي ڀاڙي، پوء توهان اڃا تائين حقن جي چوڌاري بيوقوف ڪرڻو پوندو.
واسيلي: مون کي وقت جي ضرورت آهي، اٽڪل 15 منٽ، انهن سڀني کي گڏ ڪرڻ لاء هڪ حڪم ۾، مون پڙهيو آهي ...
(پطرس بي رحمي سان محتاط ۽ تمام هوشيار جونيئر کي روڪي ٿو.)
پيٽر: الڳ ڪمن ۾ لکو، پڙهڻ ۾ آسان ٿيندو.

Dockerfile وڌي ٿو:

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/*

پوءِ Igor Ivanovich، DevOps (پر ديو کان وڌيڪ Ops)، آفيس ۾ دٻجي دٻجي ٿو:

AI: پيٽيا، توهان جي ڊولپرز فوڊ ڊيٽابيس کي ٻيهر ٽوڙي ڇڏيو، اهو ڪڏهن ختم ٿيندو ...

هڪ ننڍڙي جھڙپ کان پوء، Igor Ivanovich ٿڌو ٿي ويو ۽ اهو معلوم ڪرڻ شروع ڪيو ته سندس ساٿي هتي ڇا ڪري رهيا آهن.

AI: توهان ڇا ڪري رهيا آهيو؟
واسيلي: پطرس مون کي مدد ڪري رهيو آهي هڪ Dockerfile ٺاهي هڪ نئين ماڊل لاء.
AI: مون کي هڪ نظر وجهڻ ڏيو... توهان هتي ڇا لکيو آهي، توهان هڪ الڳ ڪمانڊ سان مخزن کي صاف ڪيو، هي هڪ اضافي پرت آهي... پر جيڪڏهن توهان Gemfile کي نقل نه ڪيو آهي ته توهان انحصار کي ڪيئن انسٽال ڪندا! ۽ عام طور تي، اهو سٺو ناهي.
پيٽر: مھرباني ڪري پنھنجي ڪاروبار بابت وڃو، اسان ان کي ڪنھن طرح ڄاڻائينداسين.

Igor Ivanovich اداسيءَ سان سڪي ٿو ۽ اهو معلوم ڪرڻ ڇڏي ٿو ته ڪنهن ڊيٽابيس کي ٽوڙيو.

پطرس: ها، پر هو ڪوڊ بابت صحيح هو، اسان کي ان کي تصوير ۾ ڌڪڻ جي ضرورت آهي. ۽ اچو ته فوري طور تي ssh ۽ سپروائيزر انسٽال ڪريو، ٻي صورت ۾ اسان ڊيمن کي شروع ڪنداسين.

واسيلي: پوءِ مان پھريائين ڪاپي ڪندس Gemfile ۽ Gemfile.lock، پوءِ مان سڀڪنھن شيءِ کي انسٽال ڪندس، ۽ پوءِ مان پوري پروجيڪٽ کي نقل ڪندس. جيڪڏهن Gemfile تبديل نه ٿيندي، پرت کي ڪيش مان ورتو ويندو.
پطرس: توهان سڀني کي انهن پرتن سان ڇو آهيو، هڪ ڀيرو هر شي کي نقل ڪريو. ڪاپي فوري طور تي. بلڪل پهرين لائن.

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
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/* 

پطرس: پوءِ اڳتي ڇا؟ ڇا توهان وٽ نگران لاءِ ترتيب آهن؟
واسيلي: نه، نه. پر مان جلدي ڪندس.
پطرس: پوءِ تون ئي ڪندين. اچو ته ھاڻي ٺاھيون انٽ اسڪرپٽ جيڪو سڀ ڪجھ شروع ڪندو. ٺيڪ آهي، تنهنڪري توهان شروع ڪيو ssh، nohup سان، ته جيئن اسان ڪنٽينر سان ڳنڍي سگهون ۽ ڏسو ته ڇا غلط ٿيو. پوءِ سپروائيزر به ساڳيءَ طرح هلايو. چڱو، پوءِ تون بس مسافر ڊوڙين.
عبرت: پر مون پڙهيو آهي ته هڪ عمل هجڻ گهرجي، تنهنڪري ڊاکر کي خبر پوندي ته ڪجهه غلط ٿي ويو آهي ۽ ڪنٽينر کي ٻيهر شروع ڪري سگهي ٿو.
ج: پنهنجي سر کي بکواس نه ڪريو. ۽ عام طور تي، ڪيئن؟ توهان اهو سڀ ڪجهه هڪ عمل ۾ ڪيئن هلائيندا آهيو؟ اچو ته 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

تبصرو شامل ڪريو