Ai tegan yw Docker ai peidio? Neu a yw'n dal yn wir?

Helo bawb!

Rwyf wir eisiau mynd yn syth at y pwnc, ond byddai'n fwy cywir adrodd ychydig am fy stori:

Mynediad

Rwy'n rhaglennydd gyda phrofiad o ddatblygu cymwysiadau un dudalen flaen, scala/java a nodejs ar y gweinydd.

Am gyfnod eithaf hir (cwpl neu dair blynedd yn bendant), roeddwn i o'r farn bod Docker yn fanna o'r nefoedd ac yn gyffredinol yn offeryn cŵl iawn ac y dylai pob datblygwr allu ei ddefnyddio. Ac o hyn mae'n dilyn y dylai pob datblygwr gael Docker wedi'i osod ar eu peiriant lleol. Beth am fy marn i, edrychwch drwy'r swyddi gweigion sy'n cael eu postio ar yr un hh. Mae pob eiliad yn cynnwys sôn am dociwr, ac os ydych chi'n berchen arno, dyma fydd eich mantais gystadleuol 😉

Ar fy ffordd, cyfarfûm â llawer o bobl, gyda'u gwahanol agweddau tuag at Docker a'i ecosystem. Dywedodd rhai fod hwn yn beth cyfleus sy'n gwarantu ymarferoldeb traws-lwyfan. Doedd yr ail rai ddim yn deall pam y dylen nhw redeg mewn cynwysyddion a pha elw fyddai'n dod ohono, doedd y trydydd ddim yn poeni o gwbl ac nid oedd yn trafferthu (roedden nhw newydd ysgrifennu'r cod a mynd adref - dwi'n eiddigeddus ohonynt, gan y ffordd :)

Rhesymau dros ddefnyddio

Pam wnes i ddefnyddio docker? Mae'n debyg am y rhesymau canlynol:

  • lansio cronfa ddata, mae 99% o gymwysiadau yn eu defnyddio
  • lansio nginx ar gyfer dosbarthu frontend a dirprwy i backend
  • gallwch chi becynnu'r cymhwysiad mewn delwedd docwr, fel hyn bydd fy nghais yn gweithio lle bynnag mae dociwr yn bodoli, mae'r broblem ddosbarthu yn cael ei datrys ar unwaith
  • darganfod gwasanaeth allan o'r bocs, gallwch greu microservices, gall pob cynhwysydd (wedi'i gysylltu â rhwydwaith cyffredin) gyrraedd un arall yn hawdd trwy alias, yn gyfleus iawn
  • Mae'n hwyl creu cynhwysydd a “chwarae” ynddo.

Yr hyn NAD wyf bob amser yn ei hoffi am docker:

  • Er mwyn i'm cais weithio, mae angen Docker ei hun arnaf ar y gweinydd. Pam fod angen hyn arnaf os yw fy ngheisiadau'n rhedeg ar jre neu nodejs a bod yr amgylchedd ar eu cyfer eisoes ar y gweinydd?
  • os ydw i eisiau rhedeg fy delwedd (preifat) a adeiladwyd yn lleol ar weinydd anghysbell, yna mae angen fy ystorfa docwr fy hun arnaf, mae angen y gofrestrfa arnaf i weithio yn rhywle ac mae angen i mi hefyd ffurfweddu https, oherwydd dim ond dros https y mae cli docwr yn gweithio. O damn... mae yna opsiynau, wrth gwrs, i arbed y ddelwedd yn lleol trwy docker save a dim ond anfon y ddelwedd trwy scp... Ond mae hynny'n llawer o symudiadau corff. Ac ar wahân, mae'n edrych fel ateb “crutch” nes bod eich storfa eich hun yn ymddangos
  • docker-compose. Dim ond i redeg cynwysyddion sydd ei angen. Dyna i gyd. Ni all wneud unrhyw beth arall. Docker-compose Mae ganddo griw o fersiynau o'i ffeiliau, ei chystrawen ei hun. Ni waeth pa mor ddatganiadol ydyw, nid wyf am ddarllen eu dogfennaeth. Fydda i ddim ei angen yn unman arall.
  • wrth weithio mewn tîm, mae'r rhan fwyaf o bobl yn ysgrifennu Dockerfile yn gam iawn, ddim yn deall sut mae wedi'i storio, yn ychwanegu popeth sydd ei angen arnynt ac nad oes ei angen arnynt i'r ddelwedd, etifeddu o ddelweddau nad ydynt yn Dockerhub neu ystorfa breifat, creu rhai docker-compose ffeiliau gyda chronfeydd data a dim byd yn parhau. Ar yr un pryd, mae'r datblygwyr yn datgan yn falch bod Docker yn cŵl, mae popeth yn gweithio'n lleol iddyn nhw, ac mae AD yn bwysig iawn yn ysgrifennu yn y swydd wag: “Rydyn ni'n defnyddio Docker ac mae angen ymgeisydd gyda phrofiad gwaith o'r fath.”
  • Rwy'n cael fy mhoeni'n gyson gan feddyliau am godi popeth yn Docker: postgresql, kafka, redis. Mae'n drueni nad yw popeth yn gweithio mewn cynwysyddion, nid yw popeth yn hawdd i'w ffurfweddu a'i redeg. Cefnogir hyn gan ddatblygwyr trydydd parti, ac nid gan y gwerthwyr eu hunain. A chyda llaw, mae'r cwestiwn yn codi ar unwaith: nid yw gwerthwyr yn poeni am gynnal eu cynhyrchion yn Docker, pam, efallai eu bod yn gwybod rhywbeth?
  • Mae'r cwestiwn bob amser yn codi ynghylch dyfalbarhad data cynhwysydd. ac yna rydych chi'n meddwl, a ddylwn i osod y cyfeiriadur gwesteiwr neu greu cyfaint docwr neu wneud cynhwysydd data sydd nawr deprecated? Os ydw i'n gosod cyfeiriadur, yna mae angen i mi sicrhau bod uid a gid y defnyddiwr yn y cynhwysydd yn cyfateb i id y defnyddiwr a lansiodd y cynhwysydd, fel arall bydd y ffeiliau a grëwyd gan y cynhwysydd yn cael eu creu gyda hawliau gwraidd. Os byddaf yn defnyddio volume yna bydd y data yn syml yn cael ei greu mewn rhai /usr/* a bydd yr un hanes gydag uid a gid ag yn yr achos cyntaf. Os ydych chi'n lansio cydran trydydd parti, mae angen i chi ddarllen y ddogfennaeth a chwilio am yr ateb i'r cwestiwn: “ym mha gyfeirlyfrau cynhwysydd y mae'r gydran yn ysgrifennu ffeiliau?”

Doeddwn i bob amser ddim yn hoffi'r ffaith bod yn rhaid i mi dinceri gyda Docker yn rhy hir yn y cam cychwynnol: Fe wnes i ddarganfod sut i lansio cynwysyddion, o ba ddelweddau i'w lansio, gwnaeth Makefiles a oedd yn cynnwys arallenwau i orchmynion Docker hir. Roeddwn i'n casáu cyfansoddi docwyr oherwydd doeddwn i ddim eisiau dysgu teclyn arall yn ecosystem y docwyr. AC docker-compose up Roedd yn fy mhoeni, yn enwedig os oeddent yn dal i gyfarfod yno build cystrawennau, yn hytrach na delweddau a gasglwyd eisoes. Y cyfan roeddwn i wir eisiau oedd gwneud cynnyrch yn effeithlon ac yn gyflym. Ond ni allwn ddarganfod sut i ddefnyddio docwr.

Cyflwyno Ansible

Yn ddiweddar (tri mis yn ôl), bûm yn gweithio gyda thîm DevOps, ac roedd gan bron bob aelod ohono agwedd negyddol tuag at Docker. Am resymau:

  • Mae docker yn rheoli iptables (er y gallwch ei analluogi yn daemon.json)
  • mae docker yn bygi ac ni fyddwn yn ei redeg wrth gynhyrchu
  • os bydd daemon docwr yn damwain, yna mae'r holl gynwysyddion â seilwaith yn chwalu yn unol â hynny
  • dim angen docwr
  • pam docker os oes peiriannau Ansible a rhithwir

Yn yr un swydd, deuthum yn gyfarwydd ag offeryn arall - Ansible. Clywais amdano unwaith, ond wnes i ddim ceisio ysgrifennu fy llyfrau chwarae fy hun. A nawr dechreuais ysgrifennu fy nhasgau ac yna newidiodd fy ngweledigaeth yn llwyr! Oherwydd i mi sylweddoli: Mae gan Ansible fodiwlau ar gyfer rhedeg yr un cynwysyddion docwyr, adeiladu delweddau, rhwydweithiau, ac ati, a gellir rhedeg cynwysyddion nid yn unig yn lleol, ond hefyd ar weinyddion anghysbell! Nid oedd fy llawenydd yn gwybod unrhyw derfynau - deuthum o hyd i declyn NORMAL a thaflu fy ffeiliau Makefile a docker-compose i ffwrdd, cawsant eu disodli gan dasgau yaml. Cafodd y cod ei leihau trwy ddefnyddio lluniadau fel loop, when, Ac ati

Dociwr ar gyfer rhedeg cydrannau trydydd parti fel cronfeydd data

Yn ddiweddar, deuthum yn gyfarwydd â thwneli ssh. Daeth i'r amlwg ei bod yn hawdd iawn “anfon” porthladd gweinydd pell ymlaen i borthladd lleol. Gall y gweinydd pell fod naill ai'n beiriant yn y cwmwl neu'n beiriant rhithwir sy'n rhedeg yn VirtualBox. Os oes angen cronfa ddata ar fy nghydweithiwr neu fi (neu ryw gydran trydydd parti arall), gallwn ni gychwyn y gweinydd gyda'r gydran hon a'i ddiffodd pan nad oes angen y gweinydd. Mae anfon porthladdoedd yn rhoi'r un effaith â chronfa ddata sy'n rhedeg mewn cynhwysydd docwr.

Mae'r gorchymyn hwn yn anfon fy mhorth lleol ymlaen i weinydd pell sy'n rhedeg postgresql:

ssh -L 9000: gwesteiwr lleol: 5432 [e-bost wedi'i warchod]

Mae defnyddio gweinydd o bell yn datrys y broblem gyda datblygiad tîm. Gall sawl datblygwr ddefnyddio gweinydd o'r fath ar unwaith; nid oes angen iddynt allu ffurfweddu postgresql, deall Docker a chymhlethdodau eraill. Ar weinydd anghysbell, gallwch chi osod yr un gronfa ddata yn Docker ei hun, os yw'n anodd gosod fersiwn benodol. Y cyfan sydd ei angen ar ddatblygwyr yw darparu mynediad ssh!

Darllenais yn ddiweddar fod twneli SSH yn swyddogaeth gyfyngedig o VPN rheolaidd! Yn syml, gallwch chi osod OpenVPN neu weithrediadau VPN eraill, sefydlu'r seilwaith a'i roi i ddatblygwyr i'w ddefnyddio. Mae hyn mor cŵl!

Yn ffodus, mae AWS, GoogleCloud ac eraill yn rhoi blwyddyn o ddefnydd am ddim i chi, felly defnyddiwch nhw! Maent yn rhad os byddwch yn eu diffodd pan nad ydynt yn cael eu defnyddio. Roeddwn i bob amser yn meddwl tybed pam y byddai angen gweinydd anghysbell arnaf fel gcloud, mae'n ymddangos imi ddod o hyd iddynt.

Fel peiriant rhithwir lleol, gallwch ddefnyddio'r un Alpaidd, a ddefnyddir yn weithredol mewn cynwysyddion docwyr. Wel, neu rai dosbarthiadau ysgafn eraill i wneud i'r peiriant gychwyn yn gyflymach.

Gwaelod llinell: gallwch a dylech redeg cronfeydd data a nwyddau seilwaith eraill ar weinyddion anghysbell neu mewn blwch rhithwir. Nid oes angen docker arnaf at y dibenion hyn.

Ychydig am ddelweddau docwyr a dosbarthiad

Ysgrifennais yn barod erthygl lle roeddwn am gyfleu nad yw defnyddio delweddau docwyr yn rhoi unrhyw warant. Mae angen delweddau docwyr i greu cynhwysydd docwr yn unig. Os ydych chi'n uwchraddio i ddelwedd docwr, yna rydych chi'n uwchraddio i ddefnyddio cynwysyddion docwyr a dim ond nhw y byddwch chi'n eu defnyddio.

Ydych chi wedi gweld unrhyw le lle mae datblygwyr meddalwedd yn trosglwyddo eu cynhyrchion mewn delwedd docwr yn unig?
Canlyniad y mwyafrif o gynhyrchion yw ffeiliau deuaidd ar gyfer platfform penodol; yn syml, cânt eu hychwanegu at ddelwedd y docwr, sy'n cael ei etifeddu o'r platfform a ddymunir. Ydych chi erioed wedi meddwl pam fod cymaint o ddelweddau tebyg ar dockerhub? Rhowch nginx er enghraifft, fe welwch 100500 o ddelweddau gan wahanol bobl. Ni ddatblygodd y bobl hyn nginx ei hun, yn syml, fe wnaethant ychwanegu nginx swyddogol at eu delwedd docwr a'i sesno â'u cyfluniadau eu hunain er hwylustod lansio cynwysyddion.

Yn gyffredinol, gallwch ei storio yn tgz yn syml, os oes angen i rywun ei redeg mewn docwr, yna gadewch iddynt ychwanegu tgz i'r Dockerfile, etifeddu o'r amgylchedd a ddymunir a chreu byns ychwanegol nad ydynt yn newid y cymhwysiad ei hun yn tgz. Bydd unrhyw un a fydd yn creu delwedd docwr yn gwybod beth yw tgz a beth sydd ei angen arno i weithio. Dyma sut dwi'n defnyddio docker yma

Gwaelod llinell: Nid oes angen cofrestrfa docwr arnaf, byddaf yn defnyddio rhyw fath o S3 neu dim ond storfa ffeiliau fel google drive / dropbox

Dociwr yn CI

Mae'r holl gwmnïau rydw i wedi gweithio iddyn nhw yn debyg. Maent fel arfer yn nwyddau groser. Hynny yw, mae ganddyn nhw un cymhwysiad, un pentwr technoleg (wel, efallai cwpl neu dair iaith raglennu).

Mae'r cwmnïau hyn yn defnyddio docwr ar eu gweinyddwyr lle mae'r broses CI yn rhedeg. Cwestiwn: Pam mae angen i chi adeiladu prosiectau mewn cynhwysydd docwr ar eich gweinyddwyr? Beth am baratoi amgylchedd ar gyfer yr adeiladu yn unig, er enghraifft, ysgrifennu llyfr chwarae Ansible a fydd yn gosod y fersiynau angenrheidiol o nodejs, php, jdk, copïo allweddi ssh, ac ati i'r gweinydd lle bydd yr adeiladu yn digwydd?

Nawr rwy'n deall bod hyn yn saethu fy hun yn y droed, oherwydd nid yw dociwr yn dod ag unrhyw elw gyda'i unigedd. Problemau y deuthum ar eu traws gyda CI yn y docwr:

  • eto mae angen delwedd docwr arnoch i'w hadeiladu. mae angen i chi chwilio am ddelwedd neu ysgrifennu eich ffeil docker eich hun.
  • 90% bod angen i chi anfon rhai allweddi ssh ymlaen, data cyfrinachol nad ydych chi am ei ysgrifennu at ddelwedd y docwr.
  • mae'r cynhwysydd yn cael ei greu ac yn marw, mae'r holl caches yn cael eu colli ynghyd ag ef. bydd yr adeilad nesaf yn ail-lawrlwytho holl ddibyniaethau'r prosiect, sy'n cymryd llawer o amser ac yn aneffeithiol, ac amser yn arian.

Nid yw datblygwyr yn adeiladu prosiectau mewn cynwysyddion docwyr (roeddwn i ar un adeg yn gymaint o gefnogwr, a dweud y gwir, mae'n ddrwg gen i drosof fy hun yn y gorffennol xD). Yn java mae'n bosibl cael sawl fersiwn a'u newid gydag un gorchymyn i'r un sydd ei angen arnoch nawr. Mae'r un peth mewn nodejs, mae nvm.

Allbwn

Rwy'n credu bod docker yn arf pwerus a hyblyg iawn, dyma ei anfantais (swnio'n rhyfedd, ydy). Gyda'i help, gall cwmnïau wirioni arno'n hawdd a'i ddefnyddio lle bo angen a lle nad oes ei angen. Mae datblygwyr yn lansio eu cynwysyddion, rhai o'u hamgylcheddau, yna mae'r cyfan yn llifo'n esmwyth i mewn i CI a chynhyrchu. Mae tîm DevOps yn ysgrifennu rhyw fath o god i redeg y cynwysyddion hyn.

Defnyddiwch docwr yn unig ymlaen y mwyaf diweddar cam yn eich llif gwaith, peidiwch â'i lusgo i mewn i'r prosiect ar y dechrau. Ni fydd yn datrys eich problemau busnes. Bydd ond yn symud y problemau i lefel ARALL ac yn cynnig ei atebion ei hun, byddwch yn gwneud gwaith dwbl.

Pan fydd angen docwr: Deuthum i'r casgliad bod docwr yn dda iawn am optimeiddio proses benodol, ond nid am adeiladu ymarferoldeb sylfaenol

Os ydych chi'n dal i benderfynu defnyddio docwr, yna:

  • byddwch yn ofalus iawn
  • peidiwch â gorfodi datblygwyr i ddefnyddio docwr
  • lleolwch ei ddefnydd mewn un lle, peidiwch â'i wasgaru ar draws holl ystorfeydd Dokefile a docker-compose

PS:

  • Deuthum ar draws yn ddiweddar pecyn ac maen nhw'n dweud ei fod yn gweithio'n dda iawn gydag Ansible ac yn caniatáu ichi uno'r broses o adeiladu delweddau (gan gynnwys delwedd docwr)
  • hefyd am docker, erthygl ddiddorol

Diolch am ddarllen, dymunaf benderfyniadau tryloyw ichi yn eich materion a'ch diwrnodau gwaith cynhyrchiol!

Ffynhonnell: hab.com

Ychwanegu sylw