In faallooyinka maqaalkayga Waxaa jiray codsiyo badan oo lagu sharraxay sababta Dockerfile-ka lagu sharraxay uu u ahaa mid aad u xun.
Qaybtii hore oo kooban: Laba horumariye ayaa abuuraya Dockerfile hoos yimaada waqti kama dambays ah. Inta lagu jiro habka, Ops Igor Ivanovich ayaa u yimid iyaga. Dockerfile-ka soo baxay waa mid aad u xun in AI ay qarka u saaran tahay wadne qabad.

Hadda aynu ogaano waxa ka khaldan Dockerfile-kan.
Markaa, toddobaad ayaa ka soo wareegay.
Dev Petya wuxuu kula kulmay Ops Igor Ivanovich makhaayadda koob kafee ah.
P: Igor Ivanovich, miyaad mashquul badan tahay? Waxaan jeclaan lahaa inaan ogaado halka aan ka khaldamay.
AI: Taasi way fiican tahay, inta badan lama kulmin horumariyayaal danaynaya dhiig-miirashada.
Marka hore, aan ku heshiinno dhowr arrimood:
- Fikradda Docker: hal weel - hal hab.
- Weelka oo yaraada, ayaa ka sii wanaagsan.
- Inta badan ee laga soo qaado kaydka, ayaa ka sii fiican.
P: Waa maxay sababta ay tahay in hal hab oo hal weel lagu jiro?
AI: Marka Docker uu bilaabo weelka, waxa ay la socotaa xaalada habsocodka pid 1. Haddi hawshu dhinto, Docker waxa uu isku dayaa in uu dib u bilaabo weelka. Aynu nidhaahno waxaad haysaa codsiyo badan oo ku dhex jira weel, ama codsiga ugu muhiimsani kuma socdo pid 1. Haddii nidaamku dhinto, Docker ma ogaan doono arrintaas.
Haddii aysan jirin su'aalo kale, tus Dockerfile kaaga.
Petya ayaa muujisay:
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/*
RUN rake assets:precompile
# Запускаем скрипт, при старте контейнера, который запустит все остальное.
CMD ["/app/init.sh"]AI: Oh, aan sidan u kala horrayno. Aan ku bilowno safka koowaad:
FROM ubuntu:latestWaxaad qaadataa tag latest. Isticmaalka tag latest waxay keentaa cawaaqib aan la saadaalin karin. Bal qiyaas in sawir-ilaaliye uu dhisto muuqaal cusub oo leh liis software oo kala duwan, sawirkani wuxuu helayaa sumaddii ugu dambeysay. Weelkaaga marka ugu fiican wuxuu joojiyaa dhismihiisa, ugu xumaatana waxaad qabanaysaa kutaanno aan hore u jirin.
Waxaad ka qaadaa sawir leh OS dhamaystiran oo leh software badan oo aan loo baahnayn, kaas oo kor u qaada mugga weelka. Iyo software badan, godad badan iyo dayacanka.
Intaa waxaa dheer, sawirka weyn, inta badan ee ay ku qaadato martigeliyaha iyo diiwaanka (waxaad ku kaydisaa sawirada meel, sax?)
P: Haa, dabcan, waxaan haynaa diiwaan, adiga ayaa dejisay.
AI: Markaa, maxaan ka hadlayay Hal sawir tani maaha mid la dareemi karo, laakiin marka ay jirto dhismo joogto ah, tijaabin iyo geyn, waa la dareemi karaa. Oo haddii aadan haysan habka Ilaah ee AWS, waxaad sidoo kale heli doontaa biil cosmic ah.
Sidaa darteed, waxaad u baahan tahay inaad doorato sawirka ugu habboon, oo leh nooca saxda ah iyo software ugu yar. Tusaale ahaan, qaado: FROM ruby:2.5.5-stretch
P: Oh, waan arkaa. Sidee iyo halkee ayaan ka arki karaa sawirada la heli karo? Sideen ku ogaan karaa midka aan u baahanahay?
AI: Sida caadiga ah sawirada waxaa laga soo qaadaa , ha ku wareerin pornhub :). Inta badan waxaa jira dhowr dhismo oo sawirka ah:
AlpineSawirada waxaa lagu dhisay muuqaal Linux ah oo yar, kaliya 5 MB. Faa'iido darrooyinkeeda: waxaa lagu soo ururiyey iyada oo la fulinayo iyada oo la adeegsanayo libc, xirmooyinka caadiga ah kuma shaqeeyaan. Waxay qaadan doontaa waqti badan in la helo oo la rakibo xirmada loo baahan yahay.
Xoqo: sawirka salka, oo aan loo isticmaalin in lagu dhiso sawirro kale. Waxaa loogu talagalay oo kaliya in lagu socodsiiyo binary, xogta la diyaariyay. Ku habboon socodsiinta codsiyada binary oo ay ku jiraan wax kasta oo ay u baahan yihiin, sida codsiyada go'a.
Iyada oo ku saleysan qaar ka mid ah OS, sida Ubuntu ama Debian. Hagaag, waxay ila tahay inaan loo baahnayn in tan la sharaxo.
AI: Hadda waxaan u baahanahay inaan rakibno dhammaan waxyaabaha dheeriga ah. baakadaha oo nadiifi khasnadaha. Oo isla markaaba waad tuuri kartaa kobcinta sicirka. Haddii kale, dhisme kasta, inkastoo calaamadda go'an ee sawirka saldhigga ah, sawirro kala duwan ayaa la heli doonaa. Cusbooneysiinta xirmooyinka sawirka waa shaqada ilaaliye waxayna ku lug leedahay beddelka summada.
P: Haa, waan isku dayay inaan taas sameeyo, waxayna noqotay sidatan:
WORKDIR /app
COPY ./ /app
RUN curl -sL https://deb.nodesource.com/setup_9.x | bash -
&& apt-get -y install libpq-dev imagemagick gsfonts ruby-full ssh supervisor nodejs
&& gem install bundler
&& bundle install --without development test --path vendor/bundle
RUN rm -rf /usr/local/bundle/cache/*.gem
&& apt-get clean
&& rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*AI: Ma xuma, laakiin weli waxaa jira xoogaa shaqo ah oo halkan lagu qabanayo. Bal eeg, waa kan amarkan:
RUN rm -rf /usr/local/bundle/cache/*.gem
&& apt-get clean
&& rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* … kama saaro xogta sawirka kama dambaysta ah, laakiin kaliya waxa ay abuurtaa lakab dheeraad ah iyada oo aan xogtan la hayn. Habka saxda ah waa:
RUN curl -sL https://deb.nodesource.com/setup_9.x | bash -
&& apt-get -y install libpq-dev imagemagick gsfonts nodejs
&& gem install bundler
&& bundle install --without development test --path vendor/bundle
&& rm -rf /usr/local/bundle/cache/*.gem
&& apt-get clean
&& rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* Laakiin intaas kuma koobna. Maxaad halkaas ku haysaa, Ruby? Markaa uma baahnid in aad bilawdo mashruuca oo dhan koobiyayso. Waa ku filan inaad nuqul ka sameyso Gemfile iyo Gemfile.lock.
Habkan, xidhmooyin xidhmo ah lama samayn doono isbeddel kasta oo ku yimaadda ilaha, laakiin waa haddii Gemfile ama Gemfile.lock uu isbeddelay.
Hababka la mid ah waxay u shaqeeyaan luqadaha kale ee leh maareeyaha ku-tiirsanaanta, sida npm, pip, laxamiistaha iyo kuwa kale oo ku salaysan faylka liiska ku-tiirsanaanta.
Ugu dambeyntiina, xusuusnow bilowgii waxaan ka hadlay fikradda Docker ee "hal weel - hal geeddi-socod"? Taas macnaheedu waa in aan loo baahnayn kormeere. Sidoo kale waa inaadan ku rakibin systemd, sababo la mid ah. Asal ahaan, Docker lafteedu waa kormeere. Oo markaad isku daydo inaad ku socodsiiso habab badan oo ka mid ah, waxay la mid tahay inaad ku socodsiiso codsiyo badan hal nidaam oo kormeere ah.
Markaad dhisto, waxaad samayn doontaa hal sawir, ka dibna waxaad bilaabi doontaa weel aad u badan oo aad u baahan tahay, mid kastaa wuxuu wadaa hal nidaam.
Laakiin wax badan oo ku saabsan taas ka dib.
P: Waxaan u maleynayaa inaan fahmay. Fiiri waxa dhaca:
FROM ruby:2.5.5-stretch
WORKDIR /app
COPY Gemfile* /app
RUN curl -sL https://deb.nodesource.com/setup_9.x | bash -
&& apt-get -y install libpq-dev imagemagick gsfonts nodejs
&& gem install bundler
&& bundle install --without development test --path vendor/bundle
&& rm -rf /usr/local/bundle/cache/*.gem
&& apt-get clean
&& rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
COPY . /app
RUN rake assets:precompile
CMD ["bundle”, “exec”, “passenger”, “start"]Miyaynu ka gudbi karnaa bilawga daemons-ka marka la bilaabayo weelka?
AI: Haa, waa sax. Jid ahaan, waxaad isticmaali kartaa labadaba CMD iyo ENTRYPOINT. Iyo inaad ogaato waxa ay ku kala duwan yihiin waa shaqada gurigaaga. Mawduucan waxaa jira maqaal wanaagsan oo ku saabsan Habr .
Hagaag, aan dhaqaaqno. Waxaad soo dejisay fayl si aad u rakibto noodhka, laakiin ma jirto dammaanad qaad ah inuu ka koobnaan doono waxaad u baahan tahay. Xaqiijinta ayaa loo baahan yahay in lagu daro Tusaale ahaan, sida tan:
RUN curl -sL https://deb.nodesource.com/setup_9.x > setup_9.x
&& echo "958c9a95c4974c918dca773edf6d18b1d1a41434 setup_9.x" | sha1sum -c -
&& bash setup_9.x
&& rm -rf setup_9.x
&& apt-get -y install libpq-dev imagemagick gsfonts nodejs
&& gem install bundler
&& bundle install --without development test --path vendor/bundle
&& rm -rf /usr/local/bundle/cache/*.gem
&& apt-get clean
&& rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* Isticmaalka jeegga, waxaad xaqiijin kartaa inaad soo dejisay faylka saxda ah.
P: Laakiin haddii feylku isbeddelo, dhismuhu wuu fashilmayaa.
AI: Haa, iyo si yaab leh, tani sidoo kale waa dheeri. Waxaad ogaan doontaa in feylku isbeddelay oo aad arki doonto waxa meeshaas laga beddelay. Marnaba ma ogaan kartid, laga yaabee inay ku dareen, tidhaahdaan, qoraal tirtiraya wax kasta oo uu gaadhi karo, ama abuuraya albaab dambe.
P: Mahadsanid. Markaa Dockerfile-ka ugu dambeeya wuxuu u ekaan doonaa sidan:
FROM ruby:2.5.5-stretch
WORKDIR /app
COPY Gemfile* /app
RUN curl -sL https://deb.nodesource.com/setup_9.x > setup_9.x
&& echo "958c9a95c4974c918dca773edf6d18b1d1a41434 setup_9.x" | sha1sum -c -
&& bash setup_9.x
&& rm -rf setup_9.x
&& apt-get -y install libpq-dev imagemagick gsfonts nodejs
&& gem install bundler
&& bundle install --without development test --path vendor/bundle
&& rm -rf /usr/local/bundle/cache/*.gem
&& apt-get clean
&& rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*
COPY . /app
RUN rake assets:precompile
CMD ["bundle”, “exec”, “passenger”, “start"]P: Igor Ivanovich, waad ku mahadsan tahay kaalmadaada. Waa inaan mar hore ordaa, waxaan u baahanahay inaan sameeyo 10 ballan oo kale maanta.
Igor Ivanovich, oo joojinaya saaxiibkiisa degdega ah ee jaleecada, wuxuu qaataa kabo kafeega xooggan. Ka dib markii uu ka fikiray dhowr ilbiriqsi oo ku saabsan 99.9% SLA iyo koodka aan cayayaanka lahayn, wuxuu ku weydiinayaa su'aal.
AI: xagee ku kaydisaa logagaaga?
P: Dabcan, in production.log. By habka, sideen ku heli karnaa iyaga oo aan ssh?
AI: Haddii aad uga tagto faylalka, xal ayaa mar horeba laguu soo jeediyay adiga. Amarka docker exec wuxuu kuu ogolaanayaa inaad ku fuliso amar kasta oo ku jira weel. Tusaale ahaan, waxaad kasban kartaa logyada. Iyo adeegsiga furaha -isay iyo orodka bash (haddii ay ku rakiban tahay weelka) waxay ku siin doontaa gelitaanka dhexgal ee weelka.
Laakin waa inaadan kaydin diiwaanka faylasha. Ugu yaraan, tani waxay keenaysaa koritaanka aan la xakameynin ee weelka, qofna ma rogo lo'da. Dhammaan geedaha waa in lagu tuuraa stdout. Halkaas waxaad mar hore ku arki kartaa iyaga oo isticmaalaya amarka docker logyada.
P: Igor Ivanovich, waxaa laga yaabaa inaad u guuri karto diiwaannada tusaha ku dhejisan, jikada jireed, sida xogta isticmaalaha?
AI: Way fiican tahay inaadan iloobin inaad dhoofiso xogta lagu shubay saxanka noode. Waxaad sidaas oo kale ku samayn kartaa loox, kaliya ha ilaawin inaad dejiso wareeg.
Taasi waa, waad carari kartaa.
P: Igor Ivanovich, ma ii sheegi kartaa waxa aan akhriyo?
AI: akhri marka hore , uma badna in qofna uga yaqaan Docker iyaga.
Oo haddii aad rabto inaad sameyso shaqo barasho, u tag . Ka dib oo dhan, aragtida aan ku dhaqmin waa dhintay.
Source: www.habr.com
