Docker supratimas

Jau keletą mėnesių naudoju „Docker“, kad susisteminčiau žiniatinklio projektų kūrimo / pristatymo procesą. Siūlau Habrakhabr skaitytojams įvadinio straipsnio apie dokerį vertimą - „Suprasti dokerį“.

Kas yra dokeris?

„Docker“ yra atvira platforma programoms kurti, pristatyti ir valdyti. Docker sukurtas taip, kad jūsų programas pristatytų greičiau. Naudodami docker galite atsieti programą nuo infrastruktūros ir laikyti infrastruktūrą valdoma programa. „Docker“ padeda greičiau išsiųsti kodą, greičiau išbandyti, greičiau išsiųsti programas ir sutrumpinti laiką nuo kodo rašymo iki kodo paleidimo. „Docker“ tai atlieka naudodama lengvą konteinerio virtualizacijos platformą, naudodama procesus ir priemones, kurios padeda valdyti ir pateikti programas.

„Docker“ esmė leidžia paleisti beveik bet kokią programą, saugiai atskirtą konteineryje. Saugi izoliacija leidžia vienu metu paleisti daug konteinerių tame pačiame pagrindiniame kompiuteryje. Dėl lengvo konteinerio, kuris veikia be papildomos hipervizoriaus naštos, galite išnaudoti daugiau aparatinės įrangos.

Konteinerio virtualizavimo platforma ir įrankiai gali būti naudingi šiais atvejais:

  • supakuokite savo programą (ir naudojamus komponentus) į doko konteinerius;
  • šių konteinerių paskirstymas ir pristatymas jūsų komandoms tobulinti ir išbandyti;
  • išdėliodami šiuos konteinerius savo gamybos vietose tiek duomenų centruose, tiek debesyse.

Kam galiu naudoti docker?

Greitai paskelbkite savo programas

„Docker“ puikiai tinka kūrimo ciklui organizuoti. „Docker“ leidžia kūrėjams paleisti vietinius konteinerius su programomis ir paslaugomis. Tai vėliau leidžia integruotis į nuolatinio integravimo ir diegimo darbo eigą.

Pavyzdžiui, jūsų kūrėjai rašo kodą vietoje ir dalijasi savo kūrimo paketu (Docker vaizdų rinkiniu) su kolegomis. Kai jie yra pasirengę, jie nusiunčia kodą ir konteinerius į bandymo vietą ir atlieka visus būtinus bandymus. Iš bandymo vietos jie gali siųsti kodą ir vaizdus į gamybą.

Lengvesnis išdėstymas ir išskleidimas

Docker konteinerių platforma leidžia lengvai perkelti naudingąjį krovinį. „Docker“ konteineriai gali veikti jūsų vietiniame kompiuteryje – realiame arba virtualioje mašinoje duomenų centre arba debesyje.

Perkeliamumas ir lengvas dokerio pobūdis leidžia lengvai dinamiškai valdyti darbo krūvį. Galite naudoti docker programai ar paslaugoms įdiegti arba išjungti. Dokerio greitis leidžia tai padaryti beveik realiuoju laiku.

Didesnės apkrovos ir daugiau naudingų krovinių

Docker yra lengvas ir greitas. Tai yra elastinga, ekonomiška alternatyva virtualioms mašinoms, pagrįstoms hipervizoriumi. Tai ypač naudinga didelės apkrovos aplinkoje, pavyzdžiui, kuriant savo debesį arba platformą kaip paslaugą. Tačiau jis taip pat naudingas mažoms ir vidutinėms programoms, kai norite gauti daugiau naudos iš turimų išteklių.

Pagrindiniai Docker komponentai

Docker susideda iš dviejų pagrindinių komponentų:

  • Docker: atvirojo kodo virtualizacijos platforma;
  • „Docker Hub“: mūsų platforma kaip paslauga, skirta „Docker“ konteineriams platinti ir valdyti.

Pastaba! „Docker“ platinamas pagal „Apache 2.0“ licenciją.

Docker architektūra

„Docker“ naudoja kliento-serverio architektūrą. „Docker“ klientas bendrauja su „Docker“ demonu, kuris prisiima jūsų konteinerių kūrimo, vykdymo ir platinimo naštą. Tiek klientas, tiek serveris gali veikti toje pačioje sistemoje, galite prijungti klientą prie nuotolinio dokerio demono. Klientas ir serveris bendrauja per lizdą arba RESTful API.

Docker supratimas

Docker demonas

Kaip parodyta diagramoje, demonas veikia pagrindiniame kompiuteryje. Vartotojas nebendrauja su serveriu tiesiogiai, o tam naudoja klientą.

Docker klientas

Docker klientas, docker programa, yra pagrindinė Docker sąsaja. Jis gauna komandas iš vartotojo ir sąveikauja su dokerio demonu.

Vidinis dokas

Norėdami suprasti, iš ko susideda dokeris, turite žinoti apie tris komponentus:

  • vaizdai
  • registras
  • Konteineriai

Vaizdai

„Docker“ vaizdas yra tik skaitomas šablonas. Pavyzdžiui, vaizde gali būti Ubuntu operacinė sistema su Apache ir joje esanti programa. Vaizdai naudojami konteineriams kurti. „Docker“ leidžia lengvai kurti naujus vaizdus, ​​atnaujinti esamus arba atsisiųsti kitų žmonių sukurtus vaizdus. Vaizdai yra docker versijos komponentai.

Registruotis

„Docker“ registre saugomi vaizdai. Yra viešųjų ir privačių registrų, iš kurių galite atsisiųsti arba įkelti vaizdus. Viešas Docker registras yra „Docker Hub“. Ten saugoma didžiulė vaizdų kolekcija. Kaip žinote, vaizdus galite sukurti patys arba galite naudoti kitų sukurtus vaizdus. Registrai yra platinimo komponentas.

Konteineriai

Konteineriai yra panašūs į katalogus. Konteineriuose yra viskas, ko reikia programai paleisti. Kiekvienas konteineris yra sukurtas iš vaizdo. Sudėtinius rodinius galima sukurti, paleisti, sustabdyti, perkelti arba ištrinti. Kiekvienas konteineris yra izoliuotas ir suteikia saugią platformą programai. Konteineriai yra darbo komponentai.

Taigi, kaip veikia „Docker“?

Kol kas žinome, kad:

  • galime sukurti vaizdus, ​​kuriuose yra mūsų programos;
  • galime sukurti konteinerius iš vaizdų, kad paleistų programas;
  • Galime platinti vaizdus per Docker Hub arba kitą vaizdų registrą.

Pažiūrėkime, kaip šie komponentai dera tarpusavyje.

Kaip veikia vaizdas?

Jau žinome, kad vaizdas yra tik skaitomas šablonas, iš kurio sukuriamas konteineris. Kiekvienas vaizdas susideda iš lygių rinkinio. Docker naudoja sąjungos failų sistema sujungti šiuos lygius į vieną vaizdą. Sąjungos failų sistema leidžia failams ir katalogams iš skirtingų failų sistemų (skirtingų šakų) skaidriai persidengti, sukuriant nuoseklią failų sistemą.

Viena iš priežasčių, kodėl docker yra lengvas, yra tai, kad jame naudojami tokie sluoksniai. Kai pakeičiate vaizdą, pvz., atnaujinate programą, sukuriamas naujas sluoksnis. Taigi, nepakeičiant viso vaizdo ar jo neperstatant, kaip gali tekti daryti su virtualia mašina, pridedamas arba atnaujinamas tik sluoksnis. Ir nereikia platinti viso naujo vaizdo, platinamas tik atnaujinimas, todėl paveikslėlių platinimas tampa lengvesnis ir greitesnis.

Kiekvieno vaizdo pagrindas yra pagrindinis vaizdas. Pavyzdžiui, ubuntu, pagrindinis Ubuntu vaizdas, arba fedora, pagrindinis Fedora platinimo vaizdas. Taip pat galite naudoti vaizdus kaip naujų vaizdų kūrimo pagrindą. Pavyzdžiui, jei turite apache vaizdą, galite naudoti jį kaip pagrindinį savo žiniatinklio programų vaizdą.

Pastaba! „Docker“ paprastai ištraukia vaizdus iš „Docker Hub“ registro.

„Docker“ vaizdus galima sukurti iš šių bazinių vaizdų; šių vaizdų kūrimo veiksmus vadiname instrukcijomis. Kiekviena instrukcija sukuria naują vaizdą arba lygį. Instrukcijos bus tokios:

  • paleisti komandą
  • pridėti failą ar katalogą
  • sukurti aplinkos kintamąjį
  • instrukcijos, ką paleisti, kai paleidžiamas šio vaizdo sudėtinis rodinys

Šios instrukcijos yra saugomos faile Dockerfile. Dockeris tai skaito Dockerfile, kai kuriate vaizdą, vykdo šias instrukcijas ir grąžina galutinį vaizdą.

Kaip veikia Docker registras?

Registras yra „Docker“ vaizdų saugykla. Sukūrę vaizdą galite paskelbti jį viešajame Docker Hub registre arba savo asmeniniame registre.

Naudodami „Docker“ klientą galite ieškoti jau paskelbtų vaizdų ir atsisiųsti juos į „Docker“ įrenginį, kad sukurtumėte konteinerius.

„Docker Hub“ teikia viešąsias ir privačias vaizdų saugyklas. Ieškoti ir atsisiųsti vaizdų iš viešųjų saugyklų gali visi. Privačių saugyklų turinys neįtraukiamas į paieškos rezultatus. Ir tik jūs ir jūsų vartotojai galite gauti šiuos vaizdus ir kurti iš jų konteinerius.

Kaip veikia konteineris?

Konteineris susideda iš operacinės sistemos, vartotojo failų ir metaduomenų. Kaip žinome, kiekvienas konteineris yra sukurtas iš paveikslėlio. Šis vaizdas nurodo dokeriui, kas yra konteineryje, kokį procesą pradėti, kada paleidžiamas sudėtinis rodinys ir kiti konfigūracijos duomenys. „Docker“ vaizdas yra tik skaitomas. Kai „Docker“ paleidžia konteinerį, jis sukuria skaitymo / rašymo sluoksnį vaizdo viršuje (naudodamas sąjungos failų sistemą, kaip nurodyta anksčiau), kuriame galima paleisti programą.

Kas atsitiks, kai konteineris paleidžiamas?

Arba naudodamiesi programa docker, arba naudojant RESTful API, docker klientas nurodo dokerio demonui paleisti konteinerį.

$ sudo docker run -i -t ubuntu /bin/bash

Pažvelkime į šią komandą. Klientas paleidžiamas naudojant komandą docker, su galimybe run, kuriame rašoma, kad bus paleistas naujas konteineris. Minimalūs konteinerio paleidimo reikalavimai yra šie atributai:

  • kurį vaizdą naudoti kuriant konteinerį. Mūsų atveju ubuntu
  • komanda, kurią norite paleisti paleidus konteinerį. Mūsų atveju /bin/bash

Kas nutinka po gaubtu, kai vykdome šią komandą?

Docker eilės tvarka atlieka šiuos veiksmus:

  • atsisiunčia ubuntu vaizdą: dokeris tikrina, ar nėra vaizdų ubuntu vietiniame kompiuteryje ir, jei jo ten nėra, atsisiųskite jį iš „Docker Hub“. Jei yra vaizdas, jis naudoja jį konteineriui sukurti;
  • sukuria konteinerį: kai vaizdas gaunamas, docker naudoja jį konteineriui sukurti;
  • inicijuoja failų sistemą ir prijungia tik skaitymo lygį: konteineris sukuriamas failų sistemoje ir vaizdas įtraukiamas į tik skaitymo lygį;
  • inicijuoja tinklą / tiltą: sukuria tinklo sąsają, leidžiančią dokeriui susisiekti su pagrindiniu kompiuteriu;
  • IP adreso nustatymas: suranda ir nustato adresą;
  • Pradedamas nurodytas procesas: paleidžia jūsų programą;
  • Apdoroja ir gamina išvestį iš jūsų programos: sujungia ir registruoja jūsų programos standartinę įvestį, išvestį ir klaidų srautą, kad galėtumėte stebėti, kaip veikia jūsų programa.

Dabar turite veikiantį konteinerį. Galite tvarkyti savo sudėtinį rodinį, sąveikauti su programa. Kai nuspręsite sustabdyti programą, ištrinkite konteinerį.

Naudojamos technologijos

„Docker“ yra parašyta „Go“ ir naudoja kai kurias „Linux“ branduolio funkcijas, kad įgyvendintų aukščiau nurodytas funkcijas.

Vardų erdvės

Docker naudoja technologiją namespaces organizuoti izoliuotas darbo vietas, kurias vadiname konteineriais. Kai paleidžiame konteinerį, docker sukuria šio konteinerio vardų erdvių rinkinį.

Taip sukuriamas izoliuotas sluoksnis, kuriame kiekvienas konteinerio aspektas veikia savo vardų erdvėje ir neturi prieigos prie išorinės sistemos.

Kai kurių vardų sričių, kurias naudoja docker, sąrašas:

  • pid: izoliuoti procesą;
  • neto: tinklo sąsajoms valdyti;
  • ipc: valdyti IPC išteklius. (ICP: InterProccess Communication);
  • mnt: valdyti tvirtinimo taškus;
  • utc: atskirti branduolį ir valdyti versijų generavimą (UTC: Unix pakaitinio naudojimo sistema).

Kontrolinės grupės

„Docker“ taip pat naudoja technologiją cgroups arba kontrolines grupes. Norint paleisti programą atskirai, svarbiausia yra suteikti programai tik tuos išteklius, kuriuos norite pateikti. Taip užtikrinama, kad konteineriai bus geri kaimynai. Valdymo grupės leidžia dalytis turimais aparatūros ištekliais ir, jei reikia, nustatyti limitus ir apribojimus. Pavyzdžiui, apribokite galimą konteinerio atminties kiekį.

Sąjungos failų sistema

Union File Sysem arba UnionFS yra failų sistema, kuri sukuria sluoksnius, todėl yra labai lengva ir greita. „Docker“ naudoja „UnionFS“, kad sukurtų blokus, iš kurių pastatytas konteineris. Docker gali naudoti kelis UnionFS variantus, įskaitant: AUFS, btrfs, vfs ir DeviceMapper.

Konteinerių formatai

„Docker“ sujungia šiuos komponentus į pakuotę, kurią vadiname konteinerio formatu. Numatytasis formatas vadinamas libcontainer. „Docker“ taip pat palaiko tradicinį konteinerio formatą naudojant „Linux“. LXC. Ateityje „Docker“ gali palaikyti kitus konteinerių formatus. Pavyzdžiui, integruojant su BSD Jails arba Solaris Zones.

Šaltinis: www.habr.com

Добавить комментарий