Dociwr: cyngor gwael

Dociwr: cyngor gwael

Pan oeddwn yn dysgu gyrru car, yn y wers gyntaf un gyrrodd yr hyfforddwr i mewn i'r groesffordd yn y cefn, ac yna dywedodd na ddylech wneud hynny - byth o gwbl. Cofiais y rheol hon ar unwaith ac am weddill fy oes.

Rydych chi'n darllen “Cyngor Gwael” gan Grigory Oster i blant, ac rydych chi'n gweld pa mor hawdd a naturiol y mae'n gwawrio arnyn nhw na ddylen nhw wneud hyn.

Mae llawer o erthyglau wedi'u hysgrifennu ar sut i ysgrifennu Dockerfile yn gywir. Ond wnes i ddim dod ar draws cyfarwyddiadau ar sut i ysgrifennu Dockerfiles anghywir. Rwy'n llenwi'r bwlch hwn. Ac efallai yn y prosiectau y byddaf yn derbyn cymorth, bydd llai o dockerfiles o'r fath.

Mae pob cymeriad, sefyllfa a Dockerfile yn ffuglen. Os ydych chi'n adnabod eich hun, mae'n ddrwg gennyf.

Creu Dockerfile, ominous ac ofnadwy

Peter (Uwch ddatblygwr java/rubby/php): Cydweithiwr Vasily, a ydych chi eisoes wedi uwchlwytho modiwl newydd i Docker?
Vasily (iau): Na, nid oedd gennyf amser, ni allaf ei ddatrys gyda'r Dociwr hwn. Mae cymaint o erthyglau arno, mae'n benysgafn.

Peter: Roedd gennym ddyddiad cau flwyddyn yn ôl. Gadewch imi eich helpu, byddwn yn ei ddarganfod yn y broses. Dywedwch wrthyf beth sydd ddim yn gweithio i chi.

Vasily: Ni allaf ddewis delwedd sylfaenol fel ei bod yn fach iawn, ond mae ganddi bopeth sydd ei angen arnoch.
Peter: Cymerwch y ddelwedd ubuntu, mae ganddo bopeth sydd ei angen arnoch. A bydd yr hyn sy'n llawer o bethau diangen yn dod yn ddefnyddiol yn nes ymlaen. A pheidiwch ag anghofio rhoi'r tag diweddaraf fel bod y fersiwn bob amser y diweddaraf.

Ac mae'r llinell gyntaf yn ymddangos yn y Dockerfile:

FROM ubuntu:latest

Peter: Beth sydd nesaf, beth ddefnyddion ni i ysgrifennu ein modiwl?
Vasily: Felly ruby, mae yna weinydd gwe a dylid lansio cwpl o daemons gwasanaeth.
Peter: Ie, beth sydd ei angen arnom: rhuddem, bwndelwr, nodejs, imagemagick a beth arall... Ac ar yr un pryd, gwnewch uwchraddiad i gael pecynnau newydd yn bendant.
Vasily: Ac ni fyddwn yn creu defnyddiwr fel na fyddwn o dan wreiddiau?
Peter: Ffyc, yna mae'n rhaid i chi wneud cam â'r hawliau o hyd.
Vasily: Dwi angen amser, tua 15 munud, i roi'r cyfan at ei gilydd mewn un gorchymyn, darllenais hynny ...
(Mae Peter yn torri ar draws yr iau gofalus a thrwsiadus iawn.)
Pedr: Ysgrifennwch mewn gorchmynion ar wahân, bydd yn haws eu darllen.

Mae Dockerfile yn tyfu:

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

Yna mae Igor Ivanovich, DevOps (ond mwy o Ops na Dev), yn byrstio i'r swyddfa gan weiddi:

AI: Torrodd Petya, eich datblygwyr y gronfa ddata bwyd eto, pryd fydd hyn yn dod i ben ...

Ar ôl sgarmes fechan, mae Igor Ivanovich yn oeri ac yn dechrau darganfod beth mae ei gydweithwyr yn ei wneud yma.

AI: Beth ydych chi'n ei wneud?
Vasily: Mae Peter yn fy helpu i greu Dockerfile ar gyfer modiwl newydd.
AI: Gadewch imi edrych... Beth wnaethoch chi ei ysgrifennu yma, rydych chi'n glanhau'r ystorfa gyda gorchymyn ar wahân, mae hon yn haen ychwanegol ... Ond sut mae gosod dibyniaethau os nad ydych wedi copïo'r Gemfile! Ac yn gyffredinol, nid yw hyn yn dda.
Peter: Os gwelwch yn dda, ewch o gwmpas eich busnes, fe wnawn ni ddarganfod y peth rywsut.

Mae Igor Ivanovich yn ochneidio'n drist ac yn gadael i ddarganfod pwy dorrodd y gronfa ddata.

Peter: Oedd, ond yr oedd yn llygad ei le ynglŷn â’r cod, mae angen inni ei wthio i’r ddelwedd. A gadewch i ni osod ssh a goruchwyliwr ar unwaith, fel arall byddwn yn cychwyn y daemons.

Vasily: Yna byddaf yn copïo'r Gemfile a Gemfile.lock yn gyntaf, yna byddaf yn gosod popeth, ac yna byddaf yn copïo'r prosiect cyfan. Os na fydd y Gemfile yn newid, bydd yr haen yn cael ei gymryd o'r storfa.
Peter: Pam ydych chi i gyd â’r haenau hyn, copïwch bopeth ar unwaith. Copïwch ar unwaith. Y llinell gyntaf oll.

Mae'r Dockerfile nawr yn edrych fel hyn:

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

Pedr: Felly, beth nesaf? Oes gennych chi gyfluniadau ar gyfer goruchwyliwr?
Vasily: Na, na. Ond byddaf yn ei wneud yn gyflym.
Pedr: Yna byddwch yn ei wneud. Gadewch i ni nawr fraslunio sgript init a fydd yn lansio popeth. Iawn, felly rydych chi'n dechrau ssh, gyda nohup, fel y gallwn gysylltu â'r cynhwysydd a gweld beth aeth o'i le. Yna rhedeg goruchwyliwr yn yr un modd. Wel, yna 'ch jyst yn rhedeg teithwyr.
C: Ond darllenais y dylai fod un broses, felly bydd Docker yn gwybod bod rhywbeth wedi mynd o'i le a gall ailgychwyn y cynhwysydd.
P: Peidiwch â thrafferthu'ch pen gyda nonsens. Ac yn gyffredinol, sut? Sut ydych chi'n rhedeg hyn i gyd mewn un broses? Gadewch i Igor Ivanovich feddwl am sefydlogrwydd, nid am ddim y mae'n derbyn cyflog. Ein gwaith ni yw ysgrifennu cod. Ac yn gyffredinol, gadewch iddo ddweud diolch i ni ysgrifennu'r Dockefile iddo.

10 munud a dau fideo am gathod yn ddiweddarach.

C: Rydw i wedi gwneud popeth. Ychwanegais fwy o sylwadau.
P: Dangoswch i mi!

Fersiwn diweddaraf o 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: Gwych, dwi'n ei hoffi. Ac mae'r sylwadau yn Rwsieg, yn gyfleus ac yn ddarllenadwy, byddai pawb yn gweithio felly. Dysgais bopeth i chi, gallwch chi wneud y gweddill eich hun. Dewch i ni gael coffi...

Wel, nawr mae gennym Dockerfile hollol ofnadwy, a bydd ei olwg yn gwneud i Igor Ivanovich eisiau rhoi'r gorau iddi a bydd ei lygaid yn brifo am wythnos arall. Gallai'r Dockerfile, wrth gwrs, fod hyd yn oed yn waeth, nid oes terfyn i berffeithrwydd. Ond i ddechrau, bydd hyn yn ei wneud.

Hoffwn orffen gyda dyfyniad gan Grigory Oster:

Os nad ydych yn siŵr eto
Fe wnaethon ni ddewis y llwybr mewn bywyd,
A dydych chi ddim yn gwybod pam
Dechreuwch eich taith lafur,
Torri'r bylbiau golau yn y cynteddau -
Bydd pobl yn dweud "Diolch" i chi.
Byddwch chi'n helpu'r bobl
Arbed trydan.

Ffynhonnell: hab.com

Ychwanegu sylw