Docker jostailua da ala ez? Edo oraindik egia da?

Hola a todos!

Benetan nahi dut zuzenean gaiari heldu, baina zuzenagoa izango litzateke nire istorioa apur bat kontatzea:

Sarrera

Frontend orrialde bakarreko aplikazioak, scala/java eta nodejs zerbitzarian garatzen esperientzia duen programatzailea naiz.

Denbora luzez (dudarik gabe, pare bat edo hiru urte), Docker zeruko mana dela eta orokorrean oso tresna polita dela uste nuen eta garatzaile guztiek erabiltzeko gai izan beharko luketela. Eta hortik ondorioztatzen da garatzaile bakoitzak Docker instalatuta eduki beharko lukeela bertako makinan. Zer esan nire iritziz, begiratu hh berean argitaratzen diren lanpostu hutsak. Segundo bakoitzean docker aipamen bat dago, eta jabea bazara, hau izango da zure abantaila lehiakorra πŸ˜‰

Nire bidean, jende asko ezagutu nuen, Dockerren eta bere ekosistemarekiko duten jarrera ezberdinekin. Batzuek esan zuten plataforma anitzeko funtzionaltasuna bermatzen duen gauza erosoa dela. Bigarrenek ez zuten ulertzen zergatik ibili behar zuten edukiontzietan eta zer irabazi aterako zuten, hirugarrenari ez zitzaion batere axola eta ez zuen trabarik jarri (kodea idatzi eta etxera joan ziren - inbidia dut, modu :)

Erabilerarako arrazoiak

Zergatik erabili dut docker? Ziurrenik arrazoi hauengatik:

  • datu-basea abiarazteko, aplikazioen %99k erabiltzen dituzte
  • nginx abiarazi frontend banaketarako eta proxy backenderako
  • aplikazioa docker irudi batean paketatu dezakezu, horrela nire aplikazioak docker dagoen tokian funtzionatuko du, banaketa arazoa berehala konpontzen da
  • Zerbitzuaren aurkikuntza kutxatik kanpo, mikrozerbitzuak sor ditzakezu, edukiontzi bakoitza (sare komun batera konektatuta) beste batera erraz irits daiteke alias baten bidez, oso erosoa.
  • Dibertigarria da edukiontzi bat sortzea eta bertan "jokatzea".

Docker-etik beti EZ DUDAN GUSTOKOA:

  • Nire aplikazioak funtziona dezan, Docker bera behar dut zerbitzarian. Zergatik behar dut hau nire aplikazioak jre edo nodejs-en exekutatzen badira eta haien ingurunea zerbitzarian badago?
  • Nire (pribatua) lokalean eraikitako irudia urruneko zerbitzari batean exekutatu nahi badut, orduan nire docker biltegi propioa behar dut, erregistroak nonbait funtziona dezan behar dut eta https ere konfiguratu behar dut, docker cli-k https-ren bidez soilik funtzionatzen duelako. Ai alajaina... aukerak daude, noski, irudia lokalean gordetzeko bidez docker save eta besterik gabe bidali irudia scp bidez... Baina hori gorputz-mugimendu asko da. Eta gainera, "makulu" irtenbide bat dirudi zure biltegia agertu arte
  • docker-compose. Ontziak exekutatzeko bakarrik behar da. Hori da dena. Ezin du beste ezer egin. Docker-compose bere fitxategien bertsio mordoa du, bere sintaxia. Ez du axola nola deklaratiboa den, ez dut haien dokumentazioa irakurri nahi. Ez dut beste inon beharko.
  • taldean lan egiten duenean, jende gehienak Dockerfile bat oso oker idazten du, ez du ulertzen nola dagoen cachean, behar eta behar ez duen guztia gehitzen du irudiari, Dockerhub-en edo biltegi pribatu batean ez dauden irudietatik heredatzen dute, sortu docker-compose datu-baseak dituzten fitxategiak eta ezer ez da irauten. Aldi berean, garatzaileek harro adierazten dute Docker polita dela, dena lokalean funtzionatzen duela haientzat, eta HR garrantzitsuak idazten du hutsunean: "Docker erabiltzen dugu eta horrelako lan esperientzia duen hautagai bat behar dugu".
  • Etengabe nago Docker-en dena igotzeko pentsamenduek: postgresql, kafka, redis. Pena da dena edukiontzietan ez funtzionatzea, dena ez dela erraza konfiguratzeko eta exekutatzeko. Hau hirugarrenen garatzaileek onartzen dute, eta ez saltzaileek eurek. Eta bide batez, berehala sortzen da galdera: saltzaileak ez dira kezkatzen beren produktuak Docker-en mantentzeaz, zergatik da hau, agian badakite zerbait?
  • Galdera beti sortzen da edukiontzien datuen iraupenari buruz. eta orduan uste duzu, ostalariaren direktorioa muntatu behar al dut edo docker bolumen bat sortu edo orain dagoen datu-edukiontzi bat egin deprecated? Direktorio bat muntatzen badut, edukiontziko erabiltzailearen uid eta gidak edukiontzia abiarazi duen erabiltzailearen idarekin bat datozela ziurtatu behar dut, bestela edukiontziek sortutako fitxategiak root eskubideekin sortuko dira. Erabiltzen badut volume orduan datuak besterik gabe sortuko dira batzuetan /usr/* eta lehen kasuan bezala uid eta gidekin istorio bera izango da. Hirugarrenen osagai bat abiarazten ari bazara, dokumentazioa irakurri eta galderaren erantzuna bilatu behar duzu: "zein edukiontzi direktoriotan idazten ditu osagaiak fitxategiak?"

Beti ez zait gustatu Docker-ekin denbora luzez egin behar izatea hasierako fasean: Ontziak nola abiarazi, zein iruditatik abiarazi behar diren asmatu nuen, Docker komando luzeen aliasak zituzten Makefiles egin nuen. Gorroto nuen docker-compose, ez nuelako beste tresna bat ikasi nahi docker ekosisteman. ETA docker-compose up Gogaitu ninduen, batez ere oraindik han elkartzen baziren build eraikuntzak, dagoeneko muntatutako irudiak baino. Benetan nahi nuen guztia produktu bat eraginkortasunez eta azkar egitea zen. Baina ezin nuen asmatu docker nola erabili.

Ansible aurkezten

Duela gutxi (duela hiru hilabete), DevOps talde batekin lan egin nuen, ia kide guztiek Dockerekiko jarrera negatiboa izan zuten. Arrazoiengatik:

  • docker-ek iptables arautzen du (daemon.json-en desgaitu dezakezun arren)
  • docker akatsa da eta ez dugu produkzioan abiaraziko
  • Docker daemon-ek huts egiten badu, azpiegitura duten edukiontzi guztiak horren arabera huts egiten dira
  • ez dago dockerren beharrik
  • zergatik docker Ansible eta makina birtualak badaude

Lan berean, beste tresna bat ezagutu nuen: Ansible. Behin entzun nuen horren berri, baina ez nintzen saiatu nire jolas liburuak idazten. Eta orain nire zereginak idazten hasi nintzen eta orduan nire ikuspegia guztiz aldatu zen! Konturatu nintzelako: Ansiblek docker edukiontzi, irudien eraikuntza, sareak, etab. berdinak exekutatzeko moduluak ditu, eta edukiontziak lokalean ez ezik, urruneko zerbitzarietan ere exekutatu daitezke! Nire gozamenak ez zuen mugarik - NORMAL tresna bat aurkitu nuen eta nire Makefile eta docker-compose fitxategiak bota nituen, yaml zereginekin ordezkatu zituzten. Kodea bezalako konstrukzioak erabiliz murriztu zen loop, when, Etab.

Docker hirugarrenen osagaiak exekutatzeko, hala nola datu-baseak

Duela gutxi ssh tunelak ezagutu ditut. Agertu zen oso erraza dela urruneko zerbitzari baten ataka tokiko ataka batera "birbidatzea". Urruneko zerbitzaria hodeiko makina bat edo VirtualBox-en exekutatzen den makina birtual bat izan daiteke. Nire lankideak edo nik datu-base bat behar badugu (edo hirugarrenen beste osagairen bat), zerbitzaria osagai honekin abiarazi eta zerbitzaria behar ez denean itzali besterik ez dugu egin. Portuak birbidaltzeak docker edukiontzi batean exekutatzen den datu-base baten efektu bera ematen du.

Komando honek nire ataka lokala birbidaltzen du postgresql exekutatzen duen urruneko zerbitzari batera:

ssh -L 9000:localhost:5432 [posta elektroniko bidez babestua]

Urruneko zerbitzari bat erabiltzeak taldeen garapenaren arazoa konpontzen du. Horrelako zerbitzari bat hainbat garatzailek erabil dezakete aldi berean; ez dute zertan postgresql konfiguratu, Docker eta beste korapilatsu batzuk ulertu behar. Urruneko zerbitzari batean, datu-base bera instala dezakezu Docker-en bertan, bertsio zehatz bat instalatzea zaila bada. Garatzaileek behar duten guztia ssh sarbidea ematea da!

Duela gutxi irakurri dut SSH tunelak VPN arrunt baten funtzionaltasun mugatua direla! OpenVPN edo beste VPN inplementazio batzuk instalatu, azpiegitura konfiguratu eta garatzaileei eman diezaiekezu erabiltzeko. Oso polita da hau!

Zorionez, AWS, GoogleCloud eta besteek urtebeteko erabilera librea ematen dizute, beraz, erabili! Merkeak dira erabiltzen ez dituzunean itzaltzen badituzu. Beti galdetzen nuen zergatik beharko nuen gcloud bezalako urruneko zerbitzari bat, badirudi aurkitu ditudala.

Tokiko makina birtual gisa, docker edukiontzietan aktiboki erabiltzen den Alpine bera erabil dezakezu. Beno, edo beste banaketa arin batzuk makina azkarrago abiarazteko.

Beheko lerroa: datu-baseak eta beste azpiegitura-opari batzuk exekutatu ditzakezu urruneko zerbitzarietan edo kutxa birtualean. Ez dut docker behar helburu hauetarako.

Docker irudiei eta banaketari buruz apur bat

Dagoeneko idatzi nuen artikulu bat bertan helarazi nahi nuen docker irudiak erabiltzeak ez duela inolako bermerik ematen. Docker-eko irudiak docker edukiontzi bat sortzeko soilik behar dira. Docker irudi batera eguneratzen ari bazara, docker edukiontziak erabiltzeko berritzen ari zara eta horiek bakarrik erabiliko dituzu.

Ikusi al duzu inon software garatzaileek beren produktuak docker irudi batean soilik eramaten dituztenean?
Produktu gehienen emaitza plataforma jakin baterako fitxategi bitarrak dira; docker irudira gehitzen dira, nahi den plataformatik heredatzen dena. Inoiz galdetu al zaizu zergatik dauden antzeko irudi asko dockerhub-en? Sartu nginx adibidez, pertsona ezberdinen 100500 irudi ikusiko dituzu. Pertsona hauek ez zuten nginx bera garatu, nginx ofiziala gehitu zuten beren docker-irudian eta beren konfigurazioekin ondu zuten edukiontziak abiarazteko erosotasunerako.

Oro har, tgz-en gorde dezakezu, norbaitek docker-en exekutatu behar badu, utzi tgz Dockerfile-ra gehitzen, nahi duzun ingurunetik heredatu eta tgz-n aplikazioa bera aldatzen ez duten buns gehigarriak sortu. Docker irudi bat sortuko duenak jakingo du zer den tgz eta zer lan egin behar duen. Horrela erabiltzen dut docker Hemen

Beheko lerroa: ez dut docker erregistroa behar, S3 motaren bat erabiliko dut edo google drive/dropbox bezalako fitxategien biltegiratzea.

Docker CI-n

Lan egin dudan enpresa guztiak antzekoak dira. Normalean janariak dira. Hau da, aplikazio bat dute, pila teknologiko bat (beno, agian pare bat edo hiru programazio-lengoaia).

Enpresa hauek docker erabiltzen dute CI prozesua exekutatzen den zerbitzarietan. Galdera: Zergatik eraiki behar dituzu proiektuak docker edukiontzi batean zure zerbitzarietan? Zergatik ez prestatu ingurune bat eraikitzeko, adibidez, idatzi Ansible playbook bat, nodejs, php, jdk, kopiatu ssh gakoak eta abar beharrezko bertsioak instalatuko dituena eraikitzea egingo den zerbitzarian?

Orain ulertzen dut hau nire buruari tiroka ari naizela oinetan, docker-ek ez duelako etekinik ekartzen bere isolamenduarekin. Docker-en CIrekin aurkitu ditudan arazoak:

  • berriro docker irudi bat behar duzu eraikitzeko. irudi bat bilatu edo zure dockerfile idatzi behar duzu.
  • % 90 ssh gako batzuk birbidali behar dituzula, docker irudira idatzi nahi ez dituzun datu sekretuak.
  • edukiontzia sortu eta hil egiten da, harekin batera cache guztiak galtzen dira. hurrengo eraikuntzak proiektuaren menpekotasun guztiak deskargatuko ditu, denbora asko eta eraginkorra ez dena, eta denbora dirua da.

Garatzaileek ez dituzte proiektuak docker edukiontzietan eraikitzen (behin batean zalea nintzen, benetan, pena ematen dit iraganean xD). Javan posible da hainbat bertsio edukitzea eta komando batekin orain behar duzuna aldatzea. Nodejs-en berdina da, nvm dago.

Irteera

Uste dut docker tresna oso indartsua eta malgua dela, hau da bere eragozpena (arraroa dirudi, bai). Haren laguntzarekin, enpresek erraz lotu eta behar eta behar ez den lekuan erabil dezakete. Garatzaileek euren edukiontziak abiarazten dituzte, beren ingurune batzuk, eta gero guztia erraz isurtzen da CI eta ekoizpenera. DevOps taldea kode mota bat idazten ari da edukiontzi hauek exekutatzeko.

Erabili docker aktibatuta soilik berriena zure lan-fluxuan, ez arrastatu hasieran proiektuan. Ez ditu zure negozio arazoak konponduko. Berak bakarrik eramango ditu arazoak BESTE maila batera eta bere irtenbideak eskainiko ditu, lan bikoitza egingo duzu.

Docker behar denean: Docker prozesu jakin bat optimizatzeko oso ona dela ondorioztatu nuen, baina ez oinarrizko funtzionalitateak eraikitzeko

Docker erabiltzea erabakitzen baduzu, orduan:

  • oso kontuz ibili
  • ez behartu garatzaileak docker erabiltzera
  • lokalizatu bere erabilera leku batean, ez zabaldu Dockefile eta docker-compose biltegi guztietan

PS:

Eskerrik asko irakurtzeagatik, zure aferetan eta lan egun emankorretan erabaki gardenak opa dizkizut!

Iturria: www.habr.com

Gehitu iruzkin berria