
Kur u mësova të ngas makinën, në mësimin e parë instruktorja doli në kryqëzim prapa dhe më pas tha se nuk është e lejuar asnjëherë të bëj kështu. Ky rregull e mbajta mend menjëherë dhe për gjithë jetën.
Lexon fëmijëve "Këshillat e Dëmshme" të Grigori Osterit dhe sheh se sa lehtë dhe natyrshëm u arrin atyre të kuptojnë se nuk duhet të bëjnë kështu.
Për mënyrën e duhur të shkruarjes së Dockerfile, janë shkruar shumë artikuj. Por më nuk më janë dukur udhëzime për si të shkruhen Dockerfile të gabuara. Po e plotësoj këtë zbrazëtinë. Dhe ndoshta në projektet që marr për mbështetje, do të ketë më pak të tillë.
Të gjithë heronjtë, situatat dhe Dockerfile janë imagjinare. Nëse njohesh, më fal.
Krijojmë Dockerfile, të frikshëm dhe të tmerrshëm.
Petri (Senior java/ruby/php developer): Kolegu Vasily, a e ke ngarkuar modulën e re në Docker?
Vasily (junior): Jo, nuk kam arritur, nuk po e kuptoj dot këtë Docker. Ka aq shumë artikuj rreth tij, sytë më humbasin.
Petri: Ne e kaluam afatin një vit më parë. Hajde të ndihmoj, në proces do të kuptojmë. Të tregosh çfarë nuk të del.
Vasily: Nuk mund të zgjedh imazhin bazë, që të jetë minimal, por të ketë gjithçka që nevojitet.
Petri: Merr imazhin ubuntu, aty ka gjithçka që duhet. Edhe nëse ka shumë të panevojshme, më vonë do të përdoren. Dhe mos harro të vendosësh etiketën latest, në mënyrë që të kesh versionin më të fundit.
Dhe në Dockerfile shfaqet rreshti i parë:
FROM ubuntu:latestPetri: ĂfarĂ« ka mĂ« tej, me çfarĂ« e shkruam modulĂ«n tonĂ«?
Vasily: ĂshtĂ« ruby, aty duhet tĂ« niset njĂ« server ĐČДб dhe disa demonĂ« ndihmĂ«s.
Petri: Ok, çfarë na nevojitet: ruby, bundler, nodejs, imagemagick dhe çfarë tjetër... Dhe njëkohësisht, bëj një upgrade për të marrë me siguri paketat e reja.
Vasily: Nuk do të krijojmë një përdorues, për të mos punuar nën root?
Petri: Lëre, pastaj do të duhen më shumë për të rregulluar të drejtat.
Vasily: Më duhet pak kohë, 15 minuta, për ta bërë këtë të gjithë në një komandë, kam lexuar se...
(Petri ndërpret ashpër junior-in e detajuar dhe shumë të mençur.)
Petri: Shkruaj në komandat e veçanta, do të jetë më e lehtë për tu lexuar.
Dockerfile po rritet:
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/*Këtu në kabinet hyjnë Igor Ivanoviç, DevOps (por më shumë Ops se Dev), me britma:
II: Petya, zhvilluesit tuaj përsëri shkatërruan DB-në prodhuese, kur do të përfundojë kjo...
Pas një përleshje të vogël, Igor Ivanoviç qetësohet dhe fillon të zbulojë se çfarë po bëjnë kolegët këtu.
AI: ĂfarĂ« po bĂ«ni?
Vasili: Pjetër po më ndihmon të përgatis Dockerfile për modul të ri.
AI: MĂ« lejoni tĂ« shoh⊠ĂfarĂ« keni shkruar kĂ«tu, ju pastaj e pastroni depozitat me njĂ« ekip tĂ« veçantĂ«, ky Ă«shtĂ« njĂ« ndihmĂ« shtesë⊠Si do t'i vendosni varĂ«sitĂ« nĂ«se nuk e keni kopjuar Gemfile-in! Dhe pĂ«r tĂ«rĂ«si, kjo nuk Ă«shtĂ« nĂ« rregull.
Pjetër: Ju lutem, shkoni për punë tuajat, ne do të merremi me këtë.
Igor Ivanoviç nxjerr një sigh të thellë dhe largohet për të zbuluar kush e ka thyer BD-në.
Pjetër: Po, por për kodin e tha edhe të vërtetën, duhet ta fusim në imazh. Dhe le të vendosim menjëherë ssh dhe supervisor, përndryshe si do t'i ndajmë demonët.
Vasili: Atëherë së pari do të kopjoj Gemfile dhe Gemfile.lock, pastaj do të vendos gjithçka dhe më pas do të kopjoj tërë projektin. Nëse Gemfile nuk ndryshon, kapaku do të merret nga cache.
PjetĂ«r: ĂfarĂ« po thoni me kĂ«to kapakĂ«? Kopjoni gjithçka menjĂ«herĂ«. Kopjoni menjĂ«herĂ«. Me rreshtin e parĂ«.
Dockerfile tani duket kështu:
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/* Pjetër: Po, çfarë do të bëjmë tani? A ke konfigurime për supervisor?
Vasili: Jo, nuk kam. Por do ta bëj shpejt.
Pjetër: Më vonë do ta bësh. Tani le ta shkruajmë një skripti init, që do të nisë gjithçka. Pra, do të nisësh ssh me nohup, që të mund të lidhemi me kontejnerin dhe të shohim çfarë ka shkuar keq. Pastaj, po ashtu nis edhe supervisor-in. Dhe pastaj thjesht do të nisesh passenger.
V: Por kam lexuar se duhet të ketë një proces, kështu që Docker do të dijë se diçka shkoi keq, dhe do të mund të rilansohet kontejneri.
P: Mos e mbush kokën me budallallëqe. Dhe për të thënë të drejtën, si? Si do t'i nisi të gjitha këto në një proces? Le ta mendojë për stabilitetin Igor Ivanoviç, ai merr pagë për këtë. Detyra jonë është të shkruajmë kod. Dhe për të thënë të vërtetën, le të thotë faleminderit që e përgatitëm Dockerfile-in për të.
Pas 10 minutash dhe dy videosh për mace.
V: Unë e kam bërë çdo gjë. Shtova më shumë komente.
P: Trego më!
Versioni i ri i Dockerfile-it:
FROM ubuntu:latest
# Kthemi kodin burim
COPY .\/\/app
WORKDIR \/app
# Përditësojmë listën e pakove
RUN apt-get update
# Përditësojmë paketat
RUN apt-get upgrade
# Instalojmë paketat e nevojshme
RUN apt-get -y install libpq-dev imagemagick gsfonts ruby-full ssh supervisor
# Instalojmë bundler
RUN gem install bundler
# Instalojmë nodejs që përdoret për ndërtimin e statikës
RUN curl -sL https:\/\/deb.nodesource.com\/setup_9.x | sudo bash -
RUN apt-get install -y nodejs
# Instalojmë varësitë
RUN bundle install --without development test --path vendor\/bundle
# Pastroni caches
RUN rm -rf \/usr\/local\/bundle\/cache\/*.gem
RUN apt-get clean
RUN rm -rf \/var\/lib\/apt\/lists\/* \/tmp\/* \/var\/tmp\/*
# Ekzekutojmë skriptin, kur containeri nis, që do të fillojë gjithçka tjetër.
CMD ["\/app\/init.sh"]P: ShumĂ« mirĂ«, mĂ« pĂ«lqen. Edhe komentet nĂ« rusisht, tĂ« rehatshme dhe tĂ« lexueshme, tĂ« gjithĂ« tĂ« punonin kĂ«shtu. TĂ« mĂ«sova gjithçka, tani mund tĂ« vazhdosh vetĂ«. Le tĂ« shkojmĂ« tĂ« pimĂ« kafeâŠ
Ja, morĂ«m njĂ« Dockerfile tĂ« pĂ«rkryer e tĂ« tmerrshĂ«m, nga pamja e tĂ« cilit Igor Ivanovich do tĂ« dĂ«shirojĂ« tĂ« largohet dhe do tâi pijnĂ« syte pĂ«r njĂ« javĂ« tjetĂ«r. Dockerfile, sigurisht, mund tĂ« ishte edhe mĂ« i keq, nuk ka kufi pĂ«r pĂ«rkryerĂ«sinĂ«. Por pĂ«r fillim, kĂ«shtu do tâia dalim.
Dua të përfundoj me një citat nga Grigory Oster:
Nëse akoma nuk e keni vendosur
Rrugën në jetë,
Dhe nuk e dini se nga të filloni
Rrugën tuaj të punës,
Goditni llampat nĂ« hyrje â
Njerëzit do t'ju thonë "Faleminderit".
Do t'i ndihmoni popullit
Të ruajnë energjinë elektrike.
Burimi: habr.com
