Docker: zano rakaipa

Docker: zano rakaipa

Pandakanga ndichidzidzira kutyaira motokari, pachidzidzo chekutanga chaicho mudzidzisi akapinda mumharadzano nenhendeshure, ndokuzotaura kuti haufanire kudaro - usambofa. Ndakarangarira mutemo uyu pakarepo uye kwehupenyu hwangu hwose.

Iwe unoverenga "Mazano Akashata" naGrigory Oster kuvana, uye iwe unoona kuti zviri nyore sei uye zvinongoerekana zvasvika pavari kuti havafaniri kuita izvi.

Zvizhinji zvezvinyorwa zvakanyorwa pamusoro pekunyora Dockerfile nemazvo. Asi ini handina kuwana mirairo yekunyora zvisirizvo Dockerfiles. Ndiri kuzadza gap iri. Uye pamwe mumapurojekiti andinogamuchira rutsigiro, pachave neashoma madockerfiles akadaro.

Ese mavara, mamiriro uye Dockerfile manyepo. Kana iwe uchizviziva iwe pachako, urombo.

Kugadzira Dockerfile, inotyisa uye inotyisa

Peter (Senior java/rubby/php developer): Waanoshanda naye Vasily, watoisa module nyowani kuDocker?
Vasily (junior): Kwete, ndanga ndisina nguva, handikwanise kuzvinzwisisa neDocker iyi. Pane zvinyorwa zvakawanda pazviri, zviri kunetsa.

Peter: Takanga tine nguva yekupedzisira gore rapfuura. Rega ndikubatsire, tichazvinzwisisa mukuita. Ndiudze zvisingakushandire.

Vasily: Handikwanise kusarudza mufananidzo wekutanga kuitira kuti uve mudiki, asi une zvese zvaunoda.
Peter: Tora mufananidzo we ubuntu, une zvese zvaunoda. Uye izvo zvinhu zvakawanda zvisingakoshi zvichauya zvinobatsira gare gare. Uye usakanganwa kuisa tag yazvino kuitira kuti vhezheni igare iri yazvino.

Uye mutsara wekutanga unoonekwa muDockerfile:

FROM ubuntu:latest

Peter: Chii chinotevera, chii chatakashandisa kunyora module yedu?
Vasily: Saka ruby, kune webhu server uye akati wandei madhimoni ebasa anofanirwa kutangwa.
Peter: Hongu, chii chatinoda: ruby, bundler, nodejs, imagemagick uye chii chimwe ... Uye panguva imwe chete, ita kusimudzira kuti uwane zvechokwadi mapepa matsva.
Vasily: Uye isu hatisi kugadzira mushandisi kuti isu tisave pasi pemidzi?
Peter: Fuck it, saka iwe uchiri kupusa nekodzero.
Vasily: Ndinoda nguva, anenge maminetsi gumi nemashanu, kuti ndizviise pamwe chete mukuraira kumwe, ndakaverenga kuti...
(Petro anopindira zvine hutsinye uye ane hungwaru junior.)
Peter: Nyora mumirairo yakasiyana, zvichava nyore kuverenga.

Dockerfile inokura:

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

Ipapo Igor Ivanovich, DevOps (asi akawanda Ops kupfuura Dev), anopinda muhofisi achidanidzira:

AI: Petya, vagadziri vako vakatyora dhatabhesi rekudya zvakare, izvi zvichapera rinhi ...

Mushure mokukakavara kuduku, Igor Ivanovich anotonhora uye anotanga kuziva kuti vamwe vake vari kuitei pano.

AI: Uri kuitei?
Vasily: Peter ari kundibatsira kugadzira Dockerfile yemodule nyowani.
AI: Rega nditarise ... Chii chawakanyora pano, iwe unochenesa repository nemurairo wakasiyana, iyi ndiyo imwe nhanho ... Asi iwe unoisa sei kutsamira kana usina kukopa Gemfile! Uye kazhinji, izvi hazvina kunaka.
Peter: Ndokumbira uende nezvebhizinesi rako, isu tichazviona neimwe nzira.

Igor Ivanovich anogomera zvinosuruvarisa uye anosiya kuti aone kuti ndiani akaputsa dhatabhesi.

Peter: Hongu, asi akanga akarurama pamusoro pekodhi, tinofanira kuisundira mumufananidzo. Uye ngatiisei nekukurumidza ssh uye maneja, zvikasadaro isu tichatanga madhimoni.

Vasily: Ipapo ini ndichatanga kukopa iyo Gemfile uye Gemfile.lock, ipapo ini ndichaisa zvese, uye ipapo ini ndichakopa iyo yese chirongwa. Kana iyo Gemfile ikasachinja, iyo layer ichatorwa kubva kucache.
Peter: Sei imi mese mune zvidimbu izvi, tevedzera zvese kamwechete. Kopa pakarepo. Mutsara wekutanga chaiwo.

Iyo Dockerfile ikozvino inoita seizvi:

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: Saka chii chinotevera? Une maconfigs evatariri here?
Vasily: Kwete, kwete. Asi ndichazviita nekukurumidza.
Peter: Ipapo uchazviita. Ngatitorei izvozvi init script inovhura zvese. Zvakanaka, saka unotanga ssh, ne nohup, kuti tigone kubatana nemudziyo uye tione kuti chii chakashata. Zvadaro shandisa mutariri nenzira imwecheteyo. Zvakanaka, wobva wangomhanya passenger.
Mubvunzo: Asi ini ndakaverenga kuti panofanirwa kuve nekuita imwe chete, saka Docker achaziva kuti pane chakashata uye anogona kutangazve mudziyo.
P: Usanetse musoro wako nezvisina maturo. Uye kazhinji, sei? Unozvifambisa sei zvese izvi mune imwe nzira? Rega Igor Ivanovich afunge nezvekugadzikana, hazvisi pasina kuti anogamuchira muhoro. Basa redu nderekunyora kodhi. Uye kazhinji, regai ati mazvita kuti takamunyorera iyo Dockefile.

Maminitsi gumi uye mavhidhiyo maviri nezve katsi gare gare.

Mubvunzo: Ndakaita zvose. Ndakawedzera mamwe macomments.
P: Ndiratidze!

Yazvino vhezheni yeDockerfile:

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: Hongu, ndinoifarira. Uye zvirevo zviri muRussia, zviri nyore uye zvinoverengeka, munhu wese angashanda saizvozvo. Ndakakudzidzisa zvose, iwe unogona kuita zvimwe iwe pachako. Handei tinonwa coffee...

Zvakanaka, iye zvino tine Dockerfile inotyisa zvakakwana, kuona kuchaita kuti Igor Ivanovich ade kurega uye maziso ake achakuvadza kweimwe vhiki. Iyo Dockerfile, hongu, inogona kutonyanya kuipa, hapana muganho mukukwana. Asi kutanga, izvi zvichaita.

Ndinoda kupedzisa nemashoko kubva kuna Grigory Oster:

Kana usati wava nechokwadi
Isu takasarudza nzira muhupenyu,
Uye iwe hauzive kuti sei
Tanga rwendo rwako rwebasa,
Pwanya magirobhu emwenje mumakoridho -
Vanhu vachati "Ndinokutendai" kwauri.
Unozobatsira vanhu
Chengetedza magetsi.

Source: www.habr.com

Voeg