Kas Docker on mÀnguasi vÔi mitte? VÔi on see ikka tÔsi?

Tere kÔigile!

Tahaks vÀga kohe teema juurde jÔuda, aga Ôigem oleks natuke oma loost rÀÀkida:

Kanne

Olen programmeerija, kellel on kogemusi ĂŒheleheliste esiotsa rakenduste, scala/java ja nodejs serveris arendamisel.

PĂ€ris pikka aega (paar-kolm aastat kindlasti) olin seda meelt, et Docker on taevamanna ja ĂŒldiselt vĂ€ga lahe tööriist ja sellega peaks hakkama saama absoluutselt iga arendaja. Sellest jĂ€reldub, et igal arendajal peaks olema Docker oma kohalikku masinasse installitud. Aga minu arvamus, vaadake lĂ€bi need vabad töökohad, mis on postitatud samale hh-le. Iga teine ​​sisaldab dokkeri mainimist ja kui see teile kuulub, on see teie konkurentsieelis 😉

Oma teel kohtasin paljusid inimesi, kellel oli erinev suhtumine Dockeri ja selle ökosĂŒsteemi. MĂ”ned ĂŒtlesid, et see on mugav asi, mis tagab platvormidevahelise funktsionaalsuse. Teised ei saanud aru, miks nad peaksid konteinerites jooksma ja mis kasu sellest tuleb, kolmandad ei hoolinud ĂŒldse ja ei viitsinud (kirjutasid lihtsalt koodi ja lĂ€ksid koju – kadestan neid, tee :)

Kasutamise pÔhjused

Miks ma dokkerit kasutasin? TÔenÀoliselt jÀrgmistel pÔhjustel:

  • andmebaasi kĂ€ivitamine, kasutab neid 99% rakendustest
  • nginxi kĂ€ivitamine kasutajaliidese levitamiseks ja puhverserveri kasutamine taustaprogrammi jaoks
  • saate rakenduse pakendada dockeri kujutisesse, nii töötab minu rakendus kĂ”ikjal, kus docker on olemas, levitamisprobleem lahendatakse kohe
  • teenuste avastamine karbist vĂ€lja vĂ”ttes saate luua mikroteenuseid, iga konteiner (ĂŒhendatud ĂŒhisesse vĂ”rku) pÀÀseb hĂ”lpsasti teise juurde aliase kaudu, vĂ€ga mugav
  • Konteiner on lĂ”bus luua ja selles "mĂ€ngida".

Mis mulle dokkeri juures alati EI meeldi:

  • Minu rakenduse töötamiseks vajan serveris Dockerit ennast. Miks mul seda vaja on, kui mu rakendused töötavad jre-s vĂ”i nodejs-is ja nende jaoks mĂ”eldud keskkond on juba serveris?
  • kui ma tahan oma (privaatset) lokaalselt ehitatud pilti kaugserveris kĂ€ivitada, siis mul on vaja oma dockeri repositooriumit, mul on vaja, et register töötaks kuskil ja pean ka https seadistama, sest docker cli töötab ainult ĂŒle https. Oh kurat... muidugi on vĂ”imalusi pildi kohalikuks salvestamiseks docker save ja lihtsalt saada pilt scp kaudu... Aga see on palju kehaliigutusi. Ja pealegi tundub see "kargu" lahendusena, kuni ilmub teie enda hoidla
  • docker-compose. Seda on vaja ainult konteinerite kĂ€itamiseks. See on kĂ”ik. Ta ei saa midagi muud teha. Docker-compose on hunnik oma failide versioone, oma sĂŒntaks. ÜkskĂ”ik kui deklaratiivne see ka poleks, ma ei taha nende dokumentatsiooni lugeda. Mul pole seda kuskil mujal vaja.
  • meeskonnas töötades kirjutab enamik inimesi Dockerfile'i vĂ€ga viltu, ei saa aru, kuidas see vahemĂ€llu salvestatakse, lisab pildile kĂ”ik vajaliku ja mittevajaliku, pĂ€rib piltidelt, mida ei ole Dockerhubis ega privaatses hoidlas, loob mĂ”ne docker-compose failid andmebaasidega ja midagi ei pĂŒsi. Samal ajal kinnitavad arendajad uhkusega, et Docker on lahe, kĂ”ik töötab nende jaoks kohapeal ja HR kirjutab vakantsusse: "Kasutame Dockerit ja vajame sellise töökogemusega kandidaati."
  • Mind kummitavad pidevalt mĂ”tted Dockeris kĂ”ike tĂ”sta: postgresql, kafka, redis. Kahju, et kĂ”ik konteinerites ei tööta, kĂ”ike pole lihtne konfigureerida ja kĂ€ivitada. Seda toetavad kolmanda osapoole arendajad, mitte mĂŒĂŒjad ise. Ja muide, tekib kohe kĂŒsimus: mĂŒĂŒjad ei muretse oma toodete Dockeris hooldamise pĂ€rast, miks see nii on, vĂ”ib-olla nad teavad midagi?
  • Alati tekib kĂŒsimus konteineriandmete pĂŒsivuse kohta. ja siis mĂ”tled, kas ma peaksin lihtsalt ĂŒhendama hosti kataloogi vĂ”i looma dokiköite vĂ”i tegema andmekonteineri, mis on nĂŒĂŒd deprecated? Kui ĂŒhendan kataloogi, siis pean veenduma, et konteineris oleva kasutaja uid ja gid ĂŒhtivad konteineri kĂ€ivitanud kasutaja ID-ga, vastasel juhul luuakse konteineri loodud failid juurĂ”igustega. Kui ma kasutan volume siis mĂ”nes luuakse andmed lihtsalt /usr/* ja uid ja gid saab olema sama lugu nagu esimesel juhul. Kui kĂ€ivitate kolmanda osapoole komponendi, peate lugema dokumentatsiooni ja otsima vastust kĂŒsimusele: "millistesse konteinerikataloogidesse komponent faile kirjutab?"

Mulle pole alati meeldinud, et pidin Dockeriga liiga kaua nokitsema algstaadiumis: MĂ”tlesin vĂ€lja, kuidas konteinereid kĂ€ivitada, millistest piltidest kĂ€ivitada, tegin Makefile, mis sisaldas pikkade Dockeri kĂ€skude varjunimesid. Ma vihkasin dokkide koostamist, sest ma ei tahtnud Ă”ppida dokkide ökosĂŒsteemis teist tööriista. JA docker-compose up Mind hĂ€iris see, eriti kui nad seal ikka kohtusid build konstruktsioonid, mitte juba kokkupandud kujutised. KĂ”ik, mida ma tĂ”esti tahtsin, oli lihtsalt toode tĂ”husalt ja kiiresti valmistada. Kuid ma ei saanud aru, kuidas dokkerit kasutada.

Tutvustame Ansible'i

Hiljuti (kolm kuud tagasi) töötasin DevOpsi meeskonnaga, mille peaaegu kÔik liikmed suhtusid Dockeri negatiivselt. PÔhjustel:

  • docker reeglid iptables (kuigi saate selle keelata saidil daemon.json)
  • docker on lollakas ja me ei kasuta seda tootmises
  • kui dokkedeemon jookseb kokku, jooksevad kĂ”ik infrastruktuuriga konteinerid kokku vastavalt
  • dokkerit pole vaja
  • milleks docker, kui on olemas Ansible ja virtuaalmasinad

Samal töökohal tutvusin veel ĂŒhe tööriistaga - Ansible. Ma kuulsin sellest kunagi, kuid ma ei pĂŒĂŒdnud oma mĂ€nguraamatuid kirjutada. Ja nĂŒĂŒd hakkasin oma ĂŒlesandeid kirjutama ja siis muutus mu nĂ€gemus tĂ€ielikult! Sest sain aru: Ansiblel on moodulid samade dokkekonteinerite, pildiehituste, vĂ”rkude jms kĂ€itamiseks ning konteinereid saab kĂ€ivitada mitte ainult lokaalselt, vaid ka kaugserverites! Minu rÔÔmul polnud piire – leidsin NORMAALSE tööriista ja viskasin Ă€ra oma Makefile'i ja dockeri koostamise failid, need asendati yamli ĂŒlesannetega. Koodi vĂ€hendati, kasutades selliseid konstruktsioone nagu loop, whenJne

Docker kolmandate osapoolte komponentide, nÀiteks andmebaaside kÀitamiseks

Hiljuti sain tuttavaks ssh tunnelitega. Selgus, et kaugserveri porti on vĂ€ga lihtne “edasida” kohalikku porti. Kaugserver vĂ”ib olla kas pilves olev masin vĂ”i VirtualBoxis töötav virtuaalmasin. Kui mu kolleeg vĂ”i mina vajame andmebaasi (vĂ”i mĂ”nda muud kolmanda osapoole komponenti), saame serveri selle komponendiga lihtsalt kĂ€ivitada ja selle vĂ€lja lĂŒlitada, kui serverit pole vaja. Pordi edastamine annab sama efekti kui dokkimiskonteineris töötav andmebaas.

See kÀsk edastab mu kohaliku pordi kaugserverisse, kus töötab postgresql:

ssh -L 9000:localhost:5432 kasutaja@nÀide.com

Kaugserveri kasutamine lahendab meeskonna arendamise probleemi. Sellist serverit saavad korraga kasutada mitu arendajat, nad ei pea oskama postgresqli konfigureerida, Dockerist ja muudest keerukustest aru saama. Kaugserveris saate sama andmebaasi installida ka Dockerisse, kui konkreetse versiooni installimine on keeruline. KÔik, mida arendajad vajavad, on ssh-juurdepÀÀs!

Hiljuti lugesin, et SSH tunnelid on tavalise VPN-i piiratud funktsionaalsusega! Saate lihtsalt seadistada OpenVPN vÔi muud VPN-i rakendused, seadistage infrastruktuur ja tehke see arendajatele kÀttesaadavaks. See on nii lahe!

Õnneks pakuvad AWS, GoogleCloud ja teised teile aasta aega tasuta kasutamist, seega kasutage neid! Need on odavad, kui lĂŒlitate need vĂ€lja, kui neid ei kasutata. Olen alati mĂ”elnud, miks mul on vaja kaugserverit nagu gcloud, tundub, et leidsin need.

Kohaliku virtuaalmasinana saate kasutada sedasama Alpine'i, mida kasutatakse aktiivselt dokkimiskonteinerites. Noh, vÔi mÔni muu kerge jaotus, et masin kiiremini kÀivitada.

Alumine rida: saate ja peaksite kaugserverites vĂ”i virtualboxis andmebaase ja muid infrastruktuuri hĂŒvesid kĂ€ivitama. Ma ei vaja nendel eesmĂ€rkidel dokkerit.

Veidi dockeri piltidest ja levitamisest

Ma juba kirjutasin artiklit millega tahtsin öelda, et dockeri piltide kasutamine ei anna mingit garantiid. Dockeri pilte on vaja ainult dokkimiskonteineri loomiseks. Kui tÀiendate dokkeri kujutist, siis tÀiendate dokkeri konteinereid ja kasutate ainult neid.

Kas olete nÀinud kuskil, kus tarkvaraarendajad portivad oma tooteid ainult dokkimispildina?
Enamiku toodete tulemuseks on binaarfailid konkreetse platvormi jaoks, need lisatakse lihtsalt dockeri kujutisele, mis pÀritakse soovitud platvormilt. Kas olete kunagi mÔelnud, miks on dockerhubis nii palju sarnaseid pilte? Sisestage nÀiteks nginx, nÀete 100500 XNUMX pilti erinevatelt inimestelt. Need inimesed ei arendanud nginxi ise, nad lihtsalt lisasid ametliku nginxi oma dokipildile ja maitsestasid seda konteinerite kÀivitamise mugavuse huvides oma konfiguratsioonidega.

Üldiselt saab selle lihtsalt tgz-s salvestada, kui kellelgi on vaja seda dockeris kĂ€ivitada, siis las ta lisab tgz Dockerfile'i, pĂ€rib soovitud keskkonnast ja loob tĂ€iendavaid hunnikuid, mis ei muuda rakendust ennast tgz-is. IgaĂŒks, kes loob dockeri kujutise, teab, mis on tgz ja mida ta tööks vajab. Nii kasutan ma dokkerit siin

Alumine rida: ma ei vaja dockeri registrit, ma kasutan mingit S3 vÔi lihtsalt failisalvestust, nÀiteks google drive/dropbox

Docker CI-s

KĂ”ik ettevĂ”tted, kus olen töötanud, on sarnased. Tavaliselt on need toidupoed. See tĂ€hendab, et neil on ĂŒks rakendus, ĂŒks tehnoloogiapakk (noh, vĂ”ib-olla paar vĂ”i kolm programmeerimiskeelt).

Need ettevĂ”tted kasutavad dokkerit oma serverites, kus CI-protsess töötab. KĂŒsimus: Miks peate oma serverites projekte ehitama dokkeri konteineris? Miks mitte lihtsalt ehitada keskkond ette, nĂ€iteks kirjutada Ansible playbook, mis installib serverisse, kus ehitamine toimub, vajalikud nodejs, php, jdk versioonid, kopeerib ssh vĂ”tmed jne?

NĂŒĂŒd saan aru, et see tulistab endale jalga, sest docker ei too oma isolatsiooniga tulu. Probleemid, millega puutusin kokku CI-ga dockeris:

  • jĂ€llegi on ehitamiseks vaja dockeri kujutist. peate otsima pildi vĂ”i kirjutama oma dockeri faili.
  • 90%, et peate edastama mĂ”ned ssh-vĂ”tmed, salajased andmed, mida te ei soovi dockeri kujutisele kirjutada.
  • konteiner luuakse ja sureb, koos sellega kaovad kĂ”ik vahemĂ€lud. jĂ€rgmises jĂ€rgus laaditakse kĂ”ik projektisĂ”ltuvused uuesti alla, mis on aeganĂ”udev ja ebaefektiivne ning aeg on raha.

Arendajad ei ehita projekte dokkide konteineritesse (ma olin kunagi selline fĂ€nn, tĂ”esti, mul on minevikus kahju xD). Javas on vĂ”imalik omada mitut versiooni ja muuta need ĂŒhe kĂ€suga praeguseks vajalikuks. Nodejs on samamoodi, seal on nvm.

VĂ€ljund

Usun, et docker on vĂ€ga vĂ”imas ja paindlik tööriist, see on selle puudus (kĂ”lab kummaliselt, jah). Selle abiga saavad ettevĂ”tted selle kergesti konksu kĂŒlge ja kasutavad seda seal, kus vaja ja mitte. Arendajad kĂ€ivitavad oma konteinerid, mĂ”ned keskkonnad, seejĂ€rel liigub see kĂ”ik sujuvalt CI-sse ja tootmisse. DevOpsi meeskond kirjutab nende konteinerite kĂ€itamiseks mingit koodi.

Kasutage dokkerit ainult sees kÔige hiljutisem töövoo etapis, Àrge lohistage seda projekti alguses. See ei lahenda teie Àriprobleeme. Ta viib probleemid vaid TEISELE tasemele ja pakub omapoolseid lahendusi, sina teed topelttööd.

Kui dokkerit on vaja: JĂ”udsin jĂ€reldusele, et docker oskab vĂ€ga hĂ€sti antud protsessi optimeerida, aga mitte pĂ”hifunktsionaalsust ĂŒles ehitada

Kui otsustate ikkagi dokkerit kasutada, tehke jÀrgmist.

  • ole ÀÀrmiselt ettevaatlik
  • Ă€rge sundige arendajaid dokkerit kasutama
  • lokaliseerige selle kasutamine ĂŒhes kohas, Ă€rge levitage seda kĂ”igis Dockfile'i ja dockeri koostamise hoidlates

PS:

  • Sattusin hiljuti kokku pakendaja ja nad ĂŒtlevad, et see töötab Ansiblega vĂ€ga hĂ€sti ja vĂ”imaldab teil piltide (sealhulgas dokkimispildi) loomise protsessi ĂŒhtlustada.
  • ka dokkerist, huvitav artikkel

TÀname lugemise eest, soovin teile lÀbipaistvaid otsuseid oma asjades ja tulemuslikke tööpÀevi!

Allikas: www.habr.com

Ostke DDoS-kaitsega saitide jaoks usaldusvÀÀrne hostimine, VPS VDS-serverid đŸ”„ Osta usaldusvÀÀrne veebimajutus DDoS-kaitsega, VPS VDS serverid | ProHoster