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:
Išvestis 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: 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š Ir pakeiskite šią eilutę: Šiam: Išsaugokite failą ir paleiskite: „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 $ sudo docker ps Paprasčiausiai įvesdami galite peržiūrėti visas galimas komandas Kai bėgau Išsamų vaizdų ir saugyklų sąrašą galima rasti „Docker Hub“. Š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: Kai spausdinau Atkreipkite dėmesį, kad jei aš įvedžiau Būčiau puledl visi vaizdai ( Ta pati logika, susijusi su repo ir žymomis, taikoma ir kitoms manipuliacijoms vaizdais. Jei patraukėte 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 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. Dabar, kai geriau suprantate, kaip veikia vaizdai ir sudėtiniai rodiniai, nustatykime „Apache“ žiniatinklio serverio konteinerį ir padarykime jį nuolatinį. Pirmiausia reikia pastatyti naują konteinerį. Yra keli būdai, kaip tai padaryti, bet kadangi turite paleisti kelias komandas, pradėkite šaknies apvalkalą naujame konteineryje: Tai sukuria naują sudėtinį rodinį su unikaliu ID ir pavadinimu root @ d7c8f02c3c8c: / # apt-get install apache2 Atkreipkite dėmesį, kad jums nereikia naudoti Normalu 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į. 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: root @ d7c8f02c3c8c: / # apt-get install nano Faile startapache.sh pridėkite šias eilutes: . / etc / apache2 / envvars / usr / sbin / apache2 -D IŠPARDAVIMAS Parašykite pakeitimus ir išsaugokite failą. Tada padarykite jį vykdomu: 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 Dabar jums reikia įsipareigoti sudėtiniame rodinyje, kad išsaugotumėte atliktus pakeitimus: Įsipareigojimas išsaugos jūsų konteinerį kaip naują vaizdą ir grąžins unikalų ID. Argumentas Tai galite pamatyti vykdydami komandą 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 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: 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 dokininko informacija
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ų.
$ sudo ufw būsena
LAŠAS
į PRIIMTI
. Norėdami tai padaryti naudodami „Nano“ redaktorių, įveskite:$ sudo nano / etc / default / ufw
DEFAULT_FORWARD_POLICY = "LAŠAS"
DEFAULT_FORWARD_POLICY = "PRIIMTI"
$ sudo ufw perkrauti
Dirbkite su „Docker“ vaizdais ir „Docker“ konteineriais
dokininkas ps
komanda:# Ši komanda parodys VISUS sistemos konteinerius
$ sudo docker ps -a
# Tai rodys tik RUNNING sudėtinius rodinius
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ą.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
„Docker“ vaizdai ir konteineriai
„ubuntu“: 16.04
, „ubuntu“: xenial-20171201
, ubuntu: xenial
, ubuntu: naujausias
.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
. $ sudo docker pull -a ubuntu
-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.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
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ą.Iš konteinerio sukurkite naują „Docker“ vaizdą
Pradėkite nuo naujo „Docker“ konteinerio
$ sudo docker paleisti -i -t --name apache_web ubuntu / bin / bash
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
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ų.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
Sukurkite „Docker“ sudėtinio rodinio paleidimo scenarijų
# Gali tekti pirmiausia įdiegti „Nano“ į konteinerį
root @ d7c8f02c3c8c: / # nano /usr/local/sbin/startapache.sh
#! / bin / bash
root @ d7c8f02c3c8c: / # chmod + x /usr/local/sbin/startapache.sh
išėjimas
. Kai išeisite iš konteinerio, konteineris sustos.Įveskite konteinerį, kad sukurtumėte naują „Docker“ vaizdą
$ sudo docker įvykdyti apache_web local: apache_web
vietinis: apache_web
įsipareigojimas bus patalpintas vietinėje saugykloje, pavadintoje vietinis
su žyma apache_web
.„sudo docker“ vaizdai
:SANDĖLIAVIMO ŽYMOS VAIZDO ID SUKURTAS VIRTUALUS DYDIS
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
$ sudo docker paleisti -d -p 8080: 80 --name apache local: apache_web /usr/local/sbin/startapache.sh