Litlhalosong tsa sehlooho sa ka ho ne ho e-na le likopo tse ngata tsa ho hlalosa hore na ke hobane'ng ha Dockerfile e hlalositsoeng ho eona e ne e le mpe hakana.
Kakaretso ea letoto le fetileng: Bahlahisi ba babeli ba qapa Dockerfile tlas'a nako e behiloeng. Ts'ebetsong, Ops Igor Ivanovich o tla ho bona. Dockerfile e hlahisoang e mpe hoo AI e leng mothating oa lefu la pelo.

Joale a re boneng hore na phoso ke efe ka Dockerfile ena.
Kahoo, beke e fetile.
Dev Petya o kopana le Ops Igor Ivanovich ka phaposing ea ho jela holim'a kopi ea kofi.
P: Igor Ivanovich, na u phathahane haholo? Ke kopa ho tseba moo re entseng phoso.
AI: Ho lokile, hangata ha u kopane le bahlahisi ba nang le thahasello ea ho tlatlapa.
Pele, a re lumellaneng ka lintho tse 'maloa:
- Khopolo ea Docker: setshelo se le seng - ts'ebetso e le 'ngoe.
- Ha setshelo se senyenyane, se molemo.
- Ha o nka ho feta ho cache, ho ba betere.
P: Ke hobane'ng ha ho lokela ho ba le ts'ebetso e le 'ngoe ka har'a setshelo se le seng?
AI: Docker, ha e qala setshelo, e lekola boemo ba ts'ebetso ka pid 1. Haeba ts'ebetso e shoa, Docker e leka ho qala setshelo hape. Ha re re u na le likopo tse 'maloa tse sebetsang ka har'a setshelo, kapa kopo e kholo ha e sebetse le pid 1. Haeba ts'ebetso e shoa, Docker e ke ke ea tseba ka eona.
Haeba ha u na lipotso tse ling, ka kopo re bontše Dockerfile ea hau.
Mme Petya o bontšitse:
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, ha re e nke ka tatellano. Ha re qaleng ka mola oa pele:
FROM ubuntu:latestU nka tekete latest. Ho sebelisa tag latest e lebisa liphellong tse sa lebelloang. Ak'u inahanele, mohlokomeli oa setšoantšo o haha setšoantšo se secha ka lethathamo le fapaneng la software, setšoantšo sena se fumana tag ea morao-rao. Mme setshelo sa hau, hantle, se emisa ho haha, mme ho hobe le ho feta, o ts'oara likokoana-hloko tse neng li le sieo pele.
U nka setšoantšo ka OS e felletseng e nang le software e ngata e sa hlokahaleng, e kenyang molumo oa setshelo. 'Me ha software e le ngata, ho na le masoba le bofokoli bo eketsehileng.
Ho phaella moo, setšoantšo se seholoanyane, sebaka se sengata ho moamoheli le ho ngolisoang (na u boloka litšoantšo kae-kae)?
P: E, ehlile, re na le ngoliso, u e behile.
AI: Joale, ke bua ka eng? .. Oh e, li-volumes ... Mojaro oa marang-rang o ntse o eketseha. Bakeng sa setšoantšo se le seng sena ha se hlokomelehe, empa ha ho e-na le mohaho o tsoelang pele, liteko le ho tsamaisoa, hoa hlokomeleha. 'Me haeba u sena mokhoa oa Molimo ho AWS, u tla boela u fumane sekoloto sa cosmic.
Ka hona, o hloka ho khetha setšoantšo se loketseng ka ho fetisisa, ka mofuta o nepahetseng le software e fokolang. Ka mohlala, nka: FROM ruby:2.5.5-stretch
P: Oh, kea bona. Nka sheba litšoantšo tse teng joang hona kae? Ke tseba joang hore na ke hloka efe?
AI: Hangata litšoantšo li nkuoa ho , u se ke ua ferekanya le pornhub :). Hangata ho na le likopano tse 'maloa bakeng sa setšoantšo:
Alpine: litšoantšo li bokelloa setšoantšong se senyenyane Linux, ke 5 MB feela. Bothata ba yona: e hlophisitswe ka ho kenngwa tshebetsong ha yona ha libc, kahoo diphutheloana tse tlwaelehileng ha di sebetse le yona. Ho fumana le ho kenya sephutheloana se hlokahalang ho tla nka nako e ngata.
Qala: setšoantšo sa motheo, ha se sebelisoe ho etsa litšoantšo tse ling. E reretsoe feela ho tsamaisa data ea binary, e lokiselitsoeng. E loketse ho sebetsa lits'ebetso tsa binary tse kenyelletsang tsohle tseo o li hlokang, joalo ka lits'ebetso tsa GO.
Ho latela OS e itseng, mohlala Ubuntu kapa DebianHantle, ke nahana hore ha ho hlokahale ho hlalosa sena.
AI: Joale re hloka ho kenya lisebelisoa tsohle. liphutheloana 'me u hlakole li-cache tsa hau. 'Me u ka e lahla hang-hang ntlafatso e loketseng. Ho seng joalo, ka mohaho o mong le o mong, ho sa tsotellehe letšoao le tsitsitseng la setšoantšo sa motheo, litšoantšo tse fapaneng li tla fumanoa. Ho ntlafatsa liphutheloana setšoantšong ke mosebetsi oa mohlokomeli mme o tsamaisana le ho fetola tag.
P: E, ke lekile ho e etsa, ho ile ha e-ba tjena:
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: Ha ho mpe, empa ho boetse ho na le seo u lokelang ho se etsa. Sheba, taelo ena ke ena:
RUN rm -rf /usr/local/bundle/cache/*.gem
&& apt-get clean
&& rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* ... ha e tlose data ho tsoa setšoantšong sa ho qetela, empa e etsa feela lera le eketsehileng ntle le data ena. Hantle joalo ka sena:
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/* Empa ha se phetho. U na le eng moo, Ruby? Joale ha ua tlameha ho kopitsa morero oohle qalong. Ho lekane ho kopitsa Gemfile le Gemfile.lock.
Ka mokhoa ona, ho kenya li-bundle ho ke ke ha etsoa bakeng sa phetoho e 'ngoe le e' ngoe ea mohloli, empa feela haeba Gemfile kapa Gemfile.lock e fetohile.
Mekhoa e ts'oanang e sebetsa bakeng sa lipuo tse ling tse nang le mookameli oa ts'epo, joalo ka npm, pip, composer le tse ling tse ipapisitseng le faele e nang le lethathamo la lintho tse itšetlehileng ka tsona.
Mme qetellong, hopola qalong ke buile ka mohopolo oa Docker "setshelo se le seng - ts'ebetso e le 'ngoe"? Sena se bolela hore mookameli ha a hlokehe. Hape ha ua lokela ho kenya systemd, ka mabaka a tšoanang. Ha e le hantle, Docker ka boeona ke mookameli. 'Me ha u leka ho tsamaisa mekhoa e mengata ho eona, ho tšoana le ho sebelisa mekhoa e mengata ts'ebetsong ea mookameli a le mong.
Ha o haha, o tla etsa setšoantšo se le seng, ebe o qala palo e hlokahalang ea lijana e le hore ts'ebetso e le 'ngoe e tsamaee ho e' ngoe le e 'ngoe.
Empa ho feta ka seo hamorao.
P: Ke nahana hore kea utloisisa. Sheba se etsahalang:
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"]A na re ka hlakola ho hlahisoa ha li-daemone ha re qala setshelo?
AI: E, ho joalo. Ha u le tseleng, u ka sebelisa CMD le ENTRYPOINT ka bobeli. 'Me ho fumana hore na phapang ke efe ke mosebetsi oa hau oa sekolo. Ho na le e 'ngoe e ntle sehloohong sena ho Habré .
Kahoo, ha re tsoeleng pele. U khoasolla faele ho kenya node, empa ha ho na tiiso ea hore e tla ba le seo u se hlokang. Re hloka ho eketsa netefatso. Ka mohlala, joalo ka:
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/* U sebelisa checksum u ka netefatsa hore u khoasollotse faele e nepahetseng.
P: Empa haeba faele e fetoha, mohaho o tla hlōleha.
AI: E, 'me ka mokhoa o makatsang, sena le sona ke tlatsetso. U tla tseba hore faele e fetohile, 'me u tla khona ho bona se fetotsoeng moo. Ha u tsebe, ba ekelitse, ba re, sengoloa se hlakolang ntho e 'ngoe le e' ngoe eo e ka e fihlelang, kapa e theha mokokotlo.
P: Kea leboha. Ho ile ha fumaneha hore Dockerfile ea ho qetela e tla shebahala tjena:
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, ke leboha thuso ea hau. Ke nako ea hore ke matha, ke hloka ho etsa boitlamo bo bong hape ba 10 kajeno.
Igor Ivanovich, a emisa mosebetsi-'moho le eena ea potlakileng ka ho mo sheba, o noa kofi e matla. Kamora ho nahana ka SLA metsotsoana e seng mekae 99.9% 'me khoutu ha e na liphoso, o botsa potso.
AI: U boloka likutu hokae?
P: Ehlile, ho production.log. Ka tsela, ho joalo, empa re ka li fihlela joang ntle le ssh?
AI: Haeba u li siea lifaeleng, tharollo e se e qapiloe bakeng sa hau. Taelo ea "docker exec" e u lumella hore u phethe taelo efe kapa efe ka har'a setshelo. Ka mohlala, u ka etsa katse bakeng sa likutung. Le ho sebelisa senotlolo -e le ho matha bash (haeba e kentsoe ka har'a setshelo) e tla u fa monyetla oa ho fihlella setshelo.
Empa ha ua lokela ho boloka li-log ho lifaele. Bonyane, sena se lebisa khōlong e sa laoleheng ea setshelo, 'me ha ho motho ea potolohang lifate. Li-log tsohle li lokela ho romelloa ho stdout. Ha li le moo li se li ka bonoa ho sebelisoa taelo li-docker logs.
P: Igor Ivanovich, mohlomong nka kenya li-logs bukeng e kentsoeng, sebakeng sa 'mele, joalo ka data ea mosebelisi?
AI: Ho hotle hore ebe ha ua lebala ho tlosa data e kentsoeng ho disk ea node. U ka etsa sena ka li-logs hape, u se ke ua lebala ho theha potoloho.
Ke phetho, o ka matha.
P: Igor Ivanovich, na u ka nkeletsa hore na ke bale eng?
AI: Pele, bala , ha ho motho ea tsebang Docker ho feta bona.
'Me haeba u batla ho fumana internship, ea ho . Etsoe, khopolo e se nang tšebeliso e shoele.
Source: www.habr.com
