Èske Docker se yon jwèt oswa ou pa? Oswa èske se toujou vre?

Всем Привет!

Mwen vrèman vle ale tou dwat nan sijè a, men li ta pi kòrèk pou di yon ti kras sou istwa mwen an:

Antre

Mwen se yon pwogramè ki gen eksperyans nan devlope aplikasyon pou yon sèl paj frontend, scala/java ak nodejs sou sèvè a.

Pou yon tan long (definitivman yon koup oswa twa ane), mwen te nan opinyon ke Docker se laman soti nan syèl la ak an jeneral yon zouti trè fre ak absoliman chak pwomotè ta dwe kapab sèvi ak li. Ak nan sa a li swiv ke chak pwomotè ta dwe gen Docker enstale sou machin lokal yo. E opinyon mwen, gade pòs vid yo ki poste sou menm hh. Chak dezyèm gen yon mansyone nan docker, epi si ou posede li, sa a pral avantaj konpetitif ou 😉

Sou wout mwen, mwen te rankontre anpil moun, ak atitid diferan yo anvè Docker ak ekosistèm li yo. Gen kèk te di ke sa a se yon bagay pratik ki garanti fonksyonalite kwa-platfòm. Dezyèm yo pa t 'konprann poukisa yo ta dwe kouri nan kontenè ak ki pwofi ki ta soti nan li, twazyèm lan pa t' pran swen ditou epi yo pa deranje (yo jis ekri kòd la epi yo ale lakay yo - mwen anvye yo, pa la fason :)

Rezon pou itilize

Poukisa mwen te itilize docker? Pwobableman pou rezon sa yo:

  • lansman baz done, 99% nan aplikasyon yo sèvi ak yo
  • lanse nginx pou distribisyon frontend ak proxy nan backend
  • ou ka pake aplikasyon an nan yon imaj docker, fason sa a aplikasyon mwen an ap travay nenpòt kote docker egziste, pwoblèm distribisyon an rezoud imedyatman.
  • dekouvèt sèvis soti nan bwat la, ou ka kreye mikwosèvis, chak veso (konekte ak yon rezo komen) ka fasil jwenn yon lòt atravè yon alyas, trè pratik
  • Li se plezi yo kreye yon veso ak "jwe" nan li.

Ki sa mwen toujou PA renmen sou docker:

  • Pou aplikasyon mwen an travay, mwen bezwen Docker tèt li sou sèvè a. Poukisa mwen bezwen sa a si aplikasyon mwen yo kouri sou jre oswa nodejs ak anviwònman an pou yo deja sou sèvè a?
  • si mwen vle kouri imaj (prive) lokalman bati mwen an sou yon sèvè aleka, Lè sa a, mwen bezwen pwòp depo docker mwen, mwen bezwen rejis la travay yon kote epi mwen bezwen tou konfigirasyon https, paske Docker cli sèlman travay sou https. Oh modi... gen opsyon, nan kou, pou konsève pou imaj la lokalman atravè docker save epi jis voye imaj la atravè scp ... Men, sa se yon anpil nan mouvman kò. Anplis de sa, li sanble yon solisyon "beki" jiskaske repozitwa pwòp ou a parèt
  • docker-compose. Li nesesè sèlman pou kouri kontenè yo. Se tout. Li pa ka fè anyen ankò. Docker-compose gen yon pakèt vèsyon nan dosye li yo, pwòp sentaks li yo. Kèlkeswa jan li ye, mwen pa vle li dokiman yo. Mwen p'ap bezwen li nenpòt lòt kote.
  • lè w ap travay nan yon ekip, pifò moun ekri yon Dockerfile trè mal, pa konprann ki jan li se nan kachèt, ajoute tout sa yo bezwen epi yo pa bezwen nan imaj la, eritye de imaj ki pa nan Dockerhub oswa yon depo prive, kreye kèk. docker-compose dosye ak baz done epi pa gen anyen ki pèsiste. An menm tan an, devlopè yo ak fyète deklare ke Docker se fre, tout bagay ap travay lokalman pou yo, ak HR enpòtan ekri nan pòs vid la: "Nou itilize Docker epi nou bezwen yon kandida ki gen eksperyans travay sa yo."
  • Mwen toujou ap ante pa panse sou ogmante tout bagay nan Docker: postgresql, kafka, redis. Li se yon pitye ke se pa tout bagay ki travay nan resipyan, se pa tout bagay fasil pou konfigirasyon ak kouri. Sa a se sipòte pa devlopè twazyèm pati, epi yo pa pa vandè yo tèt yo. Ak nan chemen an, kesyon an imedyatman rive: machann yo pa enkyete sou kenbe pwodwi yo nan Docker, poukisa se sa a, petèt yo konnen yon bagay?
  • Kesyon an toujou rive sou pèrsistans done veso yo. Lè sa a, ou panse, èske mwen ta dwe jis monte anyè lame a oswa kreye yon volim docker oswa fè yon veso done ki se kounye a? deprecated? Si mwen monte yon anyè, Lè sa a, mwen bezwen asire w ke uid ak gid itilizatè a nan veso a matche ak id itilizatè a ki te lanse veso a, otreman dosye yo kreye pa veso a pral kreye ak dwa rasin. Si mwen itilize volume Lè sa a, done yo pral tou senpleman dwe kreye nan kèk /usr/* epi pral gen menm istwa a ak uid ak gid tankou nan premye ka a. Si w ap lanse yon eleman twazyèm pati, ou bezwen li dokiman an epi chèche repons pou kesyon an: "nan ki repèrtwar veso eleman an ekri fichye?"

Mwen te toujou pa renmen lefèt ke mwen te oblije brikole ak Docker pou twò lontan nan etap inisyal la: Mwen te kalkile ki jan yo lanse resipyan, ki imaj yo lanse soti nan, te fè Makefiles ki gen alyas kòmand Docker long. Mwen te rayi docker-compose paske mwen pa t 'vle aprann yon lòt zouti nan ekosistèm docker la. AK docker-compose up Sa te deranje m, sitou si yo te rankontre toujou la build konstriksyon, olye ke imaj deja reyini. Tout sa mwen reyèlman te vle se jis fè yon pwodwi avèk efikasite epi byen vit. Men, mwen pa t 'kapab konnen ki jan yo sèvi ak docker.

Entwodwi Ansible

Dènyèman (twa mwa de sa), mwen te travay ak yon ekip DevOps, prèske chak manm nan ki te gen yon atitid negatif anvè Docker. Pou rezon:

  • docker règ iptables (byenke ou ka enfim li nan daemon.json)
  • docker se buggy epi nou pa pral kouri li nan pwodiksyon an
  • si Docker daemon aksidan, Lè sa a, tout veso ki gen aksidan enfrastrikti kòmsadwa
  • pa bezwen docker
  • poukisa docker si gen Ansible ak machin vityèl

Nan menm travay la, mwen te vin konnen ak yon lòt zouti - Ansible. Mwen te tande pale de li yon fwa, men mwen pa t eseye ekri liv pwòp mwen yo. Epi, koulye a mwen te kòmanse ekri travay mwen ak Lè sa a, vizyon mwen konplètman chanje! Paske mwen reyalize: Ansible gen modil pou kouri menm kontenè Docker yo, bati imaj, rezo, elatriye, ak resipyan yo ka kouri pa sèlman lokalman, men tou sou sèvè aleka! Plezi mwen pa te konnen okenn limit - mwen te jwenn yon zouti NORMAL epi mwen jete Makefile mwen ak fichye Docker-compose, yo te ranplase ak travay yaml. Kòd la te redwi lè l sèvi avèk konstwi tankou loop, when, Elatriye

Docker pou kouri eleman twazyèm pati tankou baz done

Dènyèman, mwen te fè konesans ak tinèl ssh. Li te tounen soti ke li trè fasil pou "voye" pò a nan yon sèvè aleka nan yon pò lokal yo. Sèvè a aleka ka swa yon machin nan nwaj la oswa yon machin vityèl ki kouri nan VirtualBox. Si kòlèg mwen oswa mwen bezwen yon baz done (oswa kèk lòt eleman twazyèm pati), nou ka senpleman kòmanse sèvè a ak eleman sa a epi fèmen li lè sèvè a pa nesesè. Transmisyon pò bay menm efè ak yon baz done kouri nan yon veso docker.

Kòmandman sa a voye pò lokal mwen an nan yon sèvè aleka ki kouri postgresql:

ssh -L 9000:localhost:5432 [imèl pwoteje]

Sèvi ak yon sèvè aleka rezoud pwoblèm nan ak devlopman ekip. Yon sèvè konsa ka itilize plizyè devlopè alafwa; yo pa bezwen konfigirasyon postgresql, konprann Docker ak lòt sibtilite. Sou yon sèvè aleka, ou ka enstale menm baz done a nan Docker tèt li, si li difisil pou enstale yon vèsyon espesifik. Tout devlopè yo bezwen se bay aksè ssh!

Mwen fèk li ke tinèl SSH yo se yon fonksyonalite limite nan yon VPN regilye! Ou ka tou senpleman enstale OpenVPN oswa lòt enplemantasyon VPN, mete kanpe enfrastrikti a epi bay devlopè li pou itilize. Sa a tèlman fre!

Erezman, AWS, GoogleCloud ak lòt moun ba ou yon ane nan itilizasyon gratis, kidonk sèvi ak yo! Yo bon mache si ou fèmen yo lè yo pa itilize yo. Mwen toujou mande poukisa mwen ta bezwen yon sèvè aleka tankou gcloud, sanble ke mwen te jwenn yo.

Kòm yon machin vityèl lokal, ou ka itilize menm Alpine a, ki se aktivman itilize nan resipyan Docker. Oke, oswa kèk lòt distribisyon ki lejè fè machin nan bòt pi vit.

Anba liy: ou ka epi ou ta dwe kouri baz done ak lòt bagay enfrastrikti sou sèvè aleka oswa nan virtualbox. Mwen pa bezwen docker pou rezon sa yo.

Yon ti kras sou imaj docker ak distribisyon

Mwen deja ekri yon atik nan ki mwen te vle transmèt ke lè l sèvi avèk imaj docker pa bay okenn garanti. Imaj Docker yo bezwen sèlman pou kreye yon veso Docker. Si w ap amelyore nan yon imaj docker, Lè sa a, w ap amelyore pou itilize resipyan docker epi w ap itilize yo sèlman.

Èske w te wè nenpòt kote devlopè lojisyèl pò pwodwi yo sèlman nan yon imaj docker?
Rezilta a nan pifò pwodwi yo se dosye binè pou yon platfòm espesifik; yo tou senpleman ajoute nan imaj la Docker, ki se eritye nan platfòm la vle. Èske w te janm mande poukisa gen anpil imaj ki sanble sou dockerhub? Antre nan nginx pou egzanp, ou pral wè 100500 imaj ki soti nan diferan moun. Moun sa yo pa t 'devlope nginx tèt li, yo tou senpleman ajoute nginx ofisyèl nan imaj docker yo epi sezonman li ak pwòp konfigirasyon yo pou konvenyans nan lanse resipyan.

An jeneral, ou ka tou senpleman magazen li nan tgz, si yon moun bezwen kouri li nan Docker, Lè sa a, kite yo ajoute tgz nan Dockerfile a, eritye nan anviwònman an vle ak kreye pen adisyonèl ki pa chanje aplikasyon an tèt li nan tgz. Nenpòt moun ki pral kreye yon imaj docker pral konnen ki sa tgz se ak sa li bezwen travay. Men ki jan mwen itilize docker isit la

Anba liy: Mwen pa bezwen rejis docker, mwen pral sèvi ak kèk kalite S3 oswa jis depo dosye tankou google drive / dropbox

Docker nan CI

Tout konpayi mwen te travay pou yo sanble. Yo anjeneral makèt. Sa vle di, yo gen yon aplikasyon, yon pil teknoloji (byen, petèt yon koup oswa twa lang pwogramasyon).

Konpayi sa yo sèvi ak Docker sou sèvè yo kote pwosesis CI kouri. Kesyon: Poukisa ou bezwen bati pwojè nan yon veso Docker sou sèvè ou yo? Poukisa nou pa jis prepare yon anviwònman pou bati a, pou egzanp, ekri yon liv Ansible ki pral enstale vèsyon ki nesesè nan nodejs, php, jdk, kopye kle ssh, elatriye sou sèvè kote bati a pral pran plas?

Koulye a, mwen konprann ke sa a se tire tèt mwen nan pye a, paske docker pa pote okenn pwofi ak izolasyon li yo. Pwoblèm mwen te rankontre ak CI nan docker:

  • ankò ou bezwen yon imaj docker pou konstwi. ou bezwen chèche yon imaj oswa ekri pwòp dockerfile ou.
  • 90% ke ou bezwen voye kèk kle ssh, done sekrè ke ou pa vle ekri nan imaj la docker.
  • veso a kreye epi li mouri, tout kachèt yo pèdi ansanm ak li. pwochen bati a pral re-telechaje tout depandans pwojè yo, ki se tan konsome ak efikas, ak tan se lajan.

Devlopè yo pa bati pwojè nan resipyan docker (mwen te yon fwa tankou yon fanatik, reyèlman, mwen regrèt pou tèt mwen nan tan lontan an xD). Nan java li posib pou gen plizyè vèsyon epi chanje yo ak yon sèl kòmandman nan youn nan ou bezwen kounye a. Se menm bagay la tou nan nodejs, gen nvm.

Sòti

Mwen kwè ke docker se yon zouti trè pwisan ak fleksib, sa a se dezavantaj li yo (son etranj, wi). Avèk èd li yo, konpayi yo ka fasilman jwenn branche sou li epi sèvi ak li kote sa nesesè epi yo pa bezwen. Devlopè yo lanse kontenè yo, kèk nan anviwònman yo, Lè sa a, li tout san pwoblèm koule nan CI ak pwodiksyon an. Ekip DevOps la ap ekri kèk kalite kòd pou kouri kontenè sa yo.

Sèvi ak docker sèlman sou pi resan an etap nan workflow ou a, pa trennen li nan pwojè a nan kòmansman an. Li p ap rezoud pwoblèm biznis ou. Li pral sèlman deplase pwoblèm yo nan yon LÒT nivo epi ofri pwòp solisyon li yo, ou pral fè travay doub.

Lè docker nesesè: Mwen te rive nan konklizyon ke docker trè bon nan optimize yon pwosesis bay, men se pa nan bati fonksyonalite debaz yo

Si ou toujou deside sèvi ak docker, lè sa a:

  • fè anpil atansyon
  • pa fòse devlopè yo sèvi ak docker
  • lokalize itilizasyon li nan yon sèl kote, pa gaye li nan tout depo Dockefile ak Docker-compose

PS:

  • Mwen dènyèman te rankontre pakè epi yo di ke li travay trè byen ak Ansible epi li pèmèt ou inifye pwosesis la nan bati imaj (ki gen ladan imaj docker)
  • tou sou docker, atik enteresan

Mèsi paske w li, mwen swete w pran desizyon transparan nan zafè w ak jou travay pwodiktif!

Sous: www.habr.com

Add nouvo kòmantè