Beth yw Docker: taith fer i hanes a thyniadau sylfaenol

Dechreuwyd ar Awst 10fed yn Slurm Cwrs fideo Docker, yr ydym yn ei ddadansoddi'n llwyr - o dyniadau sylfaenol i baramedrau rhwydwaith.

Yn yr erthygl hon byddwn yn siarad am hanes Docker a'i brif dyniadau: Delwedd, Cli, Dockerfile. Mae'r ddarlith wedi'i bwriadu ar gyfer dechreuwyr, felly mae'n annhebygol o fod o ddiddordeb i ddefnyddwyr profiadol. Ni fydd gwaed, pendics na throchi dwfn. Y pethau sylfaenol iawn.

Beth yw Docker: taith fer i hanes a thyniadau sylfaenol

Beth yw Docker

Gadewch i ni edrych ar y diffiniad o Docker o Wikipedia.

Mae Docker yn feddalwedd ar gyfer awtomeiddio lleoli a rheoli cymwysiadau mewn amgylcheddau cynhwysydd.

Nid oes dim yn glir o'r diffiniad hwn. Mae'n arbennig o aneglur beth mae “mewn amgylcheddau sy'n cefnogi cynhwysyddion” yn ei olygu. I ddarganfod, gadewch i ni fynd yn ôl mewn amser. Gadewch i ni ddechrau gyda'r cyfnod rydw i'n ei alw'n gonfensiynol yn “Oes Monolithig.”

Oes monolithig

Y cyfnod monolithig yw'r 2000au cynnar, pan oedd pob cais yn monolithig, gyda chriw o ddibyniaethau. Cymerodd y datblygiad amser hir. Ar yr un pryd, nid oedd llawer o weinyddion; roeddem yn eu hadnabod i gyd wrth eu henwau ac yn eu monitro. Mae yna gymhariaeth mor ddoniol:

Mae anifeiliaid anwes yn anifeiliaid domestig. Yn yr oes monolithig, roedden ni'n trin ein gweinyddion fel anifeiliaid anwes, wedi'u gwastrodi a'u coleddu, gan chwythu smotiau o lwch i ffwrdd. Ac ar gyfer rheoli adnoddau'n well, fe wnaethom ddefnyddio rhithwiroli: fe wnaethom gymryd gweinydd a'i dorri'n sawl peiriant rhithwir, a thrwy hynny sicrhau ynysu'r amgylchedd.

Systemau rhithwiroli sy'n seiliedig ar hypervisor

Mae'n debyg bod pawb wedi clywed am systemau rhithwiroli: VMware, VirtualBox, Hyper-V, Qemu KVM, ac ati Maent yn darparu ynysu cais a rheoli adnoddau, ond mae ganddynt anfanteision hefyd. I wneud rhithwiroli, mae angen hypervisor arnoch chi. Ac mae'r hypervisor yn adnodd uwchben. Ac mae'r peiriant rhithwir ei hun fel arfer yn golossus cyfan - delwedd drom sy'n cynnwys system weithredu, Nginx, Apache, ac o bosibl MySQL. Mae'r ddelwedd yn fawr ac mae'r peiriant rhithwir yn anghyfleus i'w weithredu. O ganlyniad, gall gweithio gyda pheiriannau rhithwir fod yn araf. I ddatrys y broblem hon, crëwyd systemau rhithwiroli ar lefel y cnewyllyn.

Systemau rhithwiroli lefel cnewyllyn

Cefnogir rhithwiroli lefel cnewyllyn gan systemau OpenVZ, Systemd-nspawn, LXC. Enghraifft drawiadol o rithwiroli o'r fath yw LXC (Linux Containers).

Mae LXC yn system rhithwiroli ar lefel system weithredu ar gyfer rhedeg sawl achos ynysig o'r system weithredu Linux ar un nod. Nid yw LXC yn defnyddio peiriannau rhithwir, ond mae'n creu amgylchedd rhithwir gyda'i ofod proses a'i bentwr rhwydwaith ei hun.

Yn y bôn mae LXC yn creu cynwysyddion. Beth yw'r gwahaniaeth rhwng peiriannau rhithwir a chynwysyddion?

Beth yw Docker: taith fer i hanes a thyniadau sylfaenol

Nid yw'r cynhwysydd yn addas ar gyfer prosesau ynysu: canfyddir gwendidau mewn systemau rhithwiroli ar lefel y cnewyllyn sy'n caniatáu iddynt ddianc o'r cynhwysydd i'r gwesteiwr. Felly, os oes angen ynysu rhywbeth, mae'n well defnyddio peiriant rhithwir.

Gellir gweld y gwahaniaethau rhwng rhithwiroli a chynhwysiad yn y diagram.
Mae hypervisors caledwedd, hypervisors ar ben yr OS, a chynwysyddion.

Beth yw Docker: taith fer i hanes a thyniadau sylfaenol

Mae hypervisors caledwedd yn cŵl os ydych chi wir eisiau ynysu rhywbeth. Oherwydd ei bod yn bosibl ynysu ar lefel y tudalennau cof a phroseswyr.

Mae hypervisors fel rhaglen, ac mae cynwysyddion, a byddwn yn siarad amdanynt ymhellach. Nid oes gan systemau cynhwysydd hypervisor, ond mae Peiriant Cynhwysydd sy'n creu ac yn rheoli cynwysyddion. Mae'r peth hwn yn fwy ysgafn, felly oherwydd gweithio gyda'r craidd mae llai o orbenion neu ddim o gwbl.

Beth sy'n cael ei ddefnyddio ar gyfer cynhwysydd ar lefel y cnewyllyn

Y prif dechnolegau sy'n eich galluogi i greu cynhwysydd sydd wedi'i ynysu o brosesau eraill yw Gofodau Enw a Grwpiau Rheoli.

Mannau Enw: PID, Rhwydweithio, Mount a Defnyddiwr. Mae mwy, ond er mwyn hwyluso dealltwriaeth byddwn yn canolbwyntio ar y rhain.

Mae PID Namespace yn cyfyngu ar brosesau. Er enghraifft, pan fyddwn yn creu gofod Enw PID ac yn gosod proses yno, mae'n dod â PID 1. Fel arfer mewn systemau mae PID 1 yn cael ei systemdio neu ei mewnosod. Yn unol â hynny, pan fyddwn yn gosod proses mewn gofod enw newydd, mae hefyd yn derbyn PID 1.

Mae Rhwydweithio Namespace yn eich galluogi i gyfyngu/ynysu'r rhwydwaith a gosod eich rhyngwynebau eich hun y tu mewn. Mae Mount yn gyfyngiad system ffeiliau. Defnyddiwr - cyfyngiad ar ddefnyddwyr.

Grwpiau Rheoli: Cof, CPU, IOPS, Rhwydwaith - tua 12 lleoliad i gyd. Fel arall fe'u gelwir hefyd yn Cgroups (“C-groups”).

Mae Grwpiau Rheoli yn rheoli adnoddau ar gyfer cynhwysydd. Trwy Grwpiau Rheoli gallwn ddweud na ddylai'r cynhwysydd ddefnyddio mwy na swm penodol o adnoddau.

Er mwyn i gynhwyswyr weithio'n llawn, defnyddir technolegau ychwanegol: Galluoedd, Copi-ar-ysgrifennu ac eraill.

Galluoedd yw pan fyddwn yn dweud wrth broses beth y gall ac na all ei wneud. Ar lefel y cnewyllyn, dim ond mapiau didau yw'r rhain gyda llawer o baramedrau. Er enghraifft, mae gan y defnyddiwr gwraidd freintiau llawn a gall wneud popeth. Gall y gweinydd amser newid amser y system: mae ganddo alluoedd ar y Capsiwl Amser, a dyna ni. Gan ddefnyddio breintiau, gallwch chi ffurfweddu cyfyngiadau ar brosesau yn hyblyg, a thrwy hynny amddiffyn eich hun.

Mae'r system Copïo-ar-ysgrifennu yn ein galluogi i weithio gyda delweddau Docker a'u defnyddio'n fwy effeithlon.

Ar hyn o bryd mae gan Docker broblemau cydnawsedd â Cgroups v2, felly mae'r erthygl hon yn canolbwyntio'n benodol ar Cgroups v1.

Ond gadewch i ni fynd yn ôl at hanes.

Pan ymddangosodd systemau rhithwiroli ar lefel y cnewyllyn, dechreuwyd eu defnyddio'n weithredol. Diflannodd y gorbenion ar y hypervisor, ond erys rhai problemau:

  • delweddau mawr: maent yn gwthio system weithredu, llyfrgelloedd, criw o wahanol feddalwedd i'r un OpenVZ, ac yn y diwedd mae'r ddelwedd yn dal i fod yn eithaf mawr;
  • Nid oes safon arferol ar gyfer pecynnu a danfon, felly mae problem dibyniaethau yn parhau. Mae sefyllfaoedd pan fydd dau ddarn o god yn defnyddio'r un llyfrgell, ond gyda fersiynau gwahanol. Gall fod gwrthdaro rhyngddynt.

Er mwyn datrys yr holl broblemau hyn, mae'r oes nesaf wedi dod.

Cyfnod cynhwysydd

Pan gyrhaeddodd Oes y Cynwysyddion, newidiodd yr athroniaeth o weithio gyda nhw:

  • Un broses - un cynhwysydd.
  • Rydym yn darparu'r holl ddibyniaethau sydd eu hangen ar y broses i'w cynhwysydd. Mae hyn yn gofyn am dorri monolithau yn ficrowasanaethau.
  • Y lleiaf yw'r ddelwedd, y gorau - mae llai o wendidau posibl, mae'n cael ei gyflwyno'n gyflymach, ac ati.
  • Mae achosion yn dod yn fyrhoedlog.

Cofiwch beth ddywedais i am anifeiliaid anwes vs gwartheg? Yn flaenorol, roedd achosion fel anifeiliaid domestig, ond erbyn hyn maent wedi dod yn debyg i wartheg. Yn flaenorol, roedd monolith - un cais. Nawr mae'n 100 microwasanaeth, 100 o gynwysyddion. Efallai y bydd gan rai cynwysyddion 2-3 atgynhyrchiad. Mae'n dod yn llai pwysig i ni reoli pob cynhwysydd. Yr hyn sy'n bwysicach i ni yw argaeledd y gwasanaeth ei hun: yr hyn y mae'r set hon o gynwysyddion yn ei wneud. Mae hyn yn newid dulliau monitro.

Yn 2014-2015, ffynnodd Docker - y dechnoleg y byddwn yn siarad amdani nawr.

Newidiodd Docker yr athroniaeth a phecynnu cymwysiadau safonol. Gan ddefnyddio Docker, gallwn becynnu cais, ei anfon i ystorfa, ei lawrlwytho oddi yno, a'i ddefnyddio.

Rydyn ni'n rhoi popeth sydd ei angen arnom yn y cynhwysydd Docker, felly mae'r broblem dibyniaeth yn cael ei datrys. Mae Dociwr yn gwarantu atgynhyrchu. Rwy'n credu bod llawer o bobl wedi dod ar draws anatgynyrchioldeb: mae popeth yn gweithio i chi, rydych chi'n ei wthio i gynhyrchu, ac yno mae'n stopio gweithio. Gyda Docker mae'r broblem hon yn diflannu. Os bydd eich cynhwysydd Docker yn dechrau ac yn gwneud yr hyn y mae angen iddo ei wneud, yna gyda lefel uchel o debygolrwydd bydd yn dechrau cynhyrchu ac yn gwneud yr un peth yno.

Digression ynghylch gorbenion

Mae anghydfodau bob amser ynghylch gorbenion. Mae rhai pobl yn credu nad yw Docker yn cario unrhyw lwyth ychwanegol, gan ei fod yn defnyddio'r cnewyllyn Linux a'i holl brosesau sy'n angenrheidiol ar gyfer cynhwysyddion. Fel, “os dywedwch fod Docker uwchben, yna mae cnewyllyn Linux uwchben.”

Ar y llaw arall, os ewch yn ddyfnach, yn wir mae sawl peth yn Docker y gellir dweud, gydag ymestyniad, eu bod uwchben.

Y cyntaf yw gofod enw PID. Pan fyddwn yn gosod proses mewn gofod enw, caiff PID 1 ei neilltuo iddo. Ar yr un pryd, mae gan y broses hon PID arall, sydd wedi'i leoli ar ofod enw'r gwesteiwr, y tu allan i'r cynhwysydd. Er enghraifft, fe wnaethom lansio Nginx mewn cynhwysydd, daeth yn PID 1 (prif broses). Ac ar y gwesteiwr mae ganddo PID 12623. Ac mae'n anodd dweud faint o orbenion ydyw.

Yr ail beth yw Cgroups. Gadewch i ni gymryd Cgroups ar y cof, hynny yw, y gallu i gyfyngu ar gof cynhwysydd. Pan fydd wedi'i alluogi, mae cownteri a chyfrifo cof yn cael eu gweithredu: mae angen i'r cnewyllyn ddeall faint o dudalennau sydd wedi'u dyrannu a faint sy'n dal i fod am ddim ar gyfer y cynhwysydd hwn. Mae'n bosibl mai gorbenion yw hwn, ond nid wyf wedi gweld unrhyw astudiaethau manwl gywir ar sut mae'n effeithio ar berfformiad. Ac ni wnes i fy hun sylwi bod y cais a oedd yn rhedeg yn Docker yn sydyn wedi profi colled sydyn mewn perfformiad.

Ac un nodyn arall am berfformiad. Mae rhai paramedrau cnewyllyn yn cael eu trosglwyddo o'r gwesteiwr i'r cynhwysydd. Yn benodol, mae rhai paramedrau rhwydwaith. Felly, os ydych chi am redeg rhywbeth perfformiad uchel yn Docker, er enghraifft, rhywbeth a fydd yn defnyddio'r rhwydwaith yn weithredol, yna mae angen i chi o leiaf addasu'r paramedrau hyn. Rhai nf_conntrack, er enghraifft.

Am y cysyniad Docker

Mae Docker yn cynnwys sawl cydran:

  1. Yr un Injan Cynhwysydd yw'r Daemon Dociwr; yn lansio cynwysyddion.
  2. Cyfleustodau rheoli Docker yw Docker CII.
  3. Dockerfile - cyfarwyddiadau ar sut i adeiladu delwedd.
  4. Delwedd - y ddelwedd y mae'r cynhwysydd yn cael ei gyflwyno ohoni.
  5. Cynhwysydd.
  6. Mae cofrestrfa Docker yn ystorfa ddelweddau.

Yn sgematig mae'n edrych yn rhywbeth fel hyn:

Beth yw Docker: taith fer i hanes a thyniadau sylfaenol

Mae daemon Dociwr yn rhedeg ar Docker_host ac yn lansio cynwysyddion. Mae Cleient sy'n anfon gorchmynion: adeiladu'r ddelwedd, lawrlwytho'r ddelwedd, lansio'r cynhwysydd. Mae daemon docwr yn mynd i'r gofrestrfa ac yn eu gweithredu. Gall y cleient Docker gael mynediad yn lleol (i soced Unix) a thrwy TCP o westeiwr anghysbell.

Gadewch i ni fynd trwy bob cydran.

Daemon docwr - dyma ran y gweinydd, mae'n gweithio ar y peiriant gwesteiwr: mae'n lawrlwytho delweddau ac yn lansio cynwysyddion oddi wrthynt, yn creu rhwydwaith rhwng cynwysyddion, yn casglu logiau. Pan rydyn ni'n dweud “creu delwedd,” mae'r cythraul yn gwneud hynny hefyd.

CLI Dociwr - Rhan cleient Docker, cyfleustodau consol ar gyfer gweithio gyda'r ellyll. Rwy'n ailadrodd, gall weithio nid yn unig yn lleol, ond hefyd dros y rhwydwaith.

Gorchmynion sylfaenol:

docker ps - dangos cynwysyddion sy'n rhedeg ar hyn o bryd ar y gwesteiwr Docker.
delweddau docwyr - dangos delweddau wedi'u llwytho i lawr yn lleol.
chwiliad docwr <> - chwiliwch am ddelwedd yn y gofrestrfa.
tynnu docwr <> - lawrlwythwch ddelwedd o'r gofrestrfa i'r peiriant.
adeiladu docwr < > - casglwch y ddelwedd.
rhediad docwr <> - lansiwch y cynhwysydd.
docker rm <> - tynnwch y cynhwysydd.
logiau docwyr <> - logiau cynhwysydd
docwr cychwyn/stop/ailgychwyn <> - gweithio gyda'r cynhwysydd

Os ydych chi'n meistroli'r gorchmynion hyn ac yn hyderus wrth eu defnyddio, ystyriwch eich hun 70% yn hyfedr yn Docker ar lefel y defnyddiwr.

Dockerfile - cyfarwyddiadau ar gyfer creu delwedd. Mae bron pob gorchymyn cyfarwyddyd yn haen newydd. Gadewch i ni edrych ar enghraifft.

Beth yw Docker: taith fer i hanes a thyniadau sylfaenol

Dyma sut olwg sydd ar y Dockerfile: gorchmynion ar y chwith, dadleuon ar y dde. Mae pob gorchymyn sydd yma (ac a ysgrifennwyd yn gyffredinol yn y Dockerfile) yn creu haen newydd yn Delwedd.

Hyd yn oed wrth edrych ar yr ochr chwith, gallwch chi ddeall yn fras beth sy'n digwydd. Rydyn ni'n dweud: “creu ffolder i ni” - un haen yw hwn. Mae “Gwneud i'r ffolder weithio” yn haen arall, ac ati. Mae cacen haen yn gwneud bywyd yn haws. Os byddaf yn creu Dockerfile arall ac yn newid rhywbeth yn y llinell olaf - rwy'n rhedeg rhywbeth heblaw "python" "main.py", neu osod dibyniaethau o ffeil arall - yna bydd yr haenau blaenorol yn cael eu hailddefnyddio fel storfa.

delwedd - pecynnu cynhwysydd yw hwn; mae cynwysyddion yn cael eu lansio o'r ddelwedd. Os edrychwn ar Docker o safbwynt rheolwr pecyn (fel pe baem yn gweithio gyda phecynnau deb neu rpm), yna pecyn rpm yw delwedd yn ei hanfod. Trwy yum install gallwn osod y cymhwysiad, ei ddileu, dod o hyd iddo yn y gadwrfa, a'i lawrlwytho. Mae tua'r un peth yma: mae cynwysyddion yn cael eu lansio o'r ddelwedd, maen nhw'n cael eu storio yn y gofrestrfa Docker (yn debyg i yum, mewn ystorfa), ac mae gan bob delwedd hash SHA-256, enw a thag.

Mae'r ddelwedd wedi'i hadeiladu yn unol â chyfarwyddiadau'r Dockerfile. Mae pob cyfarwyddyd o'r Dockerfile yn creu haen newydd. Gellir ailddefnyddio haenau.

Cofrestrfa docwyr yn ystorfa ddelweddau Docker. Yn debyg i'r OS, mae gan Docker gofrestrfa safonol gyhoeddus - dockerhub. Ond gallwch chi adeiladu eich ystorfa eich hun, eich cofrestrfa Docker eich hun.

Cynhwysydd - yr hyn sy'n cael ei lansio o'r ddelwedd. Fe wnaethon ni adeiladu delwedd yn unol â chyfarwyddiadau'r Dockerfile, yna rydyn ni'n ei lansio o'r ddelwedd hon. Mae'r cynhwysydd hwn wedi'i ynysu oddi wrth gynwysyddion eraill a rhaid iddo gynnwys popeth sy'n angenrheidiol i'r cais weithredu. Yn yr achos hwn, un cynhwysydd - un broses. Mae'n digwydd bod yn rhaid i chi wneud dwy broses, ond mae hyn braidd yn groes i ideoleg Docker.

Mae'r gofyniad "un cynhwysydd, un broses" yn gysylltiedig â'r Gofod Enw PID. Pan fydd proses gyda PID 1 yn cychwyn yn Namespace, os bydd yn marw'n sydyn, yna mae'r cynhwysydd cyfan yn marw hefyd. Os yw dwy broses yn rhedeg yno: mae un yn fyw a'r llall wedi marw, yna bydd y cynhwysydd yn dal i fyw. Ond mae hwn yn gwestiwn o Arferion Gorau, byddwn yn siarad amdanynt mewn deunyddiau eraill.

I astudio nodweddion a rhaglen lawn y cwrs yn fwy manwl, dilynwch y ddolen: “Cwrs fideo Docker'.

Awdur: Marcel Ibraev, gweinyddwr ardystiedig Kubernetes, peiriannydd gweithredol yn Southbridge, siaradwr a datblygwr cyrsiau Slurm.

Ffynhonnell: hab.com

Ychwanegu sylw