
Kur isha duke mĂ«suar tĂ« drejtoja makinĂ«n, nĂ« shkallĂ«n e parĂ« instruktorit doli pas njĂ« drejtkĂ«ndi dhe pastaj tha se nuk duhej tĂ« veprohej kĂ«shtu â asnjĂ«herĂ«. Rregulli kĂ«tĂ« e mbajta menjĂ«herĂ« nĂ« mend dhe pĂ«r gjithĂ« jetĂ«n.
Lexon fëmijëve "Këshilla të dëmshme" të Grigorit Oster dhe sheh se sa lehtë dhe natyrshëm arrijnë ata të kuptojnë se nuk duhet të veprojnë kështu.
Për mënyrën e duhur për të shkruar Dockerfile ka shumë artikuj. Por nuk kam parë udhëzime se si të shkruani Dockerfile të gabuara. Po e plotësoj këtë boshllëk. Dhe, ndoshta, në projektet që marr për mbështetje, do të jetë më pak Dockerfile të tillë.
Të gjithë heronjtë, situatat dhe Dockerfile janë të sajuara. Nëse e ke njohur veten, më vjen keq.
Krijojmë një Dockerfile, të zymtë dhe të frikshëm.
Pjetër (Senior java/ruby/php developer): Kolegu Vasili, a e ke ngarkuar modulën e re në Docker?
Vasili (junior): Jo, nuk kam arritur, nuk arrij të kuptoj këtë Docker. Ka shumë artikuj për të, sytë më janë lodhur.
Pjetër: Afati ynë kaloi një vit më parë. Ejani të ndihmoj, gjatë procesit do të kuptojmë. Trego se çfarë nuk po funksionon.
Vasili: Nuk mund të zgjedh figurën bazë, duhet të jetë minimale, por të ketë gjithçka që nevojitet.
Pjetër: Merr figurën ubuntu, ka gjithçka që na nevojitet. Nëse ka shumë të tepërta, mund të jenë të dobishme më vonë. Dhe mos harro të vendosësh etiketën latest, që të jesh gjithmonë me versionin e fundit.
Dhe në Dockerfile shfaqet rreshti i parë:
FROM ubuntu:latestPjetĂ«r: ĂfarĂ« ka mĂ« pas, mbi çfarĂ« kemi shkruar modulĂ«n tonĂ«?
Vasili: Po ruby, aty duhet të fillojnë një server web dhe disa demonë shërbimi.
Pjetër: Ah, mirë, çfarë na nevojitet: ruby, bundler, nodejs, imagemagick dhe çka tjetër... Dhe gjithashtu, bëj upgrade, që të sigurosh paketat e reja.
Vasili: A nuk do krijojmë një përdorues tjetër, që të mos jetë nga root?
Pjetër: Lëreni, pastaj do të merremi me të drejtat.
Vasili: Më duhet kohë, rreth 15 minuta, për ta bashkuar këtë në një komandë, kam lexuar se...
(Pjetër ndërpritet ashpër nga juniori i detajuar dhe shumë i mençur.)
Pjetër: Shkruaj komanda të veçanta, do të lexohet edhe më lehtë.
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/*Në këtë moment, ka një ndërhyrje nga Igor Ivanoviç, DevOps (por më shumë Ops sesa Dev), me thirrje:
II: Petya, zhvilluesit tuaj përsëri shkatërruan databazën prodhuese, kur do të përfundojë kjo...?
Pas një shkëmbimi të shkurtër, Igor Ivanoviç qetësohet dhe fillon të hetojë se çfarë po bëjnë kolegët.
II: ĂfarĂ« po bĂ«ni?
Vasili: Pjetër po më ndihmon të përgatit një Dockerfile për modulën e re.
II: MĂ« lĂ«r tĂ« shikoj... ĂfarĂ« keni shkruar kĂ«tu, ju po pastroni depozitat me komandĂ« tĂ« veçantĂ«, kjo Ă«shtĂ« njĂ« shtresĂ« shtesĂ«... Si vendosni varĂ«sitĂ«, nĂ«se nuk keni kopjuar Gemfile! Dhe nĂ« pĂ«rgjithĂ«si, kjo nuk shkon asnjĂ«herĂ«.
Pjetër: Ju lutem shkojini punëve tuaja, ne do të merremi me këtë.
Igor Ivanoviç shqetësohet dhe largohet për të zgjidhur se kush e ka shkatërruar databazën.
Pjetër: Po, por ka vetëm të drejtë për kodin, duhet ta vendosim në imazh. Dhe le të vendosim direkt ssh dhe supervisor, se si do t'i nisnim demonat.
Vasili: Unë fillimisht do të kopjoj Gemfile dhe Gemfile.lock, pastaj do të instalohem të gjitha, dhe më pas kopjoj do të gjithë projektin. Nëse Gemfile nuk ndryshon, do të merret nga memoria.
PjetĂ«r: ĂfarĂ« keni me kĂ«to shtresa, kopjoni tĂ« gjithanjen, 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: Mirë, çfarë ndodh më pas. A ke konfigurimet për supervisor?
Vasili: Jo, nuk i kam. Por do ta bëj shpejt.
Pjetër: Do t'i bësh më vonë. Le të shkruajmë tani skenari init që do të nisë gjithçka. Pra, duhet të nisësh ssh, me nohup, që të mund të lidhemi me kontejnerin dhe të shohim se çfarë ka shkuar keq. Pastaj gjithashtu nisni supervisor. Por më pas thjesht do të nisni passenger.
V: Por kam lexuar se duhet të jetë një proces, në mënyrë që Docker të dijë se diçka ka shkuar keq dhe të mund të ribëjë kontejnerin.
P: Mos u shqetëso për këtë, e në përgjithësi, si? Si do t'i nisësh të gjitha në një proces? Le të shqetësohet Igor Ivanoviç për stabilitetin, nuk është pa arsye që merr pagë. Punë e jona është të shkruajmë kod. E në përgjithësi, le të thotë faleminderit që e kemi shkruar Dockefile për të.
Pas 10 minutash dhe dy videove të kafshëve.
V: E kam bërë gjithçka. Kam shtuar disa komente.
P: Tregoje!
Versioni i ri i Dockerfile:
FROM ubuntu:latest
# Kopjojmë kodin burimor
COPY ./ /app
WORKDIR /app
# Përditësojmë listën e paketave
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
# Pastrojmë cache-t
RUN rm -rf /usr/local/bundle/cache/*.gem
RUN apt-get clean
RUN rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
# Nisim skriptin, në fillim të kontejnerit, i cili do të nisë të gjitha të tjerat.
CMD ["/app/init.sh"]P: ShumĂ« mirĂ«, mĂ« pĂ«lqen. Dhe komentet nĂ« rusisht, janĂ« tĂ« dobishme dhe tĂ« lehta pĂ«r t'u lexuar, mirĂ« do ishte tĂ« gjithĂ« tĂ« punonin kĂ«shtu. TĂ« kam mĂ«suar gjithçka, tani do tĂ« jesh nĂ« gjendje ta bĂ«sh vetĂ«. TĂ« shkojmĂ« tĂ« pijmĂ« kafeâŠ
Ja, kemi marrë një Dockerfile të përsosur të tmerrshëm, nga pamja e të cilit Igor Ivanoviç do të dëshirojë të japë dorëheqjen dhe sytë e tij do të lëndohen për një javë. Sigurisht, Dockerfile mund të kishte qenë edhe më keq, nuk ka kufij për përsosmëri. Por për fillim, mjafton kështu.
Dëshiroj të përfundoj me një citat nga Grigori OSTER:
Nëse ende nuk keni vendosur
Në jetë rrugën tuaj,
Dhe nuk e dini se nga të filloni,
Rrugën tuaj të punës,
Thyejini llampat nĂ« shkallĂ«t â
Njerëzit do t'ju thojnë "Faleminderit".
Do t'i ndihmoni njerëzit
Të ruajnë energjinë elektrike.
Burimi: habr.com
