Docker: dili maayo nga tambag

Docker: dili maayo nga tambag

Sa diha nga ako nagkat-on sa pagdrayb sa usa ka sakyanan, sa unang leksyon ang instruktor nagmaneho ngadto sa intersection sa reverse, ug dayon miingon nga dili nimo kana buhaton - dili gayud. Nahinumdom dayon ko niini nga lagda ug sa tibuok nakong kinabuhi.

Gibasa nimo ang "Bad Advice" ni Grigory Oster ngadto sa mga bata, ug imong nakita kung unsa kadali ug natural nga nahunahuna nila nga dili nila kini buhaton.

Daghang mga artikulo ang gisulat kung giunsa pagsulat ang usa ka Dockerfile sa husto. Apan wala ko makit-an ang mga panudlo kung giunsa pagsulat ang dili husto nga Dockerfiles. Gipuno nako kini nga kal-ang. Ug tingali sa mga proyekto nga akong nadawat nga suporta, adunay gamay nga dockerfiles.

Ang tanan nga mga karakter, sitwasyon ug Dockerfile dili tinuod. Kung nakaila ka sa imong kaugalingon, sorry.

Paghimo usa ka Dockerfile, makalilisang ug makalilisang

Peter (Senior java/rubby/php developer): Colleague Vasily, naka-upload ka na ba ug bag-ong module sa Docker?
Vasily (junior): Dili, wala koy oras, dili nako mahibal-an kini nga Docker. Adunay daghang mga artikulo bahin niini, kini makalibog.

Peter: Naa tay deadline usa ka tuig na ang milabay. Tabangi ko nimo, atong mahibal-an kini sa proseso. Sultihi ko kung unsa ang dili maayo alang kanimo.

Vasily: Dili ako makapili og usa ka batakang imahe aron kini gamay, apan adunay tanan nga imong gikinahanglan.
Pedro: Kuhaa ang imahe sa ubuntu, kini adunay tanan nga imong kinahanglan. Ug unsa ang daghang wala kinahanglana nga mga butang nga magamit sa ulahi. Ug ayaw kalimti nga ibutang ang pinakabag-o nga tag aron ang bersyon kanunay nga pinakabag-o.

Ug ang unang linya makita sa Dockerfile:

FROM ubuntu:latest

Pedro: Unsa ang sunod, unsa ang among gigamit sa pagsulat sa among module?
Vasily: Mao nga ruby, adunay usa ka web server ug usa ka magtiayon nga mga daemon sa serbisyo kinahanglan nga ilunsad.
Peter: Oo, unsa ang atong gikinahanglan: ruby, bundler, nodejs, imagemagick ug unsa pa... Ug sa samang higayon, pagbuhat sa usa ka upgrade aron siguradong makakuha og bag-ong mga pakete.
Vasily: Ug dili kami maghimo usa ka tiggamit aron dili kami ma-ugat?
Peter: Fuck it, unya kinahanglan pa nimo nga magbinuang sa mga katungod.
Vasily: Nagkinahanglan ko og panahon, mga 15 minutos, aron mahiusa kining tanan ngadto sa usa ka sugo, akong gibasa kana...
(Bastos nga gibalda ni Pedro ang makuti ug maalamon kaayo nga junior.)
Pedro: Isulat sa separado nga mga sugo, mas sayon ​​basahon.

Ang Dockerfile motubo:

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

Unya si Igor Ivanovich, DevOps (apan mas Ops kay sa Dev), misulod sa opisina nga nagsinggit:

AI: Petya, gibuak na usab sa imong mga developer ang database sa pagkaon, kanus-a kini matapos...

Human sa gamay nga panagsangka, si Igor Ivanovich nagpabugnaw ug nagsugod sa pagpangita kung unsa ang gibuhat sa iyang mga kauban dinhi.

AI: Nag unsa ka?
Vasily: Gitabangan ko ni Peter sa paghimo og Dockerfile para sa bag-ong module.
AI: Tugoti ako sa pagtan-aw ... Unsa ang imong gisulat dinhi, imong gilimpyohan ang repository sa usa ka bulag nga sugo, kini usa ka dugang nga layer ... Apan unsaon nimo pag-instalar sa mga dependency kung wala nimo gikopya ang Gemfile! Ug sa kinatibuk-an, kini dili maayo.
Peter: Palihug buhata ang imong negosyo, mahibal-an namon kini bisan unsang paagi.

Si Igor Ivanovich nasubo nga nanghupaw ug mibiya aron mahibal-an kung kinsa ang nakaguba sa database.

Peter: Oo, apan husto siya bahin sa code, kinahanglan naton iduso kini sa imahe. Ug i-install dayon nato ang ssh ug supervisor, kung dili sugdan nato ang mga daemon.

Vasily: Unya una nakong kopyahon ang Gemfile ug Gemfile.lock, unya akong i-install ang tanan, ug unya kopyahon nako ang tibuok nga proyekto. Kung ang Gemfile dili mausab, ang layer kuhaon gikan sa cache.
Peter: Ngano kamong tanan niining mga sapaw, kopyaha ang tanan sa usa ka higayon. Kopyaha dayon. Ang pinakaunang linya.

Ang Dockerfile karon ingon niini:

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

Peter: So, unsa man sunod? Naa kay config para sa supervisor?
Vasily: Dili, dili. Pero dali ra nako buhaton.
Pedro: Unya buhaton nimo kini. Mag-sketch na kita og init script nga maglunsad sa tanan. Okay, mao nga magsugod ka sa ssh, uban sa nohup, aron kita makakonektar sa sudlanan ug makita kung unsa ang nahitabo. Dayon padagana ang superbisor sa samang paagi. Aw, unya magpasakay ka na lang.
P: Apan nabasa nako nga kinahanglan adunay usa ka proseso, aron mahibal-an sa Docker nga adunay sayup ug mahimo’g ma-restart ang sudlanan.
P: Ayaw samoka imong ulo sa walay pulos. Ug sa kinatibuk-an, sa unsang paagi? Giunsa nimo pagpadagan kining tanan sa usa ka proseso? Himoa nga si Igor Ivanovich maghunahuna mahitungod sa kalig-on, dili alang sa bisan unsa nga siya nakadawat og suweldo. Ang among trabaho mao ang pagsulat sa code. Ug sa kinatibuk-an, pasultiha siya salamat nga among gisulat ang Dockefile alang kaniya.

10 minuto ug duha ka video bahin sa mga iring pagkahuman.

P: Gibuhat na nako ang tanan. Gidugang ko ang dugang nga mga komento.
P: Ipakita nako!

Pinakabag-o nga bersyon sa 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: Maayo, ganahan ko. Ug ang mga komento naa sa Ruso, kombenyente ug mabasa, ang tanan molihok sama niana. Gitudloan ko ikaw sa tanan, mahimo nimo ang uban sa imong kaugalingon. Mag kape ta...

Aw, karon kami adunay usa ka hingpit nga makalilisang nga Dockerfile, ang panan-aw nga makapahimo ni Igor Ivanovich nga gusto nga moundang ug ang iyang mga mata magsakit sa usa ka semana. Ang Dockerfile, siyempre, mahimong mas grabe pa, walay limitasyon sa kahingpitan. Apan alang sa pagsugod, buhaton kini.

Gusto nakong tapuson sa usa ka kinutlo gikan sa Grigory Oster:

Kung dili ka pa sigurado
Gipili namo ang dalan sa kinabuhi,
Ug wala ka kabalo ngano
Pagsugod sa imong panaw sa pagtrabaho,
Bungkaga ang mga bombilya sa mga pasilyo -
Ang mga tawo moingon "Salamat" kanimo.
Makatabang ka sa katawhan
Pagdaginot sa kuryente.

Source: www.habr.com

Idugang sa usa ka comment