Es jau vairÄkus mÄneÅ”us izmantoju Docker, lai strukturÄtu tÄ«mekļa projektu izstrÄdes/piegÄdes procesu. PiedÄvÄju Habrakhabr lasÄ«tÄjiem ievadraksta par dokeru tulkojumu - "Izpratne par doku".
Kas ir dokers?
Docker ir atvÄrta platforma lietojumprogrammu izstrÄdei, piegÄdei un darbÄ«bai. Docker ir izstrÄdÄts, lai ÄtrÄk piegÄdÄtu jÅ«su lietojumprogrammas. Izmantojot docker, varat atsaistÄ«t savu lietojumprogrammu no infrastruktÅ«ras un uzskatÄ«t infrastruktÅ«ru kÄ pÄrvaldÄ«tu lietojumprogrammu. Docker palÄ«dz ÄtrÄk nosÅ«tÄ«t kodu, ÄtrÄk pÄrbaudÄ«t, ÄtrÄk nosÅ«tÄ«t lietojumprogrammas un samazinÄt laiku no koda rakstÄ«Å”anas lÄ«dz koda izpildei. Docker to dara, izmantojot vieglu konteineru virtualizÄcijas platformu, izmantojot procesus un utilÄ«tas, kas palÄ«dz pÄrvaldÄ«t un piegÄdÄt lietojumprogrammas.
Docker pamatÄ Ä¼auj palaist gandrÄ«z jebkuru lietojumprogrammu, kas ir droÅ”i izolÄta konteinerÄ. DroÅ”a izolÄcija ļauj vienÄ un tajÄ paÅ”Ä resursdatorÄ vienlaikus darbinÄt daudzus konteinerus. Konteinera vieglais raksturs, kas darbojas bez papildu hipervizora slodzes, ļauj iegÅ«t vairÄk no aparatÅ«ras.
Konteinera virtualizÄcijas platforma un rÄ«ki var bÅ«t noderÄ«gi Å”Ädos gadÄ«jumos:
iesaiÅojiet savu lietojumprogrammu (un izmantotÄs sastÄvdaļas) doku konteineros;
Å”o konteineru izplatÄ«Å”ana un piegÄde jÅ«su komandÄm izstrÄdei un testÄÅ”anai;
izkÄrtojot Å”os konteinerus savÄs ražoÅ”anas vietÄs gan datu centros, gan mÄkoÅos.
Kam es varu izmantot docker?
Ätri publicÄjiet savas lietojumprogrammas
Docker ir lieliski piemÄrots izstrÄdes cikla organizÄÅ”anai. Docker ļauj izstrÄdÄtÄjiem palaist vietÄjos konteinerus ar lietojumprogrammÄm un pakalpojumiem. Kas vÄlÄk ļauj integrÄties nepÄrtrauktas integrÄcijas un izvietoÅ”anas darbplÅ«smas procesÄ.
PiemÄram, jÅ«su izstrÄdÄtÄji raksta kodu lokÄli un koplieto savu izstrÄdes steku (Docker attÄlu kopu) ar kolÄÄ£iem. Kad viÅi ir gatavi, viÅi nosÅ«ta kodu un konteinerus uz testa vietu un veic visus nepiecieÅ”amos testus. No pÄrbaudes vietas viÅi var nosÅ«tÄ«t kodu un attÄlus uz ražoÅ”anu.
VieglÄka izlikÅ”ana un atlocÄ«Å”ana
Docker konteineru platforma ļauj Ärti pÄrvietot jÅ«su kravnesÄ«bu. Docker konteineri var darboties jÅ«su vietÄjÄ datorÄ ā gan reÄlÄ, gan virtuÄlajÄ maŔīnÄ datu centrÄ vai mÄkonÄ«.
Docker pÄrnesamÄ«ba un vieglais raksturs ļauj viegli dinamiski pÄrvaldÄ«t jÅ«su darba slodzi. Varat izmantot docker, lai izvietotu vai izslÄgtu savu lietojumprogrammu vai pakalpojumus. Docker Ätrums ļauj to izdarÄ«t gandrÄ«z reÄllaikÄ.
LielÄkas slodzes un lielÄka kravnesÄ«ba
Docker ir viegls un Ätrs. Tas nodroÅ”ina elastÄ«gu, rentablu alternatÄ«vu virtuÄlajÄm maŔīnÄm, kuru pamatÄ ir hipervizors. Tas ir Ä«paÅ”i noderÄ«gi augstas slodzes vidÄs, piemÄram, veidojot savu mÄkoni vai platformu kÄ pakalpojumu. TaÄu tas ir noderÄ«gi arÄ« mazÄm un vidÄjÄm lietojumprogrammÄm, ja vÄlaties iegÅ«t vairÄk no saviem resursiem.
GalvenÄs Docker sastÄvdaļas
Docker sastÄv no divÄm galvenajÄm sastÄvdaļÄm:
PiezÄ«me! Docker tiek izplatÄ«ts saskaÅÄ ar Apache 2.0 licenci.
Docker arhitektūra
Docker izmanto klienta-servera arhitektÅ«ru. Docker klients sazinÄs ar Docker dÄmonu, kas uzÅemas jÅ«su konteineru izveidi, palaiÅ”anu un izplatÄ«Å”anu. Gan klients, gan serveris var darboties vienÄ sistÄmÄ, jÅ«s varat savienot klientu ar attÄlo docker dÄmonu. Klients un serveris sazinÄs, izmantojot ligzdu vai RESTful API.
Docker dÄmons
KÄ parÄdÄ«ts diagrammÄ, dÄmons darbojas resursdatorÄ. LietotÄjs tieÅ”i nesadarbojas ar serveri, bet izmanto klientu Å”im nolÅ«kam.
Docker klients
Docker klients, Docker programma, ir galvenÄ Docker saskarne. Tas saÅem komandas no lietotÄja un mijiedarbojas ar docker dÄmonu.
Docker iekŔpuse
Lai saprastu, no kÄ sastÄv docker, jums jÄzina trÄ«s komponenti:
attÄlus
reģistrs
Konteineri
AttÄli
Docker attÄls ir tikai lasÄma veidne. PiemÄram, attÄlÄ var bÅ«t Ubuntu operÄtÄjsistÄma ar Apache un tajÄ esoÅ”a lietojumprogramma. AttÄli tiek izmantoti, lai izveidotu konteinerus. Docker ļauj Ärti izveidot jaunus attÄlus, atjauninÄt esoÅ”os vai lejupielÄdÄt attÄlus, ko izveidojuÅ”i citi cilvÄki. AttÄli ir docker versijas sastÄvdaļas.
Reģistrs
Docker reÄ£istrÄ tiek saglabÄti attÄli. Ir publiski un privÄti reÄ£istri, no kuriem varat lejupielÄdÄt vai augÅ”upielÄdÄt attÄlus. Publisks Docker reÄ£istrs ir Dokera centrmezgls. Tur ir glabÄta milzÄ«ga attÄlu kolekcija. KÄ jÅ«s zinÄt, attÄlus varat izveidot jÅ«s vai varat izmantot attÄlus, ko radÄ«juÅ”i citi. ReÄ£istri ir izplatÄ«Å”anas sastÄvdaļa.
Konteineri
Konteineri ir lÄ«dzÄ«gi direktorijiem. Konteineros ir viss, kas nepiecieÅ”ams, lai lietojumprogramma darbotos. Katrs konteiners ir izveidots no attÄla. Konteinerus var izveidot, palaist, apturÄt, migrÄt vai dzÄst. Katrs konteiners ir izolÄts un nodroÅ”ina droÅ”u platformu lietojumprogrammai. Konteineri ir darba sastÄvdaļas.
TÄtad, kÄ darbojas Docker?
LÄ«dz Å”im mÄs zinÄm, ka:
varam izveidot attÄlus, kuros atrodas mÅ«su aplikÄcijas;
mÄs varam izveidot konteinerus no attÄliem, lai palaistu programmas;
MÄs varam izplatÄ«t attÄlus, izmantojot Docker Hub vai citu attÄlu reÄ£istru.
ApskatÄ«sim, kÄ Å”Ä«s sastÄvdaļas sader kopÄ.
KÄ attÄls darbojas?
MÄs jau zinÄm, ka attÄls ir tikai lasÄma veidne, no kuras tiek izveidots konteiners. Katrs attÄls sastÄv no lÄ«meÅu kopas. Docker izmanto savienÄ«bas failu sistÄma lai apvienotu Å”os lÄ«meÅus vienÄ attÄlÄ. SavienÄ«bas failu sistÄma ļauj failiem un direktorijiem no dažÄdÄm failu sistÄmÄm (dažÄdÄm filiÄlÄm) pÄrredzami pÄrklÄties, radot saskaÅotu failu sistÄmu.
Viens no iemesliem, kÄpÄc docker ir viegls, ir tas, ka tajÄ tiek izmantoti Å”Ädi slÄÅi. Mainot attÄlu, piemÄram, atjauninot lietojumprogrammu, tiek izveidots jauns slÄnis. TÄtad, neaizstÄjot visu attÄlu vai nepÄrbÅ«vÄjot to, kÄ tas varÄtu bÅ«t jÄdara ar virtuÄlo maŔīnu, tiek pievienots vai atjauninÄts tikai slÄnis. Un jums nav jÄizplata viss jaunais attÄls, tiek izplatÄ«ts tikai atjauninÄjums, tÄdÄjÄdi atvieglojot un ÄtrÄk izplatot attÄlus.
Katra attÄla pamatÄ ir pamata attÄls. PiemÄram, ubuntu, Ubuntu bÄzes attÄls, vai fedora, Fedora izplatÄ«Å”anas pamata attÄls. Varat arÄ« izmantot attÄlus kÄ pamatu jaunu attÄlu veidoÅ”anai. PiemÄram, ja jums ir apache attÄls, varat to izmantot kÄ pamata attÄlu savÄm tÄ«mekļa lietojumprogrammÄm.
PiezÄ«me! Docker parasti izvelk attÄlus no Docker Hub reÄ£istra.
Docker attÄlus var izveidot no Å”iem pamata attÄliem; mÄs saucam Å”o attÄlu izveides darbÄ«bas norÄdÄ«jumus. Katra instrukcija rada jaunu attÄlu vai lÄ«meni. NorÄdÄ«jumi bÅ«s Å”Ädi:
palaist komandu
pievienojot failu vai direktoriju
izveidojot vides mainīgo
norÄdÄ«jumi par to, ko palaist, palaižot Ŕī attÄla konteineru
Å Ä«s instrukcijas tiek saglabÄtas failÄ Dockerfile. Dokers to lasa Dockerfile, kad veidojat attÄlu, izpilda Ŕīs instrukcijas un atgriež galÄ«go attÄlu.
KÄ darbojas doka reÄ£istrs?
ReÄ£istrs ir docker attÄlu krÄtuve. Kad attÄls ir izveidots, varat to publicÄt publiskajÄ Docker Hub reÄ£istrÄ vai savÄ personÄ«gajÄ reÄ£istrÄ.
Izmantojot Docker klientu, varat meklÄt jau publicÄtus attÄlus un lejupielÄdÄt tos savÄ doka iekÄrtÄ, lai izveidotu konteinerus.
Docker Hub nodroÅ”ina publiskas un privÄtas attÄlu krÄtuves. AttÄlu meklÄÅ”ana un lejupielÄde no publiskajÄm krÄtuvÄm ir pieejama ikvienam. PrivÄto krÄtuvju saturs netiek iekļauts meklÄÅ”anas rezultÄtos. Un tikai jÅ«s un jÅ«su lietotÄji varat saÅemt Å”os attÄlus un izveidot no tiem konteinerus.
KÄ darbojas konteiners?
Konteiners sastÄv no operÄtÄjsistÄmas, lietotÄja failiem un metadatiem. KÄ zinÄms, katrs konteiners ir izveidots no attÄla. Å is attÄls norÄda dokerim, kas atrodas konteinerÄ, kÄds process ir jÄsÄk, kad konteiners tiek startÄts, un citus konfigurÄcijas datus. Docker attÄls ir tikai lasÄms. Kad docker startÄ konteineru, tas attÄla augÅ”pusÄ izveido lasÄ«Å”anas/rakstÄ«Å”anas slÄni (izmantojot savienojuma failu sistÄmu, kÄ minÄts iepriekÅ”), kurÄ var palaist lietojumprogrammu.
Kas notiek, kad konteiners sÄk darboties?
Vai arÄ« izmantojot programmu docker, vai izmantojot RESTful API, docker klients liek docker dÄmonam palaist konteineru.
$ sudo docker run -i -t ubuntu /bin/bash
ApskatÄ«sim Å”o komandu. Klients tiek palaists, izmantojot komandu docker, ar opciju run, kurÄ teikts, ka tiks palaists jauns konteiners. MinimÄlÄs prasÄ«bas konteinera palaiÅ”anai ir Å”Ädi atribÅ«ti:
kuru attÄlu izmantot konteinera izveidei. MÅ«su gadÄ«jumÄ ubuntu
komanda, kuru vÄlaties palaist, kad konteiners tiek startÄts. MÅ«su gadÄ«jumÄ /bin/bash
Kas notiek zem pÄrsega, kad izpildÄm Å”o komandu?
Docker secÄ«bÄ veic Å”Ädas darbÄ«bas:
lejupielÄdÄ ubuntu attÄlu: Docker pÄrbauda attÄla pieejamÄ«bu ubuntu vietÄjÄ datorÄ un, ja tÄ tur nav, lejupielÄdÄjiet to no Dokera centrmezgls. Ja ir attÄls, tas to izmanto, lai izveidotu konteineru;
izveido konteineru: kad attÄls ir saÅemts, docker to izmanto, lai izveidotu konteineru;
inicializÄ failu sistÄmu un pievieno tikai lasÄ«Å”anas lÄ«meni: konteiners tiek izveidots failu sistÄmÄ un attÄls tiek pievienots tikai lasÄ«Å”anas lÄ«menim;
inicializÄ tÄ«klu/tiltu: izveido tÄ«kla saskarni, kas ļauj dokerim sazinÄties ar resursdatoru;
IP adreses iestatÄ«Å”ana: atrod un uzstÄda adresi;
ApstrÄdÄ un ražo izvadi no jÅ«su lietojumprogrammas: savieno un reÄ£istrÄ jÅ«su lietojumprogrammas standarta ievades, izvades un kļūdu straumi, lai jÅ«s varÄtu izsekot lietojumprogrammas veiktspÄjai.
Tagad jums ir darba konteiners. Varat pÄrvaldÄ«t savu konteineru, mijiedarboties ar savu lietojumprogrammu. Kad nolemjat apturÄt lietojumprogrammu, izdzÄsiet konteineru.
IzmantotÄs tehnoloÄ£ijas
Docker ir rakstÄ«ts Go un izmanto dažus Linux kodola lÄ«dzekļus, lai ieviestu iepriekÅ” minÄto funkcionalitÄti.
VÄrdtelpas
Docker izmanto tehnoloÄ£iju namespaces organizÄt izolÄtas darbvietas, kuras mÄs saucam par konteineriem. Kad mÄs startÄjam konteineru, docker Å”im konteineram izveido nosaukumvietu kopu.
TÄdÄjÄdi tiek izveidots izolÄts slÄnis, kurÄ katrs konteinera aspekts darbojas savÄ nosaukumvietÄ un kam nav piekļuves ÄrÄjai sistÄmai.
Dažu docker izmantoto nosaukumvietu saraksts:
pid: izolÄt procesu;
tÄ«kls: tÄ«kla saskarÅu pÄrvaldÄ«bai;
ipc: lai pÄrvaldÄ«tu IPC resursus. (ICP: InterProccess Communication);
mnt: pÄrvaldÄ«t stiprinÄjuma punktus;
utc: lai izolÄtu kodolu un kontrolÄtu versiju Ä£enerÄÅ”anu (UTC: Unix laika koplietoÅ”anas sistÄma).
Kontroles grupas
Docker izmanto arÄ« tehnoloÄ£iju cgroups vai kontroles grupas. Lietojumprogrammas izolÄtas palaiÅ”anas atslÄga ir nodroÅ”inÄt lietojumprogrammu tikai tos resursus, kurus vÄlaties nodroÅ”inÄt. Tas nodroÅ”ina, ka konteineri bÅ«s labi kaimiÅi. VadÄ«bas grupas ļauj koplietot pieejamos aparatÅ«ras resursus un, ja nepiecieÅ”ams, iestatÄ«t ierobežojumus un ierobežojumus. PiemÄram, ierobežojiet konteinera iespÄjamo atmiÅas apjomu.
SavienÄ«bas failu sistÄma
Union File Sysem vai UnionFS ir failu sistÄma, kas darbojas, veidojot slÄÅus, padarot to ļoti vieglu un Ätru. Docker izmanto UnionFS, lai izveidotu blokus, no kuriem tiek veidots konteiners. Docker var izmantot vairÄkus UnionFS variantus, tostarp: AUFS, btrfs, vfs un DeviceMapper.
Konteineru formÄti
Docker apvieno Å”os komponentus iesaiÅojumÄ, ko mÄs saucam par konteinera formÄtu. Tiek izsaukts noklusÄjuma formÄts libcontainer. Docker atbalsta arÄ« tradicionÄlo konteinera formÄtu operÄtÄjsistÄmÄ Linux, izmantojot LXC. NÄkotnÄ Docker var atbalstÄ«t citus konteineru formÄtus. PiemÄram, integrÄjot ar BSD Jails vai Solaris zonÄm.