Dulaan ba si Docker o dili? O tinuod pa ba kini?

Hello sa tanan!

Gusto gyud nako nga modiretso sa hilisgutan, apan mas husto nga isulti ang gamay bahin sa akong istorya:

entry

Usa ako ka programmer nga adunay kasinatian sa pagpalambo sa frontend nga single page nga mga aplikasyon, scala/java ug nodejs sa server.

Sulod sa dugay nga panahon (sigurado nga usa ka magtiayon o tulo ka tuig), nagtuo ako nga ang Docker usa ka manna gikan sa langit ug sa kinatibuk-an usa ka cool kaayo nga himan ug hingpit nga ang matag developer kinahanglan nga magamit kini. Ug gikan niini nagsunod nga ang matag developer kinahanglan nga adunay Docker nga ma-install sa ilang lokal nga makina. Unsa man ang akong opinyon, tan-awa ang mga bakante nga gi-post sa parehas nga hh. Ang matag segundo adunay usa ka paghisgot sa docker, ug kung ikaw ang tag-iya niini, kini ang imong bentaha sa kompetisyon 😉

Sa akong pagpaingon, nahimamat nako ang daghang mga tawo, nga adunay lainlaing mga kinaiya sa Docker ug sa ekosistema niini. Ang uban nag-ingon nga kini usa ka kombenyente nga butang nga naggarantiya sa pagpaandar sa cross-platform. Ang ikaduha wala makasabut ngano nga sila kinahanglan nga modagan sa mga sudlanan ug unsa ang ganansya gikan niini, ang ikatulo wala gayud magtagad ug wala magsamok (gisulat lang nila ang code ug mipauli - nasina ko kanila, pinaagi sa paagi :)

Mga rason sa paggamit

Ngano nga gigamit nako ang docker? Tingali tungod sa mosunod nga mga rason:

  • paglansad sa database, 99% sa mga aplikasyon ang naggamit niini
  • paglansad sa nginx para sa frontend distribution ug proxying sa backend
  • mahimo nimong i-package ang aplikasyon sa usa ka imahe sa docker, niining paagiha ang akong aplikasyon molihok bisan diin naa ang docker, ang problema sa pag-apod-apod masulbad dayon
  • pagdiskubre sa serbisyo sa gawas sa kahon, makahimo ka og mga microservice, ang matag sudlanan (konektado sa usa ka komon nga network) dali nga makaabot sa lain pinaagi sa usa ka alias, sayon ​​​​kaayo
  • Makalingaw ang paghimo og sudlanan ug "pagdula" niini.

Unsa ang kanunay nga dili nako ganahan bahin sa docker:

  • Aron magtrabaho ang akong aplikasyon, kinahanglan nako ang Docker mismo sa server. Ngano nga kinahanglan nako kini kung ang akong mga aplikasyon nagdagan sa jre o nodejs ug ang palibot alang kanila naa na sa server?
  • kung gusto nako nga ipadagan ang akong (pribado) nga lokal nga gitukod nga imahe sa usa ka hilit nga server, nan kinahanglan nako ang akong kaugalingon nga docker repository, kinahanglan nako ang registry nga magtrabaho sa usa ka lugar ug kinahanglan ko usab nga i-configure ang https, tungod kay ang docker cli nagtrabaho lamang sa https. Oh damn ... adunay mga kapilian, siyempre, aron maluwas ang imahe sa lokal pinaagi sa docker save ug ipadala lang ang hulagway pinaagi sa scp... Pero daghan kaayog lihok sa lawas. Ug gawas pa, kini morag usa ka solusyon nga "krus" hangtod makita ang imong kaugalingon nga repository
  • docker-compose. Kini gikinahanglan lamang sa pagpadagan sa mga sudlanan. Mao ra. Wala na siyay laing mahimo. Docker-compose adunay usa ka hugpong sa mga bersyon sa mga file niini, kaugalingon nga syntax. Bisan unsa pa kini ka deklarasyon, dili ko gusto nga basahon ang ilang dokumentasyon. Dili na nako kinahanglan kini bisan asa.
  • kung nagtrabaho sa usa ka team, kadaghanan sa mga tawo nagsulat sa usa ka Dockerfile nga hiwi kaayo, wala makasabut kung giunsa kini gi-cache, idugang ang tanan nga ilang kinahanglan ug dili kinahanglan sa imahe, makapanunod gikan sa mga imahe nga wala sa Dockerhub o usa ka pribado nga repository, paghimo og pipila. docker-compose mga file nga adunay mga database ug wala’y nagpadayon. Sa parehas nga oras, ang mga developer mapasigarbuhon nga nagpahayag nga ang Docker cool, ang tanan nagtrabaho sa lokal alang kanila, ug ang HR hinungdanon nga nagsulat sa bakante: "Gigamit namon ang Docker ug kinahanglan namon ang usa ka kandidato nga adunay ingon nga kasinatian sa trabaho."
  • Kanunay kong gisamok sa mga hunahuna bahin sa pagpataas sa tanan sa Docker: postgresql, kafka, redis. Kini usa ka kalooy nga dili tanan nga mga buhat sa mga sudlanan, dili ang tanan nga sayon ​​sa pag-configure ug pagdagan. Gisuportahan kini sa mga third-party nga developer, ug dili sa mga vendor mismo. Ug sa ingon, ang pangutana mitungha dayon: ang mga tigbaligya wala mabalaka bahin sa pagpadayon sa ilang mga produkto sa Docker, ngano kini, tingali nahibal-an nila ang usa ka butang?
  • Ang pangutana kanunay nga mitungha bahin sa pagpadayon sa datos sa sulud. ug unya maghunahuna ka, kinahanglan ba nako nga i-mount ang direktoryo sa host o maghimo usa ka gidaghanon sa docker o maghimo usa ka sulud sa datos nga karon deprecated? Kung mag-mount ako usa ka direktoryo, kinahanglan nako nga sigurohon nga ang uid ug gid sa tiggamit sa sulud nahiuyon sa id sa tiggamit nga naglansad sa sulud, kung dili ang mga file nga gihimo sa sulud mahimo’g adunay mga katungod sa ugat. Kung gamiton nako volume unya ang datos himoon lang sa pipila /usr/* ug adunay sama nga istorya nga adunay uid ug gid sama sa una nga kaso. Kung naglansad ka usa ka bahin sa ikatulo nga partido, kinahanglan nimo nga basahon ang dokumentasyon ug pangitaon ang tubag sa pangutana: "sa unsang mga direktoryo sa sulud ang gisulat sa sangkap nga mga file?"

Kanunay kong dili ganahan sa kamatuoran nga kinahanglan kong mag-tinker sa Docker sa dugay nga panahon sa inisyal nga yugto: Nahibal-an nako kung giunsa ang paglansad sa mga sudlanan, kung unsang mga imahe ang ilansad, naghimo sa mga Makefile nga adunay mga alias sa taas nga mga mando sa Docker. Gidumtan nako ang docker-compose tungod kay dili ko gusto nga makat-on og laing himan sa docker ecosystem. UG docker-compose up Nasamok ko, labi na kung nagkita pa sila didto build mga konstruksyon, imbes nga natigom na nga mga hulagway. Ang gusto gyud nako mao ang paghimo lang usa ka produkto nga episyente ug dali. Apan wala nako mahibal-an kung giunsa ang paggamit sa docker.

Pagpaila sa Ansible

Bag-ohay lang (tulo ka bulan ang milabay), nagtrabaho ko sa usa ka grupo sa DevOps, halos matag miyembro niini adunay negatibo nga kinaiya ngadto sa Docker. Alang sa mga hinungdan:

  • Ang docker nagmando sa mga iptables (bisan kung mahimo nimo kini pag-disable sa daemon.json)
  • Ang docker buggy ug dili namo kini ipadagan sa produksiyon
  • kung ang docker daemon nahagsa, nan ang tanan nga mga sudlanan nga adunay imprastraktura nahagsa sumala niana
  • dili kinahanglan ug docker
  • nganong docker kung naay Ansible ug virtual machines

Sa parehas nga trabaho, nahibal-an nako ang lain nga himan - Ansible. Nakadungog ko bahin niini kausa, apan wala ko mosulay sa pagsulat sa akong kaugalingon nga playbook. Ug karon nagsugod ako sa pagsulat sa akong mga buluhaton ug dayon ang akong panan-aw hingpit nga nausab! Tungod kay akong naamgohan: Ang Ansible adunay mga module para sa pagpadagan sa samang docker containers, image builds, networks, ug uban pa, ug ang mga container mahimong ipadagan dili lamang sa lokal, kondili sa mga remote server usab! Ang akong kalipay walay kinutuban - Nakakita ko ug NORMAL nga himan ug gilabay ang akong Makefile ug docker-compose nga mga file, kini gipulihan sa yaml nga mga buluhaton. Ang code gipakunhod pinaagi sa paggamit sa mga konstruksyon sama sa loop, when, Ug uban pa

Docker alang sa pagpadagan sa mga sangkap sa ikatulo nga partido sama sa mga database

Bag-o lang ako nakaila sa ssh tunnels. Kini nahimo nga sayon ​​​​kaayo nga "ipasa" ang pantalan sa usa ka hilit nga server ngadto sa usa ka lokal nga pantalan. Ang hilit nga server mahimo nga usa ka makina sa panganod o usa ka virtual nga makina nga nagdagan sa VirtualBox. Kung ang akong kauban o ako nanginahanglan usa ka database (o uban pa nga bahin sa ikatulo nga partido), mahimo ra naton sugdan ang server gamit kini nga sangkap ug i-off kini kung dili kinahanglan ang server. Ang pagpasa sa pantalan naghatag sa parehas nga epekto sama sa usa ka database nga nagdagan sa usa ka sudlanan sa pantalan.

Kini nga mando nagpasa sa akong lokal nga pantalan sa usa ka hilit nga server nga nagdagan sa postgresql:

ssh -L 9000: localhost: 5432 [protektado sa email]

Ang paggamit sa usa ka hilit nga server makasulbad sa problema sa pagpalambo sa team. Ang ingon nga usa ka server mahimong magamit sa daghang mga developer sa usa ka higayon; dili nila kinahanglan nga ma-configure ang postgresql, masabtan ang Docker ug uban pang mga komplikado. Sa usa ka hilit nga server, mahimo nimong i-install ang parehas nga database sa Docker mismo, kung lisud ang pag-install sa usa ka piho nga bersyon. Ang tanan nga gikinahanglan sa mga developer mao ang paghatag og ssh access!

Bag-ohay lang akong nabasa nga ang SSH tunnels usa ka limitado nga gamit sa usa ka regular nga VPN! Mahimo nimong i-install ang OpenVPN o uban pang mga pagpatuman sa VPN, i-set up ang imprastraktura ug ihatag kini sa mga developer aron magamit. Nindot kaayo ni!

Maayo na lang, ang AWS, GoogleCloud ug uban pa naghatag kanimo usa ka tuig nga libre nga paggamit, busa gamita kini! Barato ra kini kung imong i-off kung dili gamiton. Kanunay ko nga naghunahuna ngano nga kinahanglan nako ang usa ka remote server sama sa gcloud, ingon og nakit-an nako sila.

Ingon usa ka lokal nga virtual machine, mahimo nimong gamiton ang parehas nga Alpine, nga aktibo nga gigamit sa mga sudlanan sa pantalan. Aw, o uban pang mga lightweight nga pag-apod-apod aron mas paspas ang pag-boot sa makina.

Ubos nga linya: mahimo nimo ug kinahanglan nga modagan ang mga database ug uban pang mga maayong imprastraktura sa hilit nga mga server o sa virtualbox. Wala ko magkinahanglan og docker alang niini nga mga katuyoan.

Usa ka gamay bahin sa mga imahe sa docker ug pag-apod-apod

Nagsulat na ko usa ka artikulo diin gusto nako ipasabut nga ang paggamit sa mga imahe sa docker wala maghatag bisan unsang garantiya. Ang mga imahe sa Docker gikinahanglan lamang aron makahimo usa ka sudlanan sa docker. Kung nag-upgrade ka sa usa ka imahe sa docker, unya nag-upgrade ka aron magamit ang mga sulud sa docker ug gamiton ra nimo kini.

Nakita ba nimo bisan asa diin ang mga developer sa software nag-port sa ilang mga produkto sa usa ka docker nga imahe?
Ang resulta sa kadaghanan sa mga produkto mao ang binary nga mga file alang sa usa ka piho nga plataporma; kini gidugang lamang sa docker nga imahe, nga napanunod gikan sa gusto nga plataporma. Nahunahuna ba nimo kung ngano nga adunay daghang parehas nga mga imahe sa dockerhub? Pagsulod sa nginx pananglitan, makakita ka og 100500 ka mga hulagway gikan sa lainlaing mga tawo. Kini nga mga tawo wala nagpalambo sa nginx mismo, gidugang lang nila ang opisyal nga nginx sa ilang docker nga imahe ug gitimplahan kini sa ilang kaugalingon nga mga configs alang sa kasayon ​​​​sa paglansad sa mga sudlanan.

Sa kinatibuk-an, mahimo nimo kini tipigan sa tgz, kung adunay kinahanglan nga modagan niini sa docker, unya pasagdi sila nga idugang ang tgz sa Dockerfile, makapanunod gikan sa gusto nga palibot ug maghimo dugang nga mga buns nga dili magbag-o sa aplikasyon mismo sa tgz. Ang bisan kinsa nga maghimo usa ka imahe sa docker mahibal-an kung unsa ang tgz ug kung unsa ang kinahanglan niyang buhaton. Mao kini kung giunsa nako paggamit ang docker dinhi

Ubos nga linya: Dili nako kinahanglan ang rehistro sa docker, mogamit ako usa ka matang sa S3 o pagtipig ra sa file sama sa google drive / dropbox

Docker sa CI

Ang tanan nga mga kompanya nga akong gitrabahoan parehas. Kasagaran sila nag-grocery. Kana mao, sila adunay usa ka aplikasyon, usa ka teknolohiya nga stack (maayo, tingali usa ka magtiayon o tulo nga mga programming language).

Kini nga mga kompanya naggamit sa docker sa ilang mga server diin ang proseso sa CI midagan. Pangutana: Ngano nga kinahanglan nimo nga magtukod mga proyekto sa usa ka sudlanan sa pantalan sa imong mga server? Ngano nga dili lang mag-andam usa ka palibot alang sa pagtukod, pananglitan, pagsulat sa usa ka Ansible nga playbook nga mag-install sa kinahanglan nga mga bersyon sa nodejs, php, jdk, kopya sa ssh nga mga yawe, ug uban pa sa server diin ang pagtukod mahitabo?

Karon akong nasabtan nga kini nagpusil sa akong kaugalingon sa tiil, tungod kay ang docker wala magdala sa bisan unsa nga ganansya sa iyang pagkalain. Mga problema nga akong nasugatan sa CI sa docker:

  • pag-usab kinahanglan nimo ang usa ka docker nga imahe aron matukod. kinahanglan nimo pangitaon ang usa ka imahe o isulat ang imong kaugalingon nga dockerfile.
  • 90% nga kinahanglan nimo nga ipadala ang pipila ka mga yawe sa ssh, sekreto nga datos nga dili nimo gusto isulat sa imahe sa docker.
  • ang sudlanan gihimo ug namatay, ang tanan nga mga cache nawala uban niini. ang sunod nga pagtukod mag-download pag-usab sa tanan nga mga dependency sa proyekto, nga nag-usik sa oras ug dili epektibo, ug ang oras salapi.

Ang mga nag-develop wala magtukod og mga proyekto sa mga sudlanan sa pantalan (kaniadto ako usa ka fan, sa tinuud, naluoy ako sa akong kaugalingon kaniadto xD). Sa java posible nga adunay daghang mga bersyon ug usbon kini sa usa ka sugo sa usa nga imong gikinahanglan karon. Parehas ra sa nodejs, adunay nvm.

konklusyon

Nagtuo ko nga ang docker usa ka gamhanan kaayo ug flexible nga himan, kini ang disbentaha niini (katingad-an, oo). Uban sa tabang niini, ang mga kompanya dali nga madani niini ug magamit kini kung gikinahanglan ug dili kinahanglan. Ang mga developers naglansad sa ilang mga sudlanan, ang pipila sa ilang mga palibot, unya ang tanan hapsay nga nagaagay sa CI ug produksyon. Ang DevOps team nagsulat og usa ka matang sa code aron sa pagpadagan niini nga mga sudlanan.

Gamita lang ang docker sa ang pinaka bag-o yugto sa imong workflow, ayaw kini i-drag sa proyekto sa sinugdanan. Dili kini makasulbad sa imong mga problema sa negosyo. Ibalhin ra niya ang mga problema sa LAIN nga lebel ug magtanyag sa iyang kaugalingon nga mga solusyon, buhaton nimo ang doble nga trabaho.

Kung gikinahanglan ang docker: Nakahukom ko nga ang docker maayo kaayo sa pag-optimize sa usa ka gihatag nga proseso, apan dili sa pagtukod sa batakang pagpaandar

Kung nakahukom ka pa nga mogamit sa docker, unya:

  • pag-amping pag-ayo
  • ayaw pugsa ang mga developers sa paggamit sa docker
  • i-localize ang paggamit niini sa usa ka lugar, ayaw kini ipakaylap sa tanan nga mga repositoryo sa Dockefile ug docker-compose

PS:

Salamat sa pagbasa, nanghinaut ko nga transparent ka nga mga desisyon sa imong mga kalihokan ug produktibo nga mga adlaw sa pagtrabaho!

Source: www.habr.com

Idugang sa usa ka comment