Konteineri nodrošina vieglu veidu, kā pārnēsāt lietojumprogrammu darba slodzes, piemēram, virtuālo mašīnu, bet bez pieskaitāmās daļas un lielapjoma, kas parasti saistīts ar VM. Izmantojot konteinerus, lietotnes un pakalpojumus var iepakot un brīvi pārvietot starp fizisko, virtuālo vai mākoņdatu vidi.
Docker, konteineru izveides un pārvaldības sistēma, ko izveidojusi Docker Inc., pārņem Linux atrodamo konteineru funkcionalitāti un padara to pieejamu galalietotājiem, izmantojot komandrindas saskarni un API kopu.
Daudzi izplatīti lietojumprogrammu komponenti tagad ir pieejami kā fasēti Docker konteineri, kas atvieglo programmatūras kaudzīšu izvietošanu kā atsaistītus komponentus (mikroservisu modelis). Tas nozīmē, ka tas palīdz uzzināt, kā gabali sader kopā no iekšpuses un ārpuses.
Tādējādi šajā rokasgrāmatā es instalēju Apache tīmekļa serveri Docker konteinerā un izpētīju, kā Docker darbojas pa ceļam.
Instalējiet Docker
Es izmantoju Ubuntu kā Docker būves pamatu. Ubuntu nav tikai populārs un plaši izmantots izplatījums, bet pati Docker komanda izmanto Ubuntu izstrādei, un Docker tiek atbalstīts Ubuntu Server no 12.04 un jaunākām versijām. Vienkāršības labad es sāku ar instrukcijām, izmantojot jaunu Ubuntu 16.04 instalēšanu.
Sagatavojiet Ubuntu Linux Docker
Vispirms ir jāiegūst pareizā kodola un tā galvenes versija:
$ sudo apt-get install --install-iesaka linux-generic-hwe-16.04
Šis process var aizņemt kādu laiku, un, kad esat pabeidzis, tas būs jāpārstartē:
$ sudo atsāknēšana
Pēc tam, iespējams, būs jāatjaunina arī citas sistēmas pakotnes:
$ sudo apt-get atjauninājums
$ sudo apt-get jauninājums
Instalējiet Docker uz Ubuntu
Docker instalēšana CentOS, Fedora, Debian, Ubuntu un Raspbian Linux izplatījumos ir vienkārša, izmantojot čaulas skriptu, kuru varat lejupielādēt vietnē //get.docker.com/. Tam jums būs nepieciešams čokurošanās
komandu. Lai iegūtu jaunāko versiju čokurošanās
:
sudo apt-get install čokurošanās
Kad esat to izdarījis čokurošanās
instalējiet, ienesiet instalēšanas skriptu un iestatiet to darboties:
čokurošanās -s //get.docker.com | sudo sh
Kad skripts ir pabeidzis instalēšanu, tiek parādīta šāda piezīme ar instalēšanas informāciju par Docker versiju, gan klientu, gan servera komponentiem:
Ievērojiet apakšā esošo informāciju par lietotāju bez saknēm pievienošanu Docker. Tas ir ērti to izdarīt, taču, ja jūs to darāt, ieteicams izveidot lietotāju, kas nav saknes, īpaši darbam ar Docker un nevienai citai funkcijai. Šīs apmācības labad es tomēr paliku pie lietošanas sudo
palaist Docker kā priviliģētu lietotāju.
Tagad jūs varat izmēģināt pamata Docker konteineru:
$ sudo docker palaist -i -t ubuntu / bin / bash
Šī komanda lejupielādē vispārējo Docker Ubuntu attēlu (kā norādīts ubuntu
parametrs) un palaidiet / bin / bash
komandu tajā konteinerā. The -i
un -t
opcijas atver attiecīgi standarta ievadi un pseido TTY.
Ja tas ir veiksmīgs, jums vajadzētu redzēt resursdatora nosaukumu komandu uzvednē mainīt uz kaut ko līdzīgu root @ 216b04387924: / #
, kas norāda jūsu jaunā darbojošā konteinera ID numuru (un resursdatora nosaukumu). Lai aizietu, ierakstiet Izeja
, tāpat kā jūs pamestu jebkuru čaulas sesiju.
Tagad serverī vajadzētu būt funkcionālai Docker instalācijai. Jūs varat to pārbaudīt un iegūt pamatinformāciju, izmantojot dokstacijas informācija
komanda:
Izvade Ja izmantojat Ubuntu UFW ugunsmūri, jums būs jāveic pēdējās izmaiņas, lai atļautu pakešu pārsūtīšanu. Jūs varat pārbaudīt, vai UFW darbojas, ievadot: Ja komanda atgriež neaktīva statusu, varat izlaist šo nākamo darbību. Pretējā gadījumā jums būs jārediģē UFW konfigurācijas fails / etc / default / ufw un jāmaina politika pārsūtīšanai no Un mainiet šo rindu: Uz šo: Saglabājiet failu un pēc tam palaidiet: Docker konteineri ir daudz efektīvāki nekā virtuālās mašīnas. Ja konteiners nedarbojas, tas ir pilnīgi neaktīvs. Jūs varētu domāt, ka Docker konteineri ir patstāvīgi procesi - ja tie aktīvi nedarbojas, tie, izņemot krātuvi, patērē tikai resursus. Aktīvos un neaktīvos konteinerus varat apskatīt, izmantojot $ sudo docker ps Jūs varat apskatīt visas pieejamās komandas, vienkārši ievadot Kad es skrēju Pilns meklējamo attēlu un krātuvju saraksts ir pieejams Docker centrmezglā. Šajā brīdī ir vērts izskaidrot, kā visi attēli, konteineri un izvilkšanas / virzīšanas process darbojas kopā. Docker konteineri ir būvēti no attēlus, kas būtībā ir operētājsistēmu čaulas, kas satur nepieciešamos bināros failus un bibliotēkas lietojumprogrammu darbināšanai konteinerā. Attēli ir apzīmēti artagusbūtībā metadatus, kas atvieglo dažādu attēla versiju saglabāšanu un izvilkšanu. Protams, vienu attēlu var saistīt ar vairākiem tagiem: Kad es rakstīju Ņemiet vērā, ka, ja es būtu ierakstījis: Es būtu puledl visi attēli ( Tāda pati loģika, kāda ir repos un tagos, attiecas arī uz citām manipulācijām ar attēliem. Ja jūs vilktu Atpakaļ pie darba ar attēliem. Kad esat izvilcis attēlu, lai kāds tas būtu, jūs izveidojat no tā aktīvu konteineru (kā es parādīju), izpildot Ir svarīgi atzīmēt, ka Docker glabā deltas vai izmaiņas tikai attēlos, kas veidoti no citiem attēliem. Veidojot savus attēlus, jaunajā attēlā tiek saglabātas tikai izmaiņas, kuras veicat bāzes attēlā, kas saista visu pamatatbildi ar visām tās atkarībām. Tādējādi šīs efektivitātes dēļ varat izveidot attēlus, kuru virtuālais izmērs ir 266 MB, bet diskā aizņem tikai dažus megabaitus. Pēc tam pilnībā konfigurētus konteinerus var pārvietot uz centrālo krātuvi, lai tos izmantotu citur organizācijā vai pat kopīgotu publiski. Tādā veidā lietojumprogrammu izstrādātājs var publicēt lietotnes publisko konteineru vai arī izveidot privātus krātuves, lai glabātu visus konteinerus, kurus jūsu organizācija izmanto iekšēji. Tagad, kad jums ir labāka izpratne par attēlu un konteineru darbību, iestatīsim Apache tīmekļa servera konteineru un padarīsim to pastāvīgu. Pirmkārt, jums jāveido jauns konteiners. Ir daži veidi, kā to izdarīt, taču, tā kā ir palaistas dažas komandas, sāciet saknes apvalku jaunā konteinerā: Tādējādi tiek izveidots jauns konteiners ar unikālu ID un nosaukumu root @ d7c8f02c3c8c: / # apt-get install apache2 Ņemiet vērā, ka jums tas nav jāizmanto Normāli root @ d7c8f02c3c8c: / # apt-get install čokurošanās root @ d7c8f02c3c8c: / # čokurošanās // localhost Pēc pēdējās komandas konsolē ir redzams noklusējuma Apache lapas neapstrādātais HTML. Tas nozīmē, ka mūsu Apache serveris ir instalēts un darbojas jūsu konteinerā. Ja jūs to darījāt ražošanas vidē, pēc tam konfigurējiet Apache atbilstoši savām prasībām un instalējiet lietojumprogrammu, lai tā darbotos. Docker letd direktoriji ārpus konteinera tiek kartēti ar ceļiem tā iekšpusē, tāpēc viena pieeja ir glabāt jūsu tīmekļa lietotni resursdatora direktorijā un padarīt to redzamu konteineram, izmantojot kartēšanu. Atcerieties, ka Docker konteiners darbojas tikai tik ilgi, kamēr tā process vai procesi ir aktīvi. Tātad, ja process, kuru palaižat, pirmo reizi palaižot konteineru, pāriet uz fonu, piemēram, sistēmas dēmons, Docker pārtrauks konteineru. Tāpēc, palaižot konteineru, priekšplānā ir jāpalaiž Apache, lai konteiners netiktu iziet, tiklīdz tas tiek palaists. Izveidojiet skriptu startapache.sh mapē / usr / local / sbin: root @ d7c8f02c3c8c: / # apt-get install nano Failā startapache.sh pievienojiet šīs rindas: . / etc / apache2 / envvars / usr / sbin / apache2 -D Priekšplāns Uzrakstiet izmaiņas un saglabājiet failu. Tad padariet to izpildāmu: Viss, ko šis mazais skripts veic, ir Apache atbilstošo vides mainīgo ievešana un Apache procesa sākšana priekšplānā. Jūs esat pabeidzis konteinera satura modificēšanu, tāpēc varat atstāt konteineru, ierakstot Tagad jums ir nepieciešams apņemties konteinerā, lai saglabātu veiktās izmaiņas: Apņemšanās saglabās jūsu konteineru kā jaunu attēlu un atgriezīs unikālu ID. Arguments To var redzēt, palaižot komandu local apache_web d95238078ab0 pirms 4 minūtēm 284,1 MB Ņemiet vērā, ka jūsu attēla precīzā informācija - attēla ID, konteinera izmērs - atšķirsies no mana piemēra. Docker konteineri ir paredzētinemainīgs. Ikreiz, kad veicat izmaiņas konteinerā, rezultāti tiek ierakstīti pilnīgi jaunā konteinerā, nevis oriģinālajā. Ja jūs vēlaties apmainīt Apache ar, teiksim, Nginx, jūs sāktu ar oriģinālu Tagad, kad jums ir mūsu attēls, varat sākt mūsu konteineru un sākt apkalpot lapas. Pirms jūs to darāt, ļaujiet man mazliet paskaidrot, kā Docker rīkojas ar tīklu. Kad Docker ir instalēts, tas izveido trīs virtuālos tīklus, kurus var izmantot Docker konteineros: Ja vēlaties palaist konteineru un panākt, lai tas sazinātos gan ar citiem konteineriem, gan ar ārpasauli, jums ir manuāli jāpiesaka ostas no šī konteinera uz resursdatoru. Mana piemēra labā to varat izdarīt komandrindā, palaižot jaunizveidoto konteineru:$ sudo dokstacijas informācija
dokstacijas informācija
komanda parāda konteineru un attēlu skaitu, kā arī citu būtisku informāciju. Ņemiet vērā, ka tas var būt diezgan garš; šis piemērs parāda tikai pēdējo no divām lappusēm.$ sudo ufw statuss
PILĒT
uz PIEŅEMT
. Lai to izdarītu, izmantojot Nano redaktoru, ievadiet šo:$ sudo nano / etc / default / ufw
DEFAULT_FORWARD_POLICY = "PILES"
DEFAULT_FORWARD_POLICY = "PIEŅEMT"
$ sudo ufw pārlādēt
Darbs ar Docker attēliem un Docker konteineriem
dokers ps
komanda:# Šī komanda parādīs VISUS sistēmas konteinerus
$ sudo docker ps -a
# Tas parādīs tikai RUNNING konteinerus
dokeris
. Lai atjauninātu visu komandu, to opciju un pilnīgu aprakstu, skatiet oficiālo komandrindas klienta dokumentāciju.dokeru skrējiens
agrāk šī komanda automātiski velk Ubuntu konteinera attēls no Docker Hub reģistra pakalpojuma. Tomēr lielāko daļu laika konteinera attēlus vēlaties savlaicīgi ievilkt vietējā kešatmiņā, nevis darīt pēc pieprasījuma. Lai to izdarītu, izmantojiet dokera vilkšana
, kā šis:$ sudo docker pull ubuntu
Docker attēli pret konteineriem
ubuntu: 16.04
, ubuntu: xenial-20171201
, ubuntu: xenial
, ubuntu: jaunākais
.docker pull ubuntu
iepriekš es izvilku noklusēto Ubuntu attēlu no Ubuntu repozitorija, kas ir attēls ar tagu vēlākais
. Citiem vārdiem sakot, komanda docker pull ubuntu
ir ekvivalents docker pull ubuntu: jaunākais
un (šīs rakstīšanas laikā) docker pull ubuntu: kseniāls
. $ sudo docker pull -a ubuntu
-a
karodziņš) Ubuntu krātuvē manā vietējā sistēmā. Tomēr lielāko daļu laika jūs vēlaties vai nu noklusējuma attēlu, vai noteiktu versiju. Piemēram, ja vēlaties attēlu Ubuntu Saucy Salamander, izmantojiet docker pull -a ubuntu: niecīgs
lai no šīs repo ielādētu attēlu ar konkrēto tagu.niecīgs
kā norādīts iepriekš minētajā piemērā, jūs to palaistu, ierakstot sudo docker palaist -i -t ubuntu: saucy / bin / bash
. Ja rakstātsudo docker attēls rm ubuntu
, lai noņemtu ubuntu
attēlu, tas noņems tikai atzīmēto attēlu vēlākais
. Lai noņemtu attēlus, kas nav noklusējuma iestatījumi, piemēram, Ubuntu Saucy, jāiekļauj atbilstošā atzīme:sudo docker attēls rm ubuntu: bezkaunīgs
Docker attēla un konteinera darbplūsma
dokeru skrējiens
komandu. Kad esat pievienojis programmatūru un mainījis visus konteinera iekšējos iestatījumus, no šīm izmaiņām varat izveidot jaunu attēlu, izmantojot dokers apņemties
komandu.Izveidojiet jaunu Docker attēlu no konteinera
Sāciet ar jaunu Docker konteineru
$ sudo docker palaist -i -t --name apache_web ubuntu / bin / bash
apache_web
. Tas arī dod jums saknes apvalku, jo jūs norādījāt / bin / bash
kā komandu palaist. Tagad instalējiet Apache tīmekļa serveri, izmantojot apt-get
:root @ d7c8f02c3c8c: / # apt-get atjauninājums
sudo
, jo jūs darbojaties kā root konteinera iekšpusē. Ņemiet vērā, ka jūs darīt vajag skriet apt-get atjauninājums
, jo atkal paku saraksts konteinera iekšpusē nav tas pats, kas ārpus tā.apt-get
parādās izeja, un Apache2 pakotne ir instalēta jaunajā konteinerā. Kad instalēšana ir pabeigta, palaidiet Apache, instalējiet čokurošanos un pārbaudiet instalēšanu no konteinera:root @ d7c8f02c3c8c: / # service apache2 start
Izveidojiet Docker konteinera startēšanas skriptu
# Iespējams, vispirms konteinerā būs jāinstalē Nano
root @ d7c8f02c3c8c: / # nano /usr/local/sbin/startapache.sh
#! / bin / bash
root @ d7c8f02c3c8c: / # chmod + x /usr/local/sbin/startapache.sh
Izeja
. Izejot no konteinera, konteiners apstāsies.Saistiet konteineru, lai izveidotu jaunu Docker attēlu
$ sudo docker apache_web local: apache_web
vietējais: apache_web
izraisīs saistību ievietošanu vietējā repozitorijā ar nosaukumu vietējais
ar atzīmi apache_web
.sudo docker attēli
:REZERVES TAGA ATTĒLA ID, KAS IZVEIDOTS VIRTUĀLS IZMĒRS
ubuntu: jaunākais
konteineru, pievienojiet tam Nginx un saglabājiet rezultātus kā pilnīgi jaunu konteineru ar nosaukumu kaut kas līdzīgs vietējais: nginx
.Izprot Docker tīkla veidošanas pamatus
$ sudo docker palaist -d -p 8080: 80 --name apache local: apache_web /usr/local/sbin/startapache.sh