Docker: slæm ráð

Docker: slæm ráð

Þegar ég var að læra að keyra bíl, strax í fyrstu kennslustund keyrði kennarinn afturábak inn á gatnamótin og sagði svo að þú ættir ekki að gera það - aldrei. Ég mundi eftir þessari reglu strax og alla ævi.

Þú lest „Slæm ráð“ eftir Grigory Oster fyrir börn og þú sérð hversu auðveldlega og eðlilega það rennur upp fyrir þeim að þau ættu ekki að gera þetta.

Margar greinar hafa verið skrifaðar um hvernig eigi að skrifa Dockerfile rétt. En ég rakst ekki á leiðbeiningar um hvernig á að skrifa rangar Dockerfiles. Ég er að fylla þetta skarð. Og kannski í þeim verkefnum sem ég fæ stuðning mun slíkum skjalaskrám fækka.

Allar persónur, aðstæður og Dockerfile eru uppdiktaðar. Ef þú þekkir sjálfan þig, því miður.

Að búa til Dockerfile, ógnvekjandi og hræðilegt

Peter (Senior Java/rubby/php verktaki): Kollegi Vasily, hefurðu þegar hlaðið upp nýrri einingu í Docker?
Vasily (yngri): Nei, ég hafði ekki tíma, ég get ekki fundið það út með þessum Docker. Það eru svo margar greinar um það, það er hvimleitt.

Pétur: Við fengum frest fyrir ári síðan. Leyfðu mér að hjálpa þér, við finnum það út í ferlinu. Segðu mér hvað virkar ekki fyrir þig.

Vasily: Ég get ekki valið grunnmynd þannig að hún sé í lágmarki, en hún hefur allt sem þú þarft.
Pétur: Taktu ubuntu myndina, hún hefur allt sem þú þarft. Og það sem er mikið af óþarfa kemur sér vel síðar. Og ekki gleyma að setja nýjasta merkið þannig að útgáfan sé alltaf sú nýjasta.

Og fyrsta línan birtist í Dockerfile:

FROM ubuntu:latest

Pétur: Hvað er næst, hvað notuðum við til að skrifa eininguna okkar?
Vasily: Svo Ruby, það er vefþjónn og það ætti að ræsa nokkra þjónustupúka.
Pétur: Já, hvað þurfum við: Ruby, Bunler, nodejs, imagemagick og hvað fleira... Og á sama tíma, uppfærðu til að fá örugglega nýja pakka.
Vasily: Og við munum ekki búa til notanda svo að við verðum ekki undir rót?
Pétur: Fjandinn, þá þarftu samt að fíflast með réttindin.
Vasily: Ég þarf tíma, um það bil 15 mínútur, til að setja þetta allt saman í eina skipun, ég las að...
(Pétur truflar hinn vandvirka og mjög klára yngri gróflega.)
Pétur: Skrifaðu í aðskildar skipanir, það verður auðveldara að lesa.

Dockerfile vex:

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

Þá brestur Igor Ivanovich, DevOps (en fleiri Ops en Dev), inn á skrifstofuna og hrópar:

AI: Petya, forritararnir þínir brutu matvælagagnagrunninn aftur, hvenær mun þetta enda...

Eftir smá átök kólnar Igor Ivanovich og byrjar að komast að því hvað samstarfsmenn hans eru að gera hér.

AI: Hvað ertu að gera?
Vasily: Peter er að hjálpa mér að búa til Dockerfile fyrir nýja einingu.
AI: Leyfðu mér að kíkja... Hvað skrifaðir þú hér, þú hreinsar geymsluna með sérstakri skipun, þetta er viðbótarlag... En hvernig seturðu upp ósjálfstæði ef þú hefur ekki afritað Gemfile! Og almennt séð er þetta ekki gott.
Pétur: Vinsamlegast farðu að máli þínu, við finnum það einhvern veginn.

Igor Ivanovich andvarpar sorgmæddur og fer til að komast að því hver braut gagnagrunninn.

Pétur: Já, en hann hafði rétt fyrir sér varðandi kóðann, við þurfum að ýta honum inn í myndina. Og við skulum setja upp ssh og umsjónarmann strax, annars byrjum við púkana.

Vasily: Þá mun ég fyrst afrita Gemfile og Gemfile.lock, síðan mun ég setja allt upp og síðan mun ég afrita allt verkefnið. Ef Gemfile breytist ekki verður lagið tekið úr skyndiminni.
Pétur: Af hverju eruð þið öll með þessi lög, afritið allt í einu. Afritaðu strax. Allra fyrsta línan.

Dockerfile lítur nú svona út:

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

Pétur: Svo, hvað næst? Ertu með configs fyrir supervisor?
Vasily: Nei, nei. En ég geri það fljótt.
Pétur: Þá gerirðu það. Við skulum nú skissa út init handrit sem mun ræsa allt. Allt í lagi, svo þú byrjar ssh, með nohup, svo að við getum tengst ílátinu og séð hvað fór úrskeiðis. Keyrðu síðan umsjónarmann á sama hátt. Jæja, þá keyrirðu bara farþega.
Sp.: En ég las að það ætti að vera eitt ferli, svo Docker mun vita að eitthvað fór úrskeiðis og getur endurræst ílátið.
P: Ekki trufla höfuðið með vitleysu. Og almennt, hvernig? Hvernig keyrir þú þetta allt í einu ferli? Leyfðu Igor Ivanovich að hugsa um stöðugleika, það er ekki fyrir neitt sem hann fær laun. Okkar starf er að skrifa kóða. Og almennt, láttu hann segja þakka þér fyrir að við skrifuðum Dockefile fyrir hann.

10 mínútum og tveimur myndböndum um ketti síðar.

Sp.: Ég hef gert allt. Ég bætti við fleiri athugasemdum.
P: Sýndu mér það!

Nýjasta útgáfa af 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: Frábært, mér líkar það. Og athugasemdirnar eru á rússnesku, þægilegar og læsilegar, allir myndu vinna svona. Ég kenndi þér allt, þú getur gert restina sjálfur. Við skulum fá okkur kaffi...

Jæja, nú erum við með fullkomlega hræðilegan Dockerfile, sem mun fá Igor Ivanovich til að vilja hætta og augu hans munu særa í viku í viðbót. Dockerfile gæti auðvitað verið enn verra, það eru engin takmörk fyrir fullkomnun. En til að byrja með mun þetta duga.

Mig langar að enda með tilvitnun í Grigory Oster:

Ef þú ert ekki viss ennþá
Við völdum leiðina í lífinu,
Og þú veist ekki hvers vegna
Byrjaðu vinnuferðina þína,
Brjóttu ljósaperurnar á ganginum -
Fólk mun segja "Takk" við þig.
Þú munt hjálpa fólkinu
Sparaðu rafmagn.

Heimild: www.habr.com

Bæta við athugasemd