Unsa ang Docker: usa ka mubo nga kasaysayan ug sukaranan nga abstraction

Nagsugod niadtong Agosto 10 sa Slurm Docker nga kurso sa video, diin ato kining analisahon sa hingpit - gikan sa mga batakang abstraction ngadto sa mga parameter sa network.

Niini nga artikulo maghisgot kita bahin sa kasaysayan sa Docker ug ang mga nag-unang abstraction niini: Image, Cli, Dockerfile. Ang lektyur gituyo alang sa mga nagsugod, mao nga dili kini mahimo nga interes sa mga eksperyensiyado nga tiggamit. Walay dugo, apendiks o lawom nga pagpaunlod. Ang labing sukaranan.

Unsa ang Docker: usa ka mubo nga kasaysayan ug sukaranan nga abstraction

Unsa ang Docker

Atong tan-awon ang kahulugan sa Docker gikan sa Wikipedia.

Ang Docker usa ka software alang sa pag-automate sa pag-deploy ug pagdumala sa mga aplikasyon sa mga containerized nga palibot.

Walay klaro gikan niini nga kahulugan. Dili klaro kung unsa ang gipasabut sa "sa mga palibot nga nagsuporta sa containerization". Aron mahibal-an, mobalik kita sa panahon. Magsugod ta sa panahon nga naandan nakong gitawag nga β€œMonolithic Era.”

Monolithic nga panahon

Ang monolithic nga panahon mao ang sayong bahin sa 2000s, kung ang tanan nga mga aplikasyon monolitik, nga adunay daghang mga dependency. Nagdugay ang pag-uswag. Sa parehas nga oras, wala’y daghang mga server; nahibal-an namon silang tanan sa ngalan ug gibantayan sila. Adunay usa ka kataw-anan nga pagtandi:

Ang mga binuhi maoy binuhing hayop. Sa monolitikong panahon, gitratar namo ang among mga server sama sa mga binuhi, giayo ug gimahal, naghuyop sa mga tipik sa abog. Ug alang sa mas maayo nga pagdumala sa kahinguhaan, migamit kami og virtualization: mikuha kami og server ug giputol kini sa daghang mga virtual machine, sa ingon nagsiguro sa pagkahimulag sa palibot.

Mga sistema sa virtualization nga nakabase sa hypervisor

Ang tanan tingali nakadungog bahin sa mga sistema sa virtualization: VMware, VirtualBox, Hyper-V, Qemu KVM, ug uban pa. Naghatag sila og pag-inusara sa aplikasyon ug pagdumala sa kapanguhaan, apan aduna usab silay mga disbentaha. Aron mahimo ang virtualization, kinahanglan nimo ang usa ka hypervisor. Ug ang hypervisor kay resource overhead. Ug ang virtual machine mismo kasagaran usa ka tibuuk nga colossus - usa ka bug-at nga imahe nga adunay usa ka operating system, Nginx, Apache, ug posible nga MySQL. Ang imahe dako ug ang virtual nga makina dili kombenyente sa pag-operate. Ingon usa ka sangputanan, ang pagtrabaho sa mga virtual nga makina mahimong hinay. Aron masulbad kini nga problema, ang mga sistema sa virtualization gihimo sa lebel sa kernel.

Mga sistema sa virtualization nga lebel sa kernel

Ang kernel-level virtualization gisuportahan sa OpenVZ, Systemd-nspawn, LXC nga mga sistema. Usa ka talagsaong pananglitan sa maong virtualization mao ang LXC (Linux Containers).

Ang LXC usa ka operating system-level virtualization system alang sa pagpadagan sa daghang mga hilit nga mga higayon sa Linux operating system sa usa ka node. Ang LXC wala mogamit og mga virtual machine, apan nagmugna og usa ka virtual nga palibot nga adunay kaugalingong proseso nga luna ug network stack.

Sa tinuud ang LXC nagmugna og mga sudlanan. Unsa ang kalainan tali sa mga virtual nga makina ug mga sudlanan?

Unsa ang Docker: usa ka mubo nga kasaysayan ug sukaranan nga abstraction

Ang sudlanan dili angay alang sa pag-inusara sa mga proseso: ang mga kahuyangan makita sa mga sistema sa virtualization sa lebel sa kernel nga nagtugot kanila sa pag-ikyas gikan sa sudlanan ngadto sa host. Busa, kung kinahanglan nimo nga ihimulag ang usa ka butang, mas maayo nga mogamit usa ka virtual machine.

Ang mga kalainan tali sa virtualization ug containerization makita sa diagram.
Adunay mga hardware hypervisors, hypervisors sa ibabaw sa OS, ug mga sudlanan.

Unsa ang Docker: usa ka mubo nga kasaysayan ug sukaranan nga abstraction

Ang mga hypervisor sa hardware cool kung gusto nimo nga ihimulag ang usa ka butang. Tungod kay posible nga ihimulag sa lebel sa mga panid sa panumduman ug mga processor.

Adunay mga hypervisors isip usa ka programa, ug adunay mga sudlanan, ug kita maghisgot mahitungod kanila sa dugang. Ang mga sistema sa containerization walay hypervisor, apan adunay usa ka Container Engine nga nagmugna ug nagdumala sa mga sudlanan. Kini nga butang mas gaan, busa tungod sa pagtrabaho sa kinauyokan adunay gamay nga overhead o wala gyud.

Unsa ang gigamit alang sa containerization sa lebel sa kernel

Ang nag-unang mga teknolohiya nga nagtugot kanimo sa paghimo og usa ka sudlanan nga nahimulag sa ubang mga proseso mao ang Namespaces ug Control Groups.

Mga namespace: PID, Networking, Mount ug User. Adunay daghan pa, apan alang sa kasayon ​​​​sa pagsabut atong ipunting kini.

Ang PID Namespace naglimite sa mga proseso. Kung, pananglitan, maghimo kami usa ka PID Namespace ug ibutang ang usa ka proseso didto, mahimo kini nga adunay PID 1. Kasagaran sa mga sistema ang PID 1 mao ang systemd o init. Tungod niini, kung magbutang kami usa ka proseso sa usa ka bag-ong namespace, makadawat usab kini PID 1.

Ang Networking Namespace nagtugot kanimo nga limitahan/ilain ang network ug ibutang ang imong kaugalingon nga mga interface sa sulod. Ang Mount usa ka limitasyon sa sistema sa file. Gumagamitβ€”pagpugong sa mga tiggamit.

Mga Grupo sa Pagkontrol: Memorya, CPU, IOPS, Network - mga 12 ka mga setting sa kinatibuk-an. Kung dili sila gitawag usab nga Cgroups (β€œC-groups”).

Ang Control Groups nagdumala sa mga kapanguhaan alang sa usa ka sudlanan. Pinaagi sa Mga Grupo sa Pagkontrol makaingon kita nga ang sudlanan kinahanglan dili mogamit labaw pa sa usa ka piho nga kantidad sa mga kahinguhaan.

Aron hingpit nga molihok ang containerization, gigamit ang dugang nga mga teknolohiya: Mga Kapabilidad, Copy-on-write ug uban pa.

Ang mga kapabilidad mao ang kung atong isulti ang usa ka proseso kung unsa ang mahimo ug dili mahimo. Sa lebel sa kernel, kini mga bitmap lang nga adunay daghang mga parameter. Pananglitan, ang gamut nga tiggamit adunay bug-os nga mga pribilehiyo ug mahimo ang tanan. Ang server sa oras makausab sa oras sa sistema: kini adunay mga kapabilidad sa Time Capsule, ug mao kana. Gamit ang mga pribilehiyo, mahimo nimo nga dali nga ma-configure ang mga pagdili alang sa mga proseso, ug sa ingon mapanalipdan ang imong kaugalingon.

Ang sistema sa Copy-on-write nagtugot kanamo sa pagtrabaho sa mga imahe sa Docker ug gamiton kini nga mas episyente.

Ang Docker sa pagkakaron adunay mga isyu sa pagpahiangay sa Cgroups v2, mao nga kini nga artikulo partikular nga naka-focus sa Cgroups v1.

Apan mobalik kita sa kasaysayan.

Kung ang mga sistema sa virtualization nagpakita sa lebel sa kernel, nagsugod sila nga aktibo nga gigamit. Ang overhead sa hypervisor nawala, apan pipila ka mga problema nagpabilin:

  • dagkong mga hulagway: ilang giduso ang usa ka operating system, mga librarya, usa ka hugpong sa lainlaing software ngadto sa samang OpenVZ, ug sa katapusan ang imahe nahimo gihapon nga dako;
  • Walay normal nga sumbanan alang sa pagputos ug paghatud, mao nga ang problema sa mga dependency nagpabilin. Adunay mga sitwasyon kung ang duha ka piraso sa code naggamit sa parehas nga librarya, apan adunay lainlaing mga bersyon. Mahimong adunay panagsumpaki tali kanila.

Aron masulbad kining tanan nga mga problema, ang sunod nga panahon miabot na.

Panahon sa sudlanan

Sa pag-abot sa Era of Containers, ang pilosopiya sa pagtrabaho uban kanila nausab:

  • Usa ka proseso - usa ka sudlanan.
  • Gihatud namo ang tanang dependency nga gikinahanglan sa proseso ngadto sa sudlanan niini. Nagkinahanglan kini og pagputol sa mga monolith ngadto sa mga microservice.
  • Ang mas gamay nga imahe, mas maayo - adunay gamay nga posible nga mga kahuyangan, kini mas paspas nga mogawas, ug uban pa.
  • Ang mga higayon nahimong ephemeral.

Hinumdomi ang akong gisulti bahin sa mga binuhi batok sa baka? Kaniadto, ang mga higayon sama sa binuhing mga hayop, apan karon nahimo na silang sama sa mga baka. Kaniadto, adunay usa ka monolith - usa ka aplikasyon. Karon kini 100 ka microservices, 100 ka sudlanan. Ang ubang mga sudlanan mahimong adunay 2-3 nga mga kopya. Kini nahimong dili kaayo importante alang kanato sa pagkontrolar sa matag sudlanan. Ang mas hinungdanon kanamo mao ang pagkaanaa sa serbisyo mismo: kung unsa kini nga hugpong sa mga sudlanan. Kini nagbag-o sa mga pamaagi sa pagmonitor.

Sa 2014-2015, ang Docker milambo - ang teknolohiya nga atong hisgutan karon.

Gibag-o ni Docker ang pilosopiya ug standardized application packaging. Gamit ang Docker, mahimo namong i-package ang usa ka aplikasyon, ipadala kini sa usa ka repositoryo, i-download kini gikan didto, ug i-deploy kini.

Gibutang namon ang tanan nga among kinahanglan sa sulud sa Docker, aron masulbad ang problema sa pagsalig. Gigarantiyahan sa Docker ang pag-reproducibility. Sa akong hunahuna daghang mga tawo ang nakatagbo nga dili mabag-o: ang tanan molihok alang kanimo, imong giduso kini sa produksiyon, ug didto kini mihunong sa pagtrabaho. Uban sa Docker kini nga problema mawala. Kung ang imong sudlanan sa Docker magsugod ug buhaton kung unsa ang kinahanglan nga buhaton, unya adunay taas nga lebel sa posibilidad nga magsugod kini sa produksiyon ug buhaton ang parehas didto.

Digression mahitungod sa overhead

Kanunay adunay mga panaglalis bahin sa mga overhead. Ang ubang mga tawo nagtuo nga ang Docker wala magdala og dugang nga load, tungod kay kini naggamit sa Linux kernel ug sa tanan nga mga proseso nga gikinahanglan alang sa containerization. Sama sa, "kung giingon nimo nga ang Docker naa sa ibabaw, nan ang Linux kernel anaa sa ibabaw."

Sa laing bahin, kung mas lawom ka, adunay daghang mga butang sa Docker nga, nga adunay usa ka pag-inat, mahimong maingon nga naa sa ibabaw.

Ang una mao ang PID namespace. Kung ibutang namon ang usa ka proseso sa usa ka namespace, kini gi-assign nga PID 1. Sa samang higayon, kini nga proseso adunay lain nga PID, nga nahimutang sa host namespace, sa gawas sa sudlanan. Pananglitan, gilusad namo ang Nginx sa usa ka sudlanan, nahimo kining PID 1 (master process). Ug sa host kini adunay PID 12623. Ug lisud isulti kung pila ang overhead niini.

Ang ikaduha nga butang mao ang Cgroups. Atong kuhaon ang Cgroups pinaagi sa memorya, nga mao, ang abilidad sa paglimite sa memorya sa usa ka sudlanan. Kung kini ma-enable, ang mga counter ug memory accounting gi-aktibo: ang kernel kinahanglan nga masabtan kung pila ang mga panid nga gigahin ug pila ang libre alang niini nga sudlanan. Kini lagmit usa ka overhead, apan wala ako nakakita sa bisan unsang tukma nga pagtuon kung giunsa kini makaapekto sa pasundayag. Ug ako mismo wala makamatikod nga ang aplikasyon nga nagdagan sa Docker kalit nga nakasinati usa ka mahait nga pagkawala sa pasundayag.

Ug usa pa ka nota bahin sa pasundayag. Ang ubang mga parameter sa kernel gipasa gikan sa host ngadto sa sudlanan. Sa partikular, pipila ka mga parameter sa network. Busa, kung gusto nimo nga magpadagan sa usa ka butang nga adunay taas nga pasundayag sa Docker, pananglitan usa ka butang nga aktibo nga mogamit sa network, nan kinahanglan nimo nga ayohon kini nga mga parameter. Ang pipila ka nf_conntrack, pananglitan.

Mahitungod sa konsepto sa Docker

Ang Docker naglangkob sa daghang mga sangkap:

  1. Ang Docker Daemon parehas nga Container Engine; naglunsad og mga sudlanan.
  2. Ang Docker CII usa ka utility sa pagdumala sa Docker.
  3. Dockerfile - mga panudlo kung giunsa paghimo ang usa ka imahe.
  4. Imahe β€” ang hulagway diin ang sudlanan giligid.
  5. Kontainer.
  6. Ang rehistro sa Docker usa ka repositoryo sa imahe.

Sa eskematiko kini tan-awon sama niini:

Unsa ang Docker: usa ka mubo nga kasaysayan ug sukaranan nga abstraction

Ang Docker daemon nagdagan sa Docker_host ug naglansad sa mga sudlanan. Adunay usa ka Kliyente nga nagpadala mga mando: paghimo sa imahe, pag-download sa imahe, paglansad sa sudlanan. Ang Docker daemon moadto sa rehistro ug ipatuman kini. Ang kliyente sa Docker mahimong maka-access sa lokal (sa usa ka socket sa Unix) ug pinaagi sa TCP gikan sa usa ka hilit nga host.

Atong susihon ang matag sangkap.

Docker nga daemon - kini ang bahin sa server, kini nagtrabaho sa host machine: nag-download sa mga imahe ug naglansad sa mga sulud gikan kanila, nagmugna usa ka network tali sa mga sulud, nagkolekta mga troso. Sa diha nga kita moingon "paghimo og usa ka larawan," ang demonyo nagbuhat usab niana.

Docker CLI - Bahin sa kliyente sa Docker, gamit sa console alang sa pagtrabaho kauban ang daemon. Akong sublion, mahimo kini dili lamang sa lokal, apan usab sa network.

Panguna nga mga sugo:

docker ps - ipakita ang mga sudlanan nga nagdagan karon sa host sa Docker.
mga imahe sa docker - ipakita ang mga imahe nga gi-download sa lokal.
pagpangita sa docker <> - pangitaa ang usa ka imahe sa rehistro.
docker pull <> - pag-download sa usa ka imahe gikan sa registry ngadto sa makina.
pagtukod sa docker < > - pagkolekta sa imahe.
docker run <> - ilunsad ang sudlanan.
docker rm <> - kuhaa ang sudlanan.
docker logs <> - container logs
docker start/stop/restart <> - nagtrabaho uban sa sudlanan

Kung master nimo kini nga mga mando ug masaligon sa paggamit niini, hunahunaa ang imong kaugalingon nga 70% nga hanas sa Docker sa lebel sa tiggamit.

Dockerfile - mga panudlo alang sa paghimo og usa ka imahe. Hapit matag instruksiyon nga sugo usa ka bag-ong layer. Atong tan-awon ang usa ka pananglitan.

Unsa ang Docker: usa ka mubo nga kasaysayan ug sukaranan nga abstraction

Mao kini ang hitsura sa Dockerfile: mga sugo sa wala, mga argumento sa tuo. Ang matag sugo nga ania dinhi (ug kasagaran gisulat sa Dockerfile) nagmugna og bag-ong layer sa Image.

Bisan sa pagtan-aw sa wala nga bahin, mahimo nimong masabtan kung unsa ang nahitabo. Nag-ingon kami: "paghimo usa ka folder alang kanamo" - kini usa ka layer. "Himoa ang folder nga nagtrabaho" mao ang lain nga layer, ug uban pa. Ang layer nga cake naghimo sa kinabuhi nga mas sayon. Kung maghimo ko og lain nga Dockerfile ug usbon ang usa ka butang sa katapusang linya - nagpadagan ko og usa ka butang gawas sa "python" "main.py", o mag-install og mga dependency gikan sa laing file - unya ang mga naunang layer magamit pag-usab isip cache.

Image - kini ang container packaging; ang mga sudlanan gilunsad gikan sa imahe. Kung atong tan-awon ang Docker gikan sa punto sa panglantaw sa usa ka manedyer sa pakete (ingon nga nagtrabaho kita sa mga deb o rpm nga mga pakete), nan ang imahe usa ka rpm nga pakete. Pinaagi sa pag-install sa yum mahimo naton i-install ang aplikasyon, tangtangon kini, pangitaa kini sa repositoryo, ug i-download kini. Parehas kini dinhi: ang mga sudlanan gilansad gikan sa imahe, gitipigan sila sa rehistro sa Docker (susama sa yum, sa usa ka repository), ug ang matag imahe adunay SHA-256 hash, usa ka ngalan ug usa ka tag.

Ang imahe gitukod sumala sa mga panudlo gikan sa Dockerfile. Ang matag instruksyon gikan sa Dockerfile nagmugna og bag-ong layer. Ang mga lut-od mahimong magamit pag-usab.

Rehistro sa Docker mao ang usa ka Docker image repository. Sama sa OS, ang Docker adunay usa ka publiko nga standard registry - dockerhub. Apan mahimo nimong tukuron ang imong kaugalingon nga repository, imong kaugalingon nga rehistro sa Docker.

Kontainer - unsa ang gilusad gikan sa imahe. Nagtukod kami og usa ka imahe sumala sa mga instruksyon gikan sa Dockerfile, unya gilunsad namo kini gikan niini nga hulagway. Kini nga sudlanan nahimulag gikan sa ubang mga sudlanan ug kinahanglan nga adunay tanan nga gikinahanglan aron magamit ang aplikasyon. Sa kini nga kaso, usa ka sudlanan - usa ka proseso. Nahitabo nga kinahanglan nimo nga buhaton ang duha nga mga proseso, apan kini medyo sukwahi sa ideolohiya sa Docker.

Ang kinahanglanon nga "usa ka sudlanan, usa ka proseso" adunay kalabotan sa PID Namespace. Kung ang usa ka proseso nga adunay PID 1 magsugod sa Namespace, kung kini kalit nga mamatay, nan ang tibuuk nga sudlanan mamatay usab. Kung adunay duha ka proseso nga nagdagan didto: ang usa buhi ug ang usa patay, nan ang sudlanan magpadayon nga mabuhi. Apan kini usa ka pangutana sa Labing Maayo nga Mga Praktis, hisgutan naton kini sa ubang mga materyal.

Aron matun-an ang mga bahin ug bug-os nga programa sa kurso nga mas detalyado, palihug sunda ang link: "Docker nga kurso sa video".

Awtor: Marcel Ibraev, certified Kubernetes administrator, practicing engineer sa Southbridge, speaker ug developer sa mga kurso sa Slurm.

Source: www.habr.com

Idugang sa usa ka comment