Docker: ní droch-chomhairle

Sna tuairimí le mo alt Docker: droch-chomhairle bhí go leor iarratas a mhíniú cén fáth go raibh an Dockerfile cur síos air chomh uafásach.

Achoimre ar an eipeasóid roimhe seo: Cumann beirt fhorbróirí Dockerfile faoi spriocdháta teann. Sa phróiseas, tagann Ops Igor Ivanovich chucu. Tá an Dockerfile mar thoradh air chomh dona go bhfuil an AI ar tí taom croí.

Docker: ní droch-chomhairle

Anois déanaimis amach cad atá cearr leis an Dockerfile seo.

Mar sin, tá seachtain caite.

Buaileann Dev Petya le hOPs Igor Ivanovich sa seomra bia thar chupán caife.

P: Igor Ivanovich, an bhfuil tú an-ghnóthach? Ba mhaith liom a dhéanamh amach nuair a screwed muid suas.

AI: Is maith sin, ní minic a bhuaileann tú le forbróirí a bhfuil suim acu i dúshaothrú.
Ar dtús, déanaimis aontú ar roinnt rudaí:

  1. Idé-eolaíocht docker: coimeádán amháin - próiseas amháin.
  2. Dá lú an coimeádán, is amhlaidh is fearr.
  3. An níos mó a ghlacann tú as an taisce, is amhlaidh is fearr.

P: Cén fáth ar chóir go mbeadh próiseas amháin i gcoimeádán amháin?

AI: Déanann Docker, nuair a thosaíonn sé coimeádán, monatóireacht ar staid an phróisis le pid 1. Má fhaigheann an próiseas bás, déanann Docker iarracht an coimeádán a atosú. Ligean le rá go bhfuil roinnt feidhmchlár ag rith i gcoimeádán, nó níl an príomhfheidhmchlár ag rith le pid 1. Má fhaigheann an próiseas bás, ní bheidh a fhios ag Docker faoi.

Mura bhfuil aon cheisteanna eile agat, taispeáin do Dockerfile dúinn le do thoil.

Agus thaispeáin Petya:

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: Ó, a ligean ar é a chur in ord. Cuirimis tús leis an gcéad líne:

FROM ubuntu:latest

Glacann tú an chlib latest. Ag baint úsáide as clib latest eascraíonn iarmhairtí dothuartha. Samhlaigh, tógann an cothaitheoir íomhá leagan nua den íomhá le liosta bogearraí éagsúla, faigheann an íomhá seo an chlib is déanaí. Agus stopann do choimeádán, mar is fearr, ag tógáil, agus ar a laghad, glacann tú fabhtanna nach raibh ann cheana.

Glacann tú íomhá le OS lán-chuimsitheach le go leor bogearraí gan ghá, a ardaíonn toirt an choimeádáin. Agus na bogearraí níos mó, na poill níos mó agus leochaileachtaí.

Ina theannta sin, dá mhéad an íomhá, is mó spáis a thógann sé ar an óstach agus sa chlár (an stórálann tú íomhánna áit éigin)?

P: Sea, ar ndóigh, tá clárlann againn, bhunaigh tú é.

AI: Mar sin, cad faoi a bhfuil mé ag caint?.. Ó sea, na méideanna... Tá an t-ualach ar an líonra ag méadú freisin. I gcás íomhá amháin níl sé seo faoi deara, ach nuair a bhíonn tógáil leanúnach, tástálacha agus imscaradh ann, tá sé faoi deara. Agus mura bhfuil modh Dé agat ar AWS, gheobhaidh tú bille cosmaí freisin.

Dá bhrí sin, ní mór duit an íomhá is oiriúnaí a roghnú, leis an leagan cruinn agus na bogearraí íosta. Mar shampla, tóg: FROM ruby:2.5.5-stretch

P: Ó, feicim. Conas agus cén áit ar féidir liom féachaint ar na híomhánna atá ar fáil? Conas a bheidh a fhios agam cé acu ceann a theastaíonn uaim?

AI: De ghnáth tógtar íomhánna ó dockerhub, ná mearbhall le pornhub :). De ghnáth bíonn roinnt tionóil le haghaidh íomhá:
Alpach: bailítear íomhánna ar íomhá Linux íostach, gan ach 5 MB. A mhíbhuntáiste: tá sé le chéile lena chur i bhfeidhm libc féin, ní oibríonn pacáistí caighdeánacha ann. Tógfaidh sé go leor ama an pacáiste riachtanach a aimsiú agus a shuiteáil.
Scratch: buníomhá, nach n-úsáidtear chun íomhánna eile a thógáil. Tá sé beartaithe chun sonraí dénártha ullmhaithe a rith amháin. Ideal chun feidhmchláir dhénártha a reáchtáil a chuimsíonn gach rud atá uait, mar shampla feidhmchláir GO.
Bunaithe ar aon OS, mar shampla Ubuntu nó Debian. Bhuel, ní dóigh liom go bhfuil aon ghá le míniú.

AI: Anois ní mór dúinn na extras go léir a shuiteáil. pacáistí agus soiléir do caches. Agus is féidir leat é a chaitheamh ar an bpointe boise uasghrádú a fháil. Seachas sin, le gach tógáil, in ainneoin chlib seasta an bhuníomhá, gheobhaidh tú íomhánna éagsúla. Tá sé mar chúram ar an gcothaitheoir pacáistí san íomhá a nuashonrú agus an chlib a athrú ag gabháil leis.

P: Sea, rinne mé iarracht é a dhéanamh, d'éirigh sé amach mar seo:

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: Níl sé go dona, ach tá rud éigin le bheith ag obair air freisin. Féach, seo é an t-ordú seo:

RUN rm -rf /usr/local/bundle/cache/*.gem 
    && apt-get clean  
    && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*  

Ní scriosann ... sonraí ón íomhá deiridh, ach cruthaíonn sé ciseal breise gan na sonraí seo. Díreach mar seo:

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

Ach ní hé sin go léir. Cad atá agat ansin, a Ruby? Ansin ní gá duit an tionscadal iomlán a chóipeáil ag an tús. Is leor Gemfile agus Gemfile.lock a chóipeáil.

Leis an gcur chuige seo, ní dhéanfar suiteáil bundle a fhorghníomhú le haghaidh gach athrú foinse, ach amháin má tá an Gemfile nó Gemfile.lock athraithe.

Oibríonn na modhanna céanna do theangacha eile le bainisteoir spleáchais, mar shampla npm, pip, cumadóir agus eile bunaithe ar chomhad le liosta spleáchais.

Agus ar deireadh, cuimhnigh ag an tús labhair mé faoi idé-eolaíocht Docker “coimeádán amháin - próiseas amháin”? Ciallaíonn sé seo nach bhfuil gá le maoirseoir. Níor cheart duit systemd a shuiteáil freisin, ar na cúiseanna céanna. Go bunúsach, is maoirseoir é Docker féin. Agus nuair a dhéanann tú iarracht próisis iolracha a rith ann, tá sé cosúil le ilfheidhmchláir a rith i bpróiseas maoirseora amháin.
Agus tú ag tógáil, déanfaidh tú íomhá amháin, agus ansin seolfaidh tú an líon riachtanach coimeádán ionas go mbeidh próiseas amháin ar siúl i ngach ceann acu.

Ach níos mó faoi sin níos déanaí.

P: Sílim go dtuigim. Féach cad a tharlaíonn:

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"]

An féidir linn seoladh deamhan a shárú agus an coimeádán á thosú?

AI: Sea, tá sé sin ceart. Dála an scéil, is féidir leat CMD agus ENTRYPOINT araon a úsáid. Agus is é do chuid obair bhaile a dhéanamh amach cad é an difríocht. Tá ceann maith ar an ábhar seo ar Habré airteagal.

Mar sin, a ligean ar bogadh ar aghaidh. Íoslódálann tú comhad chun nód a shuiteáil, ach níl aon ráthaíocht ann go mbeidh an méid atá uait ann. Ní mór dúinn bailíochtú a chur leis. Mar shampla, mar seo:

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

Ag baint úsáide as an tseiceáil is féidir leat a fhíorú gur íoslódáil tú an comhad ceart.

P: Ach má athraíonn an comhad, teipfidh an tógáil.

AI: Sea, agus go leor aisteach, is buntáiste é seo freisin. Beidh a fhios agat go bhfuil an comhad athraithe, agus beidh tú in ann a fheiceáil cad a athraíodh ann. Níl a fhios agat riamh, chuir siad leis, abair, script a scriosann gach rud is féidir léi a bhaint amach, nó a chruthaíonn cúldoor.

P: Go raibh maith agat. Is cosúil go mbeidh cuma mar seo ar an Dockerfile deiridh:

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, go raibh maith agat as do chabhair. Tá sé in am agam rith, is gá dom 10 ngealltanas eile a dhéanamh inniu.

Igor Ivanovich, stop a chomhghleacaí hasty lena súil, sip caife láidir. Tar éis dó smaoineamh ar feadh cúpla soicind faoin gcód SLA 99.9% agus saor ó fhabht, cuireann sé ceist.

AI: Cá stórálann tú na logaí?

P: Ar ndóigh, i production.log. Dála an scéil, tá, ach conas is féidir linn rochtain a fháil orthu gan ssh?

AI: Má fhágann tú iad sna comhaid, tá réiteach cruthaithe duit cheana féin. Ceadaíonn an t-ordú exec docker duit aon ordú a fhorghníomhú i gcoimeádán. Mar shampla, is féidir leat cat a dhéanamh le haghaidh logs. Agus ag baint úsáide as an eochair -it agus ag rith bash (má tá sé suiteáilte sa choimeádán) tabharfaidh sé rochtain idirghníomhach duit ar an gcoimeádán.

Ach níor cheart duit logaí a stóráil i gcomhaid. Ar a laghad, eascraíonn sé seo le fás neamhrialaithe an choimeádáin, agus ní rothlaíonn aon duine na logaí. Ba chóir gach log a sheoladh chuig stdout. Is féidir iad a fheiceáil cheana féin ag baint úsáide as an ordú logs docker.

P: Igor Ivanovich, b'fhéidir gur féidir liom na logaí a chur in eolaire suite, ar nód fisiceach, mar shonraí úsáideora?

AI: Tá sé go maith nach ndearna tú dearmad ar na sonraí a lódáiltear ar dhiosca an nód a bhaint. Is féidir leat é seo a dhéanamh le logaí freisin, ach ná déan dearmad rothlú a shocrú.
Sin é, is féidir leat rith.

P: Igor Ivanovich, an féidir leat comhairle a thabhairt dom cad atá le léamh?

AI: Ar dtús, léigh moltaí ó fhorbróirí Docker, is ar éigean a thuigeann duine ar bith Docker níos fearr ná iad.

Agus más mian leat intéirneacht a fháil, téigh go dtí dian. Tar éis an tsaoil, tá teoiric gan cleachtas marbh.

Foinse: will.com

Add a comment