Docker: parir ħażin

Docker: parir ħażin

Meta kont qed nitgħallem issuq karozza, fl-ewwel lezzjoni l-għalliem saq fl-intersezzjoni bil-maqlub, u mbagħad qal li m'għandekx tagħmel dan - qatt. Ftakart din ir-regola mill-ewwel u għall-kumplament ta’ ħajti.

Taqra "Parir Ħażin" ta' Grigory Oster lit-tfal, u tara kemm jinftiehem faċilment u b'mod naturali li m'għandhomx jagħmlu dan.

Inkitbu ħafna artikli dwar kif tikteb Dockerfile b'mod korrett. Imma ma ltqajtx ma' struzzjonijiet dwar kif tikteb Dockerfiles żbaljati. Qed nimla dan il-vojt. U forsi fil-proġetti li nirċievi appoġġ, se jkun hemm inqas tali dockerfiles.

Il-karattri, is-sitwazzjonijiet u l-Dockerfile kollha huma fittizji. Jekk tagħraf lilek innifsek, skużani.

Ħolqien ta 'Dockerfile, ominous u terribbli

Peter (Żviluppatur anzjan java/rubby/php): Kollega Vasily, diġà tella’ modulu ġdid fuq Docker?
Vasily (junior): Le, ma kellix ħin, ma nistax nifhem b'dan Docker. Hemm tant artikli fuqha, huwa sturdut.

Peter: Kellna skadenza sena ilu. Ħa ngħinek, aħna ser insemmu fil-proċess. Għidli x'ma jaħdimx għalik.

Vasily: Ma nistax nagħżel immaġni bażika sabiex tkun minima, iżda jkollha dak kollu li għandek bżonn.
Peter: Ħu l-immaġni ubuntu, għandha dak kollu li għandek bżonn. U dak li huwa ħafna affarijiet mhux meħtieġa se jidħlu f'idejn aktar tard. U tinsiex tpoġġi l-aħħar tikketta sabiex il-verżjoni tkun dejjem l-aħħar.

U l-ewwel linja tidher fid-Dockerfile:

FROM ubuntu:latest

Peter: X’inhu jmiss, x’użajna biex niktbu l-modulu tagħna?
Vasily: Allura ruby, hemm server tal-web u għandhom jiġu mnedija koppja ta 'daemons tas-servizz.
Peter: Iva, x'għandna bżonn: ruby, bundler, nodejs, imagemagick u x'iktar... U fl-istess ħin, agħmel upgrade biex definittivament tikseb pakketti ġodda.
Vasily: U mhux se noħolqu utent sabiex ma nkunux taħt l-għeruq?
Peter: Fok, mela għad trid tqarraq bid-drittijiet.
Vasily: Għandi bżonn il-ħin, madwar 15-il minuta, biex ngħaqqadha kollha f'kmand wieħed, naqra li...
(Pietru jinterrompi b'mod goff lill-junior metikoluż u intelliġenti ħafna.)
Pietru: Ikteb fi kmandi separati, ikun aktar faċli biex taqra.

Dockerfile jikber:

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

Imbagħad Igor Ivanovich, DevOps (iżda aktar Ops minn Dev), jinfaqa fl-uffiċċju jgħajjat:

AI: Petya, l-iżviluppaturi tiegħek reġgħu kissru d-database tal-ikel, meta se jispiċċa dan...

Wara ġlied żgħir, Igor Ivanovich jibred u jibda jiskopri x'qed jagħmlu l-kollegi tiegħu hawn.

AI: X'qed tagħmel?
Vasily: Peter qed jgħinni noħloq Dockerfile għal modulu ġdid.
AI: Ħa nagħti ħarsa... X'ktibt hawn, tnaddaf ir-repożitorju b'kmand separat, dan huwa saff addizzjonali... Imma kif tinstalla d-dipendenzi jekk ma kkupjatx il-Gemfile! U b'mod ġenerali, dan mhux tajjeb.
Peter: Jekk jogħġbok mur dwar in-negozju tiegħek, aħna ser insemmu b'xi mod.

Igor Ivanovich daqqa ta’ dispjaċir u jitlaq biex jifhem min kisser id-database.

Peter: Iva, imma kellu raġun dwar il-kodiċi, għandna bżonn nimbottawh fl-immaġini. U ejja immedjatament ninstallaw ssh u supervisor, inkella nibdew id-daemons.

Vasily: Imbagħad l-ewwel se nikkopja l-Gemfile u Gemfile.lock, imbagħad ninstalla kollox, u mbagħad nikkopja l-proġett kollu. Jekk il-Gemfile ma jinbidelx, is-saff jittieħed mill-cache.
Peter: Għaliex intom ilkoll b'dawn is-saffi, ikkupjaw kollox f'daqqa. Ikkopja minnufih. L-ewwel linja.

Id-Dockerfile issa jidher bħal dan:

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

Peter: Mela, xi jmiss? Għandek konfigurazzjonijiet għas-superviżur?
Vasily: Le, le. Imma nagħmilha malajr.
Peter: Imbagħad int tagħmel dan. Ejja issa nfasslu script init li se tniedi kollox. Okay, allura tibda ssh, b'nohup, sabiex inkunu nistgħu nikkonnettjaw mal-kontenitur u naraw x'mar ħażin. Imbagħad mexxi superviżur bl-istess mod. Ukoll, allura inti biss run passiġġier.
Q: Imma naqra li għandu jkun hemm proċess wieħed, għalhekk Docker ikun jaf li xi ħaġa marret ħażin u jista 'jerġa' jibda l-kontenitur.
P: Tiddejjaqx rasek b’nonsense. U b'mod ġenerali, kif? Kif tmexxi dan kollu fi proċess wieħed? Ħalli lil Igor Ivanovich jaħseb dwar l-istabbiltà, mhux ta 'xejn li jirċievi salarju. Ix-xogħol tagħna huwa li niktbu kodiċi. U b'mod ġenerali, ħallih jgħid grazzi li ktibna d-Dockefile għalih.

10 minuti u żewġ filmati dwar qtates aktar tard.

M: Jien għamilt kollox. Żidt aktar kummenti.
P: Urini!

L-aħħar verżjoni ta' 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: Kbir, jogħġobni. U l-kummenti huma bir-Russu, konvenjenti u jinqraw, kulħadd jaħdem hekk. Għallimtek kollox, tista’ tagħmel il-bqija lilek innifsek. Ejja nieħdu ftit kafè...

Ukoll, issa għandna Dockerfile perfettament terribbli, li l-vista tiegħu se tagħmel Igor Ivanovich irid jieqfu u għajnejh se jweġġgħu għal ġimgħa oħra. Il-Dockerfile, ovvjament, jista 'jkun saħansitra agħar, m'hemm l-ebda limitu għall-perfezzjoni. Iżda għall-bidu, dan se jagħmel.

Nixtieq nispiċċa bi kwotazzjoni minn Grigory Oster:

Jekk għadek m'intix ċert
Aħna għażilna t-triq fil-ħajja,
U ma tafx għaliex
Ibda l-vjaġġ tax-xogħol tiegħek,
Kisser il-bozoz tad-dawl fil-hallways -
In-nies jgħidulek "Grazzi".
Int se tgħin lin-nies
Iffranka l-elettriku.

Sors: www.habr.com

Żid kumment