Programavimas

„Docker“ mokymo programa: pradėkite naudoti „Docker“

Konteineriai yra lengvas būdas perkelti programų darbo krūvius, pvz., Virtualią mašiną, tačiau be pridėtinės vertės ir masės, paprastai susijusios su VM. Naudojant konteinerius, programas ir paslaugas galima supakuoti ir laisvai perkelti iš fizinės, virtualios ar debesies aplinkos.

„Docker“, konteinerių kūrimo ir valdymo sistema, sukurta „Docker Inc.“, perima „Linux“ rastą sudėtinių talpyklų funkcionalumą ir suteikia ją galutiniams vartotojams per komandų eilutės sąsają ir API rinkinį.

Daugelį įprastų programų komponentų dabar galima įsigyti kaip iš anksto supakuotus „Docker“ konteinerius, todėl lengva įdiegti programinės įrangos paketus kaip atsieti komponentus (mikroservikų modelis). Tai reiškia, kad tai padeda žinoti, kaip gabalai dera tarpusavyje iš vidaus.

Taigi šiame vadove aš įdiegiu „Apache“ tinklo serverį į „Docker“ konteinerį ir ištiriu, kaip „Docker“ veikia pakeliui.

Įdiekite „Docker“

Aš naudoju „Ubuntu“ kaip „Docker“ kūrimo pagrindą. „Ubuntu“ nėra tik populiarus ir plačiai naudojamas platinimas, bet ir pati „Docker“ komanda kūrimui naudoja „Ubuntu“, o „Docker“ palaiko „Ubuntu Server“ nuo 12.04 ir naujesnių versijų. Siekdamas paprastumo, pradedu instrukcijas, kai naudojau naują „Ubuntu 16.04“ diegimą.

Paruoškite „Ubuntu Linux“, skirtą „Docker“

Pirmas dalykas, kurį reikia padaryti, yra gauti tinkamą branduolio ir jo antraščių versiją:

$ sudo apt-get install --install-rekomenduoja „linux-generic-hwe-16.04“

Šis procesas gali užtrukti šiek tiek laiko, todėl jį reikės iš naujo paleisti:

$ sudo perkrauti

Po to gali tekti atnaujinti kitus sistemos paketus:

$ sudo apt-get atnaujinimas

$ sudo apt-get atnaujinimas

Įdiekite „Docker“ į „Ubuntu“

„Docker“ diegimas „CentOS“, „Fedora“, „Debian“, „Ubuntu“ ir „Raspbian Linux“ paskirstymuose yra paprastas naudojant „shell“ scenarijų, kurį galite atsisiųsti iš //get.docker.com/. Tam jums reikės garbanoti komandą. Norėdami gauti naujausią versiją garbanoti:

sudo apt-get install curl

Kai tik turėsite garbanoti įdiekite, paimkite diegimo scenarijų ir nustatykite, kad jis veiktų:

garbanos -s //get.docker.com | sudo sh

Kai scenarijus bus baigtas diegti, pamatysite tokį užrašą, kuriame pateikiama išsami diegimo informacija apie „Docker“ versiją, klientą ir serverio komponentus:

Atkreipkite dėmesį į apačioje pateiktą išsamią informaciją apie ne šaknų vartotojų pridėjimą prie „Docker“. Tai patogu tai padaryti, bet jei tai padarysite, rekomenduojama sukurti ne šaknų vartotoją, skirtą specialiai darbui su „Docker“ ir jokiai kitai funkcijai atlikti. Dėl šios pamokos vis dėlto laikausi naudojimo sudo paleisti „Docker“ neturint privilegijuoto vartotojo.

Dabar galite išbandyti pagrindinį „Docker“ konteinerį:

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

Ši komanda atsisiunčia bendrą „Docker Ubuntu“ vaizdą (kaip nurodyta ubuntu parametras) ir paleiskite / bin / bash komandą tame konteineryje. -i ir -t parinktys atveria atitinkamai standartinę įvestį ir pseudo TTY.

Jei tai pavyksta, turėtumėte pamatyti, kad pagrindinio kompiuterio vardas komandinėje eilutėje pasikeistų į panašų root @ 216b04387924: / #, kuris nurodo jūsų naujo veikiančio sudėtinio rodinio ID numerį (ir pagrindinio kompiuterio pavadinimą). Norėdami išeiti, įveskite išėjimas, tas pats, ką norėtumėte palikti bet kurioje „shell“ sesijoje.

Dabar serveryje turėtumėte įdiegti funkcinį „Docker“ įrenginį. Galite išbandyti ir gauti pagrindinę informaciją naudodami dokininko informacija komanda:

$ sudo dokininko informacija

Išvestis dokininko informacija komanda rodo konteinerių ir vaizdų skaičių, be kitos svarbios informacijos. Atkreipkite dėmesį, kad tai gali būti gana ilga; šis pavyzdys rodo tik paskutinius iš dviejų puslapių.

Paskutinis pakeitimas, kurį turėsite atlikti, jei naudojate „Ubuntu“ UFW užkardą, yra leisti paketams persiųsti. Galite patikrinti, ar UFW veikia, įvesdami šiuos duomenis:

$ sudo ufw būsena

Jei komanda pateikia neaktyvios būsenos būseną, galite praleisti šį kitą veiksmą. Priešingu atveju turėsite redaguoti UFW konfigūracijos failą / etc / default / ufw ir pakeisti persiuntimo iš LAŠAS į PRIIMTI. Norėdami tai padaryti naudodami „Nano“ redaktorių, įveskite:

$ sudo nano / etc / default / ufw

Ir pakeiskite šią eilutę:

DEFAULT_FORWARD_POLICY = "LAŠAS"

Šiam:

DEFAULT_FORWARD_POLICY = "PRIIMTI"

Išsaugokite failą ir paleiskite:

$ sudo ufw perkrauti

Dirbkite su „Docker“ vaizdais ir „Docker“ konteineriais

„Docker“ konteineriai yra daug efektyvesni nei virtualios mašinos. Kai konteineris nevykdo proceso, jis visiškai neveikia. Galite manyti, kad „Docker“ konteineriai yra savarankiški procesai - kai jie aktyviai neveikia, jie, išskyrus saugyklą, nenaudoja jokių išteklių.

Galite peržiūrėti aktyvius ir neaktyvius sudėtinius rodinius naudodami dokininkas ps komanda:

# Ši komanda parodys VISUS sistemos konteinerius

$ sudo docker ps -a

# Tai rodys tik RUNNING sudėtinius rodinius

$ sudo docker ps

Paprasčiausiai įvesdami galite peržiūrėti visas galimas komandas dokininkas. Norėdami sužinoti naujausią visų komandų, jų parinkčių ir išsamių aprašymų sąrašą, skaitykite oficialią komandinės eilutės kliento dokumentaciją.

Kai bėgau dokininko bėgimas anksčiau ta komanda automatiškai patraukė „Ubuntu“ konteinerio atvaizdą iš „Docker Hub“ registro tarnybos. Vis dėlto dažniausiai norėsite iš anksto traukti konteinerių vaizdus į vietinę talpyklą, o ne daryti pagal pareikalavimą. Norėdami tai padaryti, naudokite dokininko traukimas, kaip šitas:

$ sudo docker pull ubuntu

Išsamų vaizdų ir saugyklų sąrašą galima rasti „Docker Hub“.

„Docker“ vaizdai ir konteineriai

Šiuo metu verta pasakyti, kaip vaizdai, talpyklos ir traukimo / stūmimo procesas veikia kartu.

Docker konteineriai yra pastatyti iš vaizdai, kurie iš esmės yra operacinių sistemų apvalkalai, kuriuose yra būtini dvejetainiai failai ir bibliotekos programoms vykdyti konteineryje.

Vaizdai pažymėti etiketežymos, iš esmės metaduomenis, kurie leidžia lengvai saugoti ir parengti įvairias atvaizdo versijas. Natūralu, kad vieną vaizdą galima susieti su keliomis žymomis: „ubuntu“: 16.04, „ubuntu“: xenial-20171201, ubuntu: xenial, ubuntu: naujausias.

Kai spausdinau dokininkas traukia ubuntu anksčiau iš „Ubuntu“ saugyklos išsitraukiau numatytąjį „Ubuntu“ vaizdą, kuris yra pažymėtas vaizdas vėliausiai. Kitaip tariant, komanda dokininkas traukia ubuntu yra lygiavertis docker pull ubuntu: naujausias ir (šio rašymo metu) docker pull ubuntu: ksenialinis

Atkreipkite dėmesį, kad jei aš įvedžiau

$ sudo docker pull -a ubuntu

Būčiau puledl visi vaizdai ( -a vėliava) Ubuntu saugykloje į mano vietinę sistemą. Vis dėlto dažniausiai norėsite numatytojo vaizdo arba konkrečios versijos. Pavyzdžiui, jei norite „Ubuntu Saucy Salamander“ atvaizdo, naudosite docker pull -a ubuntu: sūrus parsisiųsti vaizdą su ta žyma iš tos repo.

Ta pati logika, susijusi su repo ir žymomis, taikoma ir kitoms manipuliacijoms vaizdais. Jei patraukėte sūrus kaip nurodyta pirmiau pateiktame pavyzdyje, jį vykdytumėte įvesdami sudo docker paleisti -i -t ubuntu: saucy / bin / bash. Jei rašotesudo docker vaizdas rm ubuntu, pašalinti ubuntu vaizdą, jis pašalins tik pažymėtą vaizdą vėliausiai . Norėdami pašalinti ne numatytuosius vaizdus, ​​pvz., „Ubuntu Saucy“, turite įtraukti atitinkamą žymą:

sudo docker vaizdas rm ubuntu: padažas

„Docker“ vaizdo ir talpyklos darbo eiga

Grįžtame prie darbo su vaizdais. Kai ištrauksite vaizdą, kad ir koks jis būtų, sukuriate iš jo tiesioginį sudėtinį rodinį (kaip aš parodžiau), vykdydami dokininko bėgimas komandą. Pridėję programinę įrangą ir pakeitę bet kokius sudėtinius rodinius talpykloje, naudodami mygtuką, galite sukurti naują vaizdą iš tų pakeitimų dokininkas įsipareigoja komandą.

Svarbu pažymėti, kad „Docker“ deltas arba pakeitimus saugo tik vaizduose, pastatytuose iš kitų vaizdų. Kuriant savo atvaizdus, ​​tik pagrindinio atvaizdo pakeitimai yra saugomi naujame paveikslėlyje, kuris susiejamas su pagrindiniu vaizdu, atsižvelgiant į visas jo priklausomybes. Taigi dėl šio efektyvumo galite kurti vaizdus, ​​kurių virtualus dydis yra 266 MB, tačiau diske užima tik keletą megabaitų.

Visiškai sukonfigūruoti konteineriai gali būti perkelti į centrinę saugyklą, kad būtų naudojami kitur organizacijoje ar netgi viešai. Tokiu būdu programų kūrėjas gali paskelbti viešą programos sudėtinį rodinį arba galite sukurti privačias saugyklas, kad galėtumėte laikyti visus jūsų organizacijos viduje naudojamus sudėtinius rodinius.

Iš konteinerio sukurkite naują „Docker“ vaizdą

Dabar, kai geriau suprantate, kaip veikia vaizdai ir sudėtiniai rodiniai, nustatykime „Apache“ žiniatinklio serverio konteinerį ir padarykime jį nuolatinį.

Pradėkite nuo naujo „Docker“ konteinerio

Pirmiausia reikia pastatyti naują konteinerį. Yra keli būdai, kaip tai padaryti, bet kadangi turite paleisti kelias komandas, pradėkite šaknies apvalkalą naujame konteineryje:

$ sudo docker paleisti -i -t --name apache_web ubuntu / bin / bash

Tai sukuria naują sudėtinį rodinį su unikaliu ID ir pavadinimu apache_web. Tai taip pat suteikia jums šaknies apvalkalą, nes nurodėte / bin / bash kaip komanda paleisti. Dabar naudokite „Apache“ žiniatinklio serverį apt-get:

root @ d7c8f02c3c8c: / # apt-get atnaujinimas

root @ d7c8f02c3c8c: / # apt-get install apache2

Atkreipkite dėmesį, kad jums nereikia naudoti sudo, nes jūs naudojate kaip šakninį konteinerio viduje. Atkreipkite dėmesį, kad jūs padaryti reikia bėgti apt-get atnaujinimas, nes vėlgi pakuočių sąrašas konteinerio viduje nėra tas pats, kas už jos ribų.

Normalu apt-get pasirodys išvestis, o „Apache2“ paketas bus įdiegtas jūsų naujame sudėtiniame rodinyje. Baigę diegti, paleiskite „Apache“, įdiekite „curl“ ir išbandykite diegimą iš savo talpyklos:

root @ d7c8f02c3c8c: / # paslaugos apache2 paleidimas

root @ d7c8f02c3c8c: / # apt-get install curl

root @ d7c8f02c3c8c: / # curl // localhost

Vykdydami paskutinę komandą, turėtumėte pamatyti neapdorotąjį numatytojo „Apache“ puslapio HTML, rodomą konsolėje. Tai reiškia, kad mūsų „Apache“ serveris yra įdiegtas ir veikia jūsų talpykloje.

Jei tai darėte gamybos aplinkoje, turėtumėte sukonfigūruoti „Apache“ pagal savo reikalavimus ir įdiegti programą, kad ji būtų teikiama. „Docker“ leidiniai katalogai, esantys ne talpykloje, turi būti susieti su keliais jo viduje, todėl vienas iš būdų yra išsaugoti savo žiniatinklio programą pagrindinio kompiuterio kataloge ir padaryti jį matomą konteineriui per žemėlapį.

Sukurkite „Docker“ sudėtinio rodinio paleidimo scenarijų

Atminkite, kad „Docker“ konteineris veikia tik tol, kol jo procesas ar procesai yra aktyvūs. Taigi, jei procesas, kurį paleisite pirmą kartą paleisdami konteinerį, pereis į foną, kaip sistemos deimonas, „Docker“ sustabdys konteinerį. Todėl, paleidus konteinerį, priekiniame plane turite paleisti „Apache“, kad konteineris neišeitų iš karto, kai tik užsidega.

Sukurkite scenarijų, startapache.sh, aplanke / usr / local / sbin:

# Gali tekti pirmiausia įdiegti „Nano“ į konteinerį

root @ d7c8f02c3c8c: / # apt-get install nano

root @ d7c8f02c3c8c: / # nano /usr/local/sbin/startapache.sh

Faile startapache.sh pridėkite šias eilutes:

#! / bin / bash

. / etc / apache2 / envvars

/ usr / sbin / apache2 -D IŠPARDAVIMAS

Parašykite pakeitimus ir išsaugokite failą. Tada padarykite jį vykdomu:

root @ d7c8f02c3c8c: / # chmod + x /usr/local/sbin/startapache.sh

Viskas, ką šis nedidelis scenarijus daro, yra atnešti tinkamus „Apache“ aplinkos kintamuosius ir pradėti „Apache“ procesą pirmame plane.

Baigėte modifikuoti sudėtinio rodinio turinį, todėl galite palikti sudėtinį rodinį įvesdami išėjimas. Kai išeisite iš konteinerio, konteineris sustos.

Įveskite konteinerį, kad sukurtumėte naują „Docker“ vaizdą

Dabar jums reikia įsipareigoti sudėtiniame rodinyje, kad išsaugotumėte atliktus pakeitimus:

$ sudo docker įvykdyti apache_web local: apache_web

Įsipareigojimas išsaugos jūsų konteinerį kaip naują vaizdą ir grąžins unikalų ID. Argumentas vietinis: apache_web įsipareigojimas bus patalpintas vietinėje saugykloje, pavadintoje vietinis su žyma apache_web.

Tai galite pamatyti vykdydami komandą „sudo docker“ vaizdai:

SANDĖLIAVIMO ŽYMOS VAIZDO ID SUKURTAS VIRTUALUS DYDIS

local apache_web d95238078ab0 Prieš 4 minutes 284.1 MB

Atminkite, kad tiksli jūsų vaizdo informacija - vaizdo ID, sudėtinio rodinio dydis - skirsis nuo mano pavyzdžio.

„Docker“ konteineriai yra suprojektuoti taipnekintamas. Kai atliksite sudėtinio rodinio pakeitimus, rezultatai bus įrašomi į visiškai naują sudėtinį rodinį, o ne į originalą. Jei norite pakeisti „Apache“, tarkime, „Nginx“, pradėtumėte nuo originalo ubuntu: naujausias konteinerį, pridėkite prie to „Nginx“ ir išsaugokite rezultatus kaip visiškai naują konteinerį, pavadintą panašiai vietinis: nginx.

Supraskite „Docker“ tinklo pagrindus

Dabar, kai turite mūsų atvaizdą, galite paleisti sudėtinį rodinį ir pradėti teikti puslapius. Tačiau prieš tai leiskite man skirti šiek tiek laiko paaiškinti, kaip „Docker“ tvarko tinklą.

Įdiegus „Docker“, jis sukuria tris virtualius tinklus, kuriuos gali naudoti „Docker“ konteineriai:

  • tiltas: Tai yra tinklas, prie kurio konteineriai jungiasi pagal numatytuosius nustatymus. Tiltinis tinklas leidžia konteineriams tiesiogiai bendrauti tarpusavyje, bet ne su pagrindine sistema.
  • vedėjas: Šis tinklas leidžia konteinerius tiesiogiai matyti priegloboje, tarsi visos juose esančios programos būtų vykdomos kaip vietinio tinklo paslaugos.
  • nė vienas: Tai iš esmės yra nulinis arba atgalinis tinklas. Prie nieko prijungtas konteineris negali matyti nieko, išskyrus save.

Kai norite paleisti sudėtinį rodinį ir leisti jam bendrauti tiek su kitais konteineriais, tiek su išoriniu pasauliu, turite rankiniu būdu susieti šio konteinerio prievadus su pagrindiniu kompiuteriu. Mano pavyzdžiu galite tai padaryti komandinėje eilutėje, kai paleidžiate naujai sukurtą konteinerį:

$ sudo docker paleisti -d -p 8080: 80 --name apache local: apache_web /usr/local/sbin/startapache.sh

Copyright lt.verticalshadows.com 2023