Docker: şîreta xerab

Docker: şîreta xerab

Dema ku ez fêrî ajotina otomobîlê bûm, di dersa yekem de mamoste bi berevajî ajot nav xaçerê, û dûv re got ku hûn wiya nekin - qet qet. Ev qayde tavilê û heta dawiya jiyana xwe hat bîra min.

Hûn "Şêwirdariya Xirab" ya Grigory Oster ji zarokan re dixwînin, û hûn dibînin ku çiqas bi hêsanî û xwezayî ji wan re tê ku divê ew vê yekê nekin.

Gelek gotar hatine nivîsandin ka meriv çawa Dockerfile rast binivîse. Lê ez li rêwerzanan nehatim ka meriv çawa Dockerfiles çewt dinivîse. Ez vê valahiyê tijî dikim. Û dibe ku di projeyên ku ez piştgirî distînim de, pelên docker-ên wusa kêmtir bin.

Hemî karakter, rewş û Dockerfile xeyalî ne. Heke hûn xwe nas dikin, bibore.

Afirandina Dockerfile, xedar û tirsnak

Petrûs (pêşvebirê java/rubby/php ya payebilind): Heval Vasily, te berê modulek nû li Docker barkir?
Vasily (biçûk): Na, wextê min tune bû, ez nikarim bi vê Docker re fêhm bikim. Gelek gotar li ser hene, ew gêj e.

Petrûs: Berî salekê muhleta me hebû. Bihêle ez alîkariya te bikim, em ê di vê pêvajoyê de fêm bikin. Ji min re bêje çi ji te re naxebite.

Vasily: Ez nikarim wêneyek bingehîn hilbijêrin da ku ew hindik be, lê her tiştê ku hûn hewce ne hene.
Petrûs: Wêneyê ubuntu bistînin, her tiştê ku hûn hewce ne hene. Û ya ku gelek tiştên nepêwist be dê paşê bi kêr were. Û ji bîr nekin ku etîketa herî dawî bixin da ku guherto her gav herî dawî be.

Û rêza yekem di Dockerfile de xuya dike:

FROM ubuntu:latest

Petrûs: Dûv re çi ye, me ji bo nivîsandina modula xwe çi bikar anî?
Vasily: Ji ber vê yekê yaqût, serverek malperê heye û divê çend şeytanên karûbarê werin destpêkirin.
Peter: Erê, em çi hewce ne: yaqût, bundler, nodejs, imagemagick û çi din... Û di heman demê de, nûvekirinek bikin ku bê guman pakêtên nû bistînin.
Vasily: Û em ê bikarhênerek neafirînin da ku em nebin bin root?
Petrûs: Bixapîne, wê hingê divê hûn hîn jî bi mafan bixapînin.
Vasily: Ji min re dem lazim e, bi qasî 15 hûrdem, ku ez hemî di yek fermanê de bixim hev, min xwend ku ...
(Peter bi bêaqilî ciwanê hûrbîn û pir biaqil qut dike.)
Petrûs: Di emrên cuda de binivîsin, ew ê hêsantir be.

Dockerfile mezin dibe:

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

Dûv re Igor Ivanovich, DevOps (lê ji Dev bêtir Ops), di nav ofîsê de diteqe û diqîre:

AI: Petya, pêşdebirên we dîsa databasa xwarinê şikandin, dê kengî ev biqede...

Piştî pevçûnek piçûk, Igor Ivanovich sar dibe û dest pê dike ku fêr bibe ka hevkarên wî li vir çi dikin.

AI: Tu çi dikî?
Vasily: Peter ji min re dibe alîkar ku ji bo modulek nû Dockerfile biafirînim.
AI: Bihêle ez lê binêrim... Te li vir çi nivîsî, tu bi fermanek veqetandî depoyê paqij dike, ev qatek pêvek e... Lê heke we Gemfile kopî nekiriye hûn çawa pêbendiyan saz dikin! Û bi gelemperî, ev ne baş e.
Petrûs: Ji kerema xwe li ser karsaziya xwe biçin, em ê bi rengekî vebêjin.

Igor Ivanovich bi xemgînî axînek dikişîne û dihêle ka kî databasê şikandiye.

Petrûs: Erê, lê ew di derbarê kodê de rast bû, divê em wê bixin nav wêneyê. We em tavilê ssh û çavdêr saz bikin, wekî din em ê dest bi şeytan bikin.

Vasily: Dûv re ez ê pêşî Gemfile û Gemfile.lock kopî bikim, paşê ez ê her tiştî saz bikim, û paşê ez ê tevahiya projeyê kopî bikim. Ger Gemfile neguhere, qat dê ji cache were girtin.
Petrûs: Çima hûn hemî bi van qatan in, her tiştî bi yekcarî kopî bikin. Di cih de kopî bikin. Rêza yekem.

Dockerfile naha bi vî rengî xuya dike:

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

Petrûs: Ji ber vê yekê, paşê çi? Ji bo serpereştyarê mîhengên we hene?
Vasily: Na, na. Lê ez ê zû bikim.
Petrûs: Wê hingê hûn ê bikin. Ka em naha skrîptek destpêkê ya ku dê her tiştî dest pê bike xêz bikin. Baş e, ji ber vê yekê hûn dest bi ssh-ê bikin, bi nohup, da ku em karibin bi konteynerê ve girêbidin û bibînin ka çi xelet derket. Dûv re bi heman rengî çavdêriyê bimeşînin. Welê, hingê hûn tenê rêwiyan dimeşînin.
Pirs: Lê min xwend ku divê pêvajoyek hebe, ji ber vê yekê Docker dê zanibe ku tiştek xelet derket û dikare konteynerê ji nû ve bide destpêkirin.
P: Serê xwe bi bêaqilan neêşîne. Û bi gelemperî, çawa? Hûn van hemûyan di yek pêvajoyê de çawa dimeşînin? Bila Igor Ivanovich li ser aramiyê bifikire, ne ji bo tiştek e ku ew meaş distîne. Karê me nivîsandina kodê ye. Û bi gelemperî, bila ew bêje spas dikim ku me ji bo wî Dockfile nivîsand.

10 hûrdem û du vîdyoyên li ser pisîkan paşê.

Pirs: Min her tişt kiriye. Min bêtir şîrove zêde kir.
P: Nîşan bide min!

Guhertoya herî dawî ya 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: Baş e, ez jê hez dikim. Û şîrove bi rûsî, hêsan û xwendinê ne, her kes dê wusa bixebite. Min her tişt hînî te kir, tu yê mayî bi xwe bikî. Ka em herin qehweyekê vexwin...

Welê, naha me Dockerfileyek bêkêmasî ya tirsnak heye, dîtina wê dê Igor Ivanovich bixwaze dev jê berde û çavên wî dê hefteyek din biêşe. Dockerfile, bê guman, dibe ku hê xirabtir be, ti sînorek bêkêmasî tune. Lê ji bo destpêkê, ev ê bibe.

Ez dixwazim bi gotinek ji Grigory Oster bi dawî bikim:

Heke hûn hîn nebawer in
Me riya jiyanê hilbijart,
Û hûn nizanin çima
Rêwîtiya xwe ya kedê dest pê bike,
Ampên ronahiyê di korîdoran de bişkînin -
Mirov dê ji we re bêje "Spas".
Hûn ê alîkariya gel bikin
Elektrîkê xilas bike.

Source: www.habr.com

Add a comment