Да ли је Доцкер играчка или није? Или је то ипак истина?

Поздрав свима!

Заиста желим да пређем директно на тему, али би било исправније да испричам нешто о својој причи:

Улазак

Ја сам програмер са искуством у развоју фронтенд апликација за једну страницу, сцала/јава и нодејс на серверу.

Прилично дуго (дефинитивно пар или три године) био сам мишљења да је Доцкер мана небеска и генерално веома кул алат и апсолутно сваки програмер би требало да га користи. А из овога следи да сваки програмер треба да има инсталиран Доцкер на својој локалној машини. Шта је са мојим мишљењем, погледајте слободна радна места која су објављена на истом чч. Сваки други садржи помињање доцкер-а, а ако га поседујете, ово ће бити ваша конкурентска предност 😉

На свом путу срео сам много људи, са њиховим различитим ставовима према Доцкеру и његовом екосистему. Неки су рекли да је ово згодна ствар која гарантује функционалност на више платформи. Други нису разумели зашто треба да трче у контејнерима и какав ће профит бити од тога, трећи уопште нису марили и нису се трудили (само су написали код и отишли ​​кући - завидим им, по начин :)

Разлози за употребу

Зашто сам користио Доцкер? Вероватно из следећих разлога:

  • покретање базе података, 99% апликација их користи
  • покретање нгинк-а за фронтенд дистрибуцију и проки за бацкенд
  • можете упаковати апликацију у доцкер слику, на овај начин ће моја апликација радити где год постоји доцкер, проблем дистрибуције је одмах решен
  • откривање услуге из кутије, можете креирати микроуслуге, сваки контејнер (повезан на заједничку мрежу) може лако доћи до другог преко псеудонима, веома згодно
  • Забавно је креирати контејнер и „играти се“ у њему.

Оно што ми се увек НЕ свиђа код Доцкер-а:

  • Да би моја апликација радила, потребан ми је сам Доцкер на серверу. Зашто ми је ово потребно ако моје апликације раде на јре или нодејс и окружење за њих је већ на серверу?
  • ако желим да покренем своју (приватну) локално изграђену слику на удаљеном серверу, онда ми је потребно сопствено доцкер спремиште, потребан ми је регистар да ради негде и такође морам да конфигуришем хттпс, јер доцкер цли ради само преко хттпс. О проклетство... постоје опције, наравно, да се слика сачува локално преко docker save и само пошаљите слику преко сцп-а... Али то је много покрета тела. Осим тога, изгледа као решење „штаке“ док се не појави ваше сопствено спремиште
  • docker-compose. Потребно је само за покретање контејнера. То је све. Не може ништа друго. Docker-compose има гомилу верзија својих датотека, сопствену синтаксу. Колико год да је декларативно, нећу да читам њихову документацију. Неће ми требати нигде другде.
  • када раде у тиму, већина људи пише Доцкерфиле веома криво, не разуме како се кешује, додају све што им треба и не треба у слику, наслеђују слике које нису у Доцкерхуб-у или приватном спремишту, креирају неке docker-compose датотеке са базама података и ништа не остаје. Истовремено, програмери са поносом изјављују да је Доцкер кул, све функционише локално за њих, а ХР важно пише у огласу: „Користимо Доцкер и потребан нам је кандидат са таквим радним искуством.“
  • Стално ме прогањају мисли о подизању свега у Доцкер-у: постгрескл, кафка, редис. Штета што не функционише све у контејнерима, није све лако конфигурисати и покренути. Ово подржавају програмери трећих страна, а не сами добављачи. И успут, одмах се поставља питање: продавци не брину о одржавању својих производа у Доцкер-у, зашто је то тако, можда нешто знају?
  • Увек се поставља питање о постојаности података контејнера. и онда помислите, да ли да само монтирам хост директоријум или да направим доцкер волумен или да направим контејнер података који је сада deprecated? Ако монтирам директоријум, онда морам да се уверим да се уид и гид корисника у контејнеру поклапају са ИД-ом корисника који је покренуо контејнер, у супротном ће датотеке које креира контејнер бити креиране са роот правима. Ако користим volume онда ће се подаци једноставно креирати у неким /usr/* и биће иста прича са уид и гид као у првом случају. Ако покрећете компоненту треће стране, потребно је да прочитате документацију и потражите одговор на питање: „у које директоријуме контејнера компонента пише датотеке?“

Увек ми се није свиђала чињеница да сам морао предуго да петљам са Доцкером у почетној фази: Схватио сам како да покренем контејнере, из којих слика да се покренем, направио сам Макефиле који садрже псеудониме дугим Доцкер командама. Мрзео сам доцкер-цомпосе јер нисам желео да научим још један алат у доцкер екосистему. И docker-compose up Сметало ми је, поготово ако су се тамо још срели build конструкције, а не већ састављене слике. Све што сам заиста желео је да једноставно и ефикасно направим производ. Али нисам могао да схватим како да користим доцкер.

Представљамо Ансибле

Недавно (пре три месеца) сам радио са ДевОпс тимом, чији је скоро сваки члан имао негативан став према Доцкер-у. из разлога:

  • доцкер правила иптаблес (иако можете да га онемогућите у даемон.јсон)
  • Доцкер греши и нећемо га покренути у производњи
  • ако се доцкер демон сруши, онда се сви контејнери са инфраструктуром падају у складу с тим
  • нема потребе за доцкером
  • чему доцкер ако постоје Ансибле и виртуелне машине

На истом послу сам се упознао са другим алатом - Ансибле. Једном сам чуо за то, али нисам покушао да напишем сопствене књиге. А сада сам почео да пишем своје задатке и тада ми се визија потпуно променила! Зато што сам схватио: Ансибле има модуле за покретање истих доцкер контејнера, прављења слика, мрежа итд., а контејнери се могу покретати не само локално, већ и на удаљеним серверима! Моје одушевљење није имало граница - пронашао сам НОРМАЛНУ алатку и бацио своје Макефиле и доцкер-цомпосе датотеке, замењени су иамл задацима. Код је смањен коришћењем конструкција попут loop, when, Итд

Доцкер за покретање компоненти треће стране као што су базе података

Недавно сам се упознао са ссх тунелима. Испоставило се да је веома лако „проследити“ порт удаљеног сервера на локални порт. Удаљени сервер може бити или машина у облаку или виртуелна машина која ради у ВиртуалБок-у. Ако мом колеги или мени треба база података (или нека друга компонента треће стране), можемо једноставно покренути сервер са овом компонентом и искључити га када сервер није потребан. Прослеђивање портова даје исти ефекат као база података која ради у доцкер контејнеру.

Ова команда прослеђује мој локални порт на удаљени сервер који ради постгрескл:

ссх -Л 9000:лоцалхост:5432 [емаил заштићен]

Коришћење удаљеног сервера решава проблем са развојем тима. Такав сервер може да користи неколико програмера одједном; они не морају да буду у стању да конфигуришу постгрескл, разумеју Доцкер и друге замршености. На удаљеном серверу можете инсталирати исту базу података у самом Доцкер-у, ако је тешко инсталирати одређену верзију. Све што је потребно програмерима је да обезбеде ссх приступ!

Недавно сам прочитао да су ССХ тунели ограничена функционалност обичног ВПН-а! Можете једноставно инсталирати ОпенВПН или друге ВПН имплементације, поставити инфраструктуру и дати је програмерима на употребу. Ово је ТАКО добро!

На срећу, АВС, ГооглеЦлоуд и други вам дају годину дана бесплатног коришћења, па их користите! Јефтини су ако их искључите када се не користе. Увек сам се питао зашто би ми требао удаљени сервер као што је гцлоуд, изгледа да сам их нашао.

Као локалну виртуелну машину, можете користити исти Алпине, који се активно користи у доцкер контејнерима. Па, или неке друге лагане дистрибуције да би се машина брже покренула.

Закључак: можете и треба да покрећете базе података и друге инфраструктурне додатке на удаљеним серверима или у виртуелбоксу. Не треба ми Доцкер за ове сврхе.

Мало о доцкер сликама и дистрибуцији

Већ сам писао статью у коме сам желео да поручим да коришћење доцкер слика не даје никакву гаранцију. Доцкер слике су потребне само за креирање доцкер контејнера. Ако надограђујете на доцкер слику, онда надограђујете да бисте користили доцкер контејнере и користићете само њих.

Да ли сте негде видели где програмери софтвера преносе своје производе само у доцкер слику?
Резултат већине производа су бинарне датотеке за одређену платформу; оне се једноставно додају у доцкер слику, која је наслеђена од жељене платформе. Да ли сте се икада запитали зашто има толико сличних слика на Доцкерхуб-у? Унесите нгинк на пример, видећете 100500 слика од различитих људи. Ови људи нису сами развили нгинк, они су једноставно додали званични нгинк својој доцкер слици и зачинили је сопственим конфигурацијама ради погодности покретања контејнера.

Уопште, можете једноставно да га сачувате у тгз, ако неко треба да га покрене у доцкер-у, онда нека дода тгз у Доцкерфиле, наследи из жељеног окружења и направи додатне бунс које не мењају саму апликацију у тгз. Свако ко буде креирао доцкер имиџ знаће шта је тгз и шта му треба да ради. Овако користим Доцкер овде

Закључак: Не треба ми доцкер регистар, користићу неку врсту С3 или само складиште датотека као што је гоогле диск/дропбок

Доцкер у ЦИ

Све компаније у којима сам радио су сличне. Обично су намирнице. То јест, имају једну апликацију, један технолошки стек (па, можда неколико или три програмска језика).

Ове компаније користе доцкер на својим серверима на којима се покреће ЦИ процес. Питање: Зашто је потребно да градите пројекте у доцкер контејнеру на вашим серверима? Зашто једноставно не припремите окружење за градњу, на пример, напишете Ансибле плаибоок који ће инсталирати потребне верзије нодејс, пхп, јдк, копирати ссх кључеве итд. на сервер на коме ће се градити?

Сада схватам да је ово пуцање себи у ногу, јер доцкер својом изолацијом не доноси никакав профит. Проблеми на које сам наишао са ЦИ у доцкер-у:

  • поново вам је потребна доцкер слика за прављење. потребно је да потражите слику или да напишете сопствени доцкер фајл.
  • 90% да вам је потребно да проследите неке ссх кључеве, тајне податке које не желите да упишете у доцкер слику.
  • контејнер се креира и умире, сви кешови се губе заједно са њим. следећа верзија ће поново преузети све зависности пројекта, што је дуготрајно и неефикасно, а време је новац.

Програмери не праве пројекте у доцкер контејнерима (ја сам некада био такав обожавалац, заиста, жао ми је себе у прошлости кД). У Јави је могуће имати неколико верзија и променити их једном командом у ону која вам је сада потребна. Тако је и у нодејсу, постоји нвм.

Излаз

Верујем да је доцкер веома моћан и флексибилан алат, то је његов недостатак (звучи чудно, да). Уз његову помоћ, компаније се лако могу навући на њега и користити га тамо где је потребно и није потребно. Програмери покрећу своје контејнере, нека своја окружења, а онда се све то глатко улива у ЦИ и производњу. ДевОпс тим пише неку врсту кода за покретање ових контејнера.

Користите само доцкер укључен Најновији фази у вашем току рада, немојте је увлачити у пројекат на почетку. То неће решити ваше пословне проблеме. Он ће само померити проблеме на ДРУГИ ниво и понудити своја решења, а ви ћете радити двоструки посао.

Када је потребан доцкер: Дошао сам до закључка да је доцкер веома добар у оптимизацији датог процеса, али не и у изградњи основне функционалности

Ако ипак одлучите да користите доцкер, онда:

  • будите изузетно опрезни
  • не присиљавајте програмере да користе доцкер
  • локализујте његову употребу на једном месту, немојте га ширити на сва Доцкефиле и доцкер-цомпосе спремишта

ПС:

Хвала вам на читању, желим вам транспарентне одлуке у вашим пословима и продуктивне радне дане!

Извор: ввв.хабр.цом

Додај коментар