Docker: torohevitra ratsy

Docker: torohevitra ratsy

Fony aho nianatra nitondra fiara, tamin'ny lesona voalohany, ny mpampianatra dia nandeha tany amin'ny sampanan-dalana nivadika, ary avy eo nilaza fa tsy tokony hanao izany - na oviana na oviana. Tadidiko avy hatrany io fitsipika io ary nandritra ny androm-piainako.

Mamaky ny "Toro-hevitra ratsy" nataon'i Grigory Oster ho an'ny ankizy ianao, ary hitanao fa mora sy mazava ho azy fa tsy tokony hanao izany izy ireo.

Betsaka ny lahatsoratra nosoratana momba ny fomba fanoratana tsara ny Dockerfile. Saingy tsy nahita torolΓ lana momba ny fanoratana Dockerfiles diso aho. Fenoiko io banga io. Ary angamba amin'ireo tetikasa mahazo fanohanana aho dia ho vitsy kokoa ny dockerfiles toy izany.

Ny endri-tsoratra rehetra, ny toe-javatra ary ny Dockerfile dia foronina. Raha fantatrao ny tenanao dia miala tsiny.

Mamorona Dockerfile, mampidi-doza sy mahatsiravina

Peter (Senior java/rubby/php developer): Ry mpiara-miasa Vasily, efa nampiditra mody vaovao ho an'i Docker ve ianao?
Vasily (junior): Tsia, tsy nanam-potoana aho, tsy azoko an-tsaina izany amin'ity Docker ity. Be dia be ny lahatsoratra momba izany, mandrebireby.

Peter: Efa nisy fe-potoana farany izahay herintaona lasa izay. MamelΓ  ahy hanampy anao, ho hitantsika ao anatin'ny dingana izany. Lazao ahy izay tsy mety aminao.

Vasily: Tsy afaka misafidy sary fototra aho mba ho kely indrindra, fa manana izay rehetra ilainao.
Peter: Raiso ny sary ubuntu fa manana izay ilainao rehetra. Ary izay zavatra be dia be tsy ilaina dia ho tonga any aoriana. Ary aza adino ny mametraka ny mari-pamantarana farany mba ho farany hatrany ny dikan-teny.

Ary ny andalana voalohany dia hita ao amin'ny Dockerfile:

FROM ubuntu:latest

Peter: Inona no manaraka, inona no nampiasainay hanoratana ny module?
Vasily: Noho izany, ruby, misy mpizara tranonkala ary tokony hatomboka ny daemon serivisy roa.
Peter: Eny, inona no ilaintsika: ruby, bundler, nodejs, imagemagick ary inona koa ... Ary miaraka amin'izay koa, manaova fanavaozana mba hahazoana fonosana vaovao.
Vasily: Ary tsy hamorona mpampiasa izahay mba tsy ho eo ambanin'ny faka?
Peter: Adala, dia mbola mila adala amin'ny zo ianao.
Vasily: Mila fotoana aho, eo amin'ny 15 minitra, mba hanangona azy rehetra ho baiko iray, namaky aho fa ...
(Nosakanan'i Petera tamin-katsaram-panahy ilay zandriny malina sy tena hendry.)
Peter: Soraty amin'ny baiko samihafa, ho mora kokoa ny mamaky.

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

Avy eo i Igor Ivanovich, DevOps (fa Ops maro kokoa noho ny Dev), dia niditra tao amin'ny birao niantsoantso hoe:

AI: Petya, namaky ny angon-drakitra momba ny sakafo indray ny mpamorona anao, rahoviana no hifarana izany...

Taorian'ny fifandonana kely, Igor Ivanovich mangatsiaka ary manomboka mahita izay ataon'ny mpiara-miasa aminy eto.

AI: Inona no ataonao?
Vasily: Peter dia manampy ahy hamorona Dockerfile ho an'ny module vaovao.
AI: Avelao aho hijery ... Inona no nosoratanao teto, diovinao miaraka amin'ny baiko misaraka ny tahiry, sosona fanampiny ity ... Fa ahoana ny fametrahana dependencies raha tsy nanao kopia ny Gemfile ianao! Ary amin'ny ankapobeny dia tsy tsara izany.
Peter: Masìna ianao, mandehana amin'ny raharahanao, ho fantatray izany.

Nisento tamim-pahoriana i Igor Ivanovich ary nandeha nitady izay namaky ny angon-drakitra.

Peter: Eny, marina ny teniny momba ny kaody, mila atsipintsika amin'ny sary. Ary andao hametraka ssh sy mpanara-maso avy hatrany, raha tsy izany dia hanomboka ny daemons.

Vasily: Avy eo dia handika ny Gemfile sy Gemfile.lock aloha aho, dia hametraka ny zava-drehetra, ary avy eo dia handika ny tetikasa manontolo. Raha tsy miova ny Gemfile dia hesorina amin'ny cache ny sosona.
Peter: Nahoana ianareo rehetra no miaraka amin'ireo sosona ireo, kopia indray mandeha ny zava-drehetra. Adikao avy hatrany. Ny andalana voalohany indrindra.

Toy izao ny 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/* 

Petera: Dia ahoana indray? Manana config ho an'ny mpanara-maso ve ianao?
Vasily: Tsia, tsia. Fa hataoko haingana.
Petera: Dia hataonao izany. Andeha isika hanao sketch ny script init izay hanomboka ny zava-drehetra. Eny ary, manomboka ssh ianao, miaraka amin'ny nohup, mba ahafahantsika mifandray amin'ny kaontenera ary mahita izay tsy nety. Dia mandehana mpanara-maso toy izany koa. Eny ary, mandehana mpandeha fotsiny ianao.
F: Fa namaky aho fa tokony hisy dingana iray, ka ho fantatry ny Docker fa nisy zavatra tsy nety ary afaka mamerina ny fitoeran-javatra.
P: Aza manelingelina ny lohanao amin'ny tsy misy dikany. Ary amin'ny ankapobeny, ahoana? Ahoana no anaovanao izany rehetra izany amin'ny dingana iray? Avelao i Igor Ivanovich hieritreritra momba ny fahamarinan-toerana, tsy misy dikany ny mahazo karama. Ny asantsika dia ny manoratra kaody. Ary amin'ny ankapobeny, avelao izy hisaotra fa nanoratra ny Dockefile ho azy izahay.

10 minitra sy horonan-tsary roa momba ny saka.

F: Nataoko ny zava-drehetra. Nanampy fanehoan-kevitra bebe kokoa aho.
P: Asehoy ahy!

Dika farany amin'ny 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: Tsara, tiako izany. Ary ny fanehoan-kevitra dia amin'ny teny Rosiana, mora sy azo vakina, ny rehetra dia hiasa toy izany. Nampianatra anao ny zava-drehetra aho, azonao atao ny manao ny ambiny. Andao hisotro kafe...

Eny, manana Dockerfile mahatsiravina tanteraka isika izao, ny fahitana izay hahatonga an'i Igor Ivanovich te hiala ary ny masony dia handratra mandritra ny herinandro iray. Ny Dockerfile, mazava ho azy, dia mety ho ratsy kokoa aza, tsy misy fetra ny fahalavorariana. Fa ho fanombohana dia hanao izany.

Te-hifarana amin'ny teny nalaina avy amin'i Grigory Oster aho:

Raha mbola tsy azonao antoka
Nifidy ny lalana eo amin'ny fiainana isika,
Ary tsy fantatrao ny antony
Manomboka ny asanao,
Tapaho ny takamoa eny amin'ny lalantsara -
Hiteny "Misaotra" aminao ny olona.
Hanampy ny vahoaka ianao
Mitsitsy herinaratra.

Source: www.habr.com

Add a comment