Mūsu Docker apmācībā ie­pa­zīs­ti­nām jūs ar Docker vir­tua­li­zā­ci­jas platformu un parādīsim, kā izmantot Docker jūsu Ubuntu 22.04 sistēmā, iz­man­to­jot viegli iz­pil­dā­mus no­rā­dī­ju­mus.

Docker struktūra un funkcijas

„Izveido, izplati un palaidi jebkuru lietotni jebkurā vietā“ – tāds ir Docker devīze. Šī atvērtā koda kon­tei­ne­ru platforma piedāvā elastīgu un resursu ziņā eko­no­mis­ku al­ter­na­tī­vu ap­ara­tū­ras kom­po­nen­tu emu­lā­ci­jai, kas balstās uz vir­tuā­la­jām mašīnām (VM).

Lai gan tra­di­cio­nā­lā ap­ara­tū­ras vir­tua­li­zā­ci­ja balstās uz vairāku viesu sistēmu palaišanu vienā kopējā uzņēmējā sistēmā, Docker lie­to­jum­prog­ram­mas tiek iz­pil­dī­tas kā izolēti procesi tajā pašā sistēmā, iz­man­to­jot kon­tei­ne­rus. To sauc par kon­tei­ne­ru vir­tua­li­zā­ci­ju, ko dēvē arī par ope­rē­tājsis­tē­mas līmeņa vir­tua­li­zā­ci­ju.

Image: Virtual machines and software containers in comparison
While each virtual machine launches its own operating system, Docker con­tai­ners share the core of the host system

Viena no gal­ve­na­jām kon­tei­ne­ru vir­tua­li­zā­ci­jas priekš­ro­cī­bām ir tā, ka lie­to­jum­prog­ram­mas ar at­šķi­rī­gām prasībām var darboties sav­star­pē­ji izolēti, ne­iz­man­to­jot at­se­viš­ķas viesu sistēmas, kas rada papildu slodzi. Turklāt, iz­man­to­jot kon­tei­ne­rus, lie­to­jum­prog­ram­mas var ieviest dažādās plat­for­mās un in­fras­truk­tū­rās, bez ne­pie­cie­ša­mī­bas pie­lā­go­ties uzņēmēj sistēmas ap­ara­tū­ras vai prog­ram­ma­tū­ras kon­fi­gu­rā­ci­jām.

Docker ir po­pu­lā­rā­kais prog­ram­ma­tū­ras projekts, kas lie­to­tā­jiem piedāvā uz kon­tei­ne­riem balstītu vir­tua­li­zā­ci­jas teh­no­lo­ģi­ju. Šī atvērtā koda platforma balstās uz trim pa­ma­te­le­men­tiem. Lai palaistu kon­tei­ne­rus, lie­to­tā­jiem ne­pie­cie­šams tikai Docker dzinējs, kā arī speciāli Docker attēli, kurus var le­ju­pie­lā­dēt no Docker Hub vai izveidot pašiem.

Docker attēli

Līdzīgi kā virtuālās mašīnas, arī Docker kon­tei­ne­ri balstās uz Docker attēliem. Attēls ir tikai lasāms šablons, kas satur visas ins­truk­ci­jas, kas Docker dzinējam ne­pie­cie­ša­mas, lai izveidotu kon­tei­ne­ru. Docker attēlu apraksta kā pārnesamu kon­tei­ne­ra attēlu teksta faila formā, ko sauc arī par Dockerfi­le. Ja sistēmā ir jāpalaiž kon­tei­ners, vispirms tiek ielādēts pakotne ar attiecīgo attēlu, ja vien tā vēl nav pieejama lokāli. Ie­lā­dē­tais attēls nodrošina ne­pie­cie­ša­mo failu sistēmu, ieskaitot visus pa­ra­met­rus darbības laikā. Kon­tei­ne­ru var uzskatīt par attēla dar­bo­jo­šos procesu.

Docker Hub

Docker Hub ir mākonī bāzēts reģistrs prog­ram­ma­tū­ras krājumiem — sava veida bib­lio­tē­ka Docker attēliem. Šis tiešsais­tes pa­kal­po­jums ir sadalīts pub­lis­ka­jā un privātajā sadaļā. Pub­lis­ka­jā sadaļā lie­to­tā­jiem ir iespēja aug­šu­pie­lā­dēt pašu iz­strā­dā­tos attēlus un dalīties ar tiem kopienā. Šeit ir pieejami daudzi oficiāli attēli, ko piedāvā Docker iz­strā­dā­tā­ju komanda un atzīti atvērtā koda projekti. Attēli, kas aug­šu­pie­lā­dē­ti reģistra privātajā sadaļā, nav publiski pieejami, tāpēc tos var dalīties, piemēram, uzņēmuma iekšējā lokā vai ar draugiem un paziņām. Docker Hub ir pieejams vietnē hub.docker.com.

Docker dzinējs

Docker projekta pamatā ir Docker dzinējs. Tas ir atvērtā koda klientu-servera lie­to­jum­prog­ram­ma, kuras pa­šrei­zē­jā versija ir pieejama visiem lie­to­tā­jiem visās iz­pla­tī­tā­ka­jās plat­for­mās.

Docker dzinēja pa­ma­tar­hi­tek­tū­ra sastāv no trim kom­po­nen­tiem: dēmonu ar servera funkcijām, prog­ram­mē­ša­nas saskarnes (API), kas balstās uz REST (Rep­re­sen­ta­tio­nal State Transfer) prog­ram­mē­ša­nas paradigmu, un ope­rē­tājsis­tē­mas termināla (ko­man­drin­das saskarnes, CLI) kā lietotāja saskarnes (klienta).

  • Docker dēmons: Kā Docker dzinēja serveris tiek izmantots dēmonu process. Docker dēmons darbojas uzņēmēj sistēmas fonā un tiek izmantots Docker dzinēja cen­trā­la­jai vadībai. Šī funkcija izveido un pārvalda visus attēlus, kon­tei­ne­rus vai tīklus.
  • REST-API: REST-API nosaka in­ter­fei­su kopumu, kas ļauj citām prog­ram­mām sa­zi­nā­ties ar Docker dēmonu un dot tam no­rā­dī­ju­mus. Viena no šīm prog­ram­mām ir ope­rē­tājsis­tē­mas termināls.
  • Termināls: Kā klienta programmu Docker izmanto ope­rē­tājsis­tē­mas terminālu. Tas, integrēts ar Docker dēmonu caur REST-API, ļauj lie­to­tā­jiem to kontrolēt ar skriptu vai lietotāja ievadi.
Tip

2017. gadā Docker dzinējs tika pārdēvēts par Docker Community Edition (sa­īsi­nā­ju­mā Docker CE), taču ofi­ciā­la­jā do­ku­men­tā­ci­jā un Docker re­po­zi­to­ri­jos gal­ve­no­kārt joprojām tiek lietots vecais nosaukums. Papildus Docker CE pastāv arī Docker En­terpri­se Edition (Docker EE), kam ir dažas papildu funkcijas. Tomēr tas nav bezmaksas un ir vairāk piemērots uz­ņē­mu­miem.

Iz­man­to­jot Docker komandas, lietotāja prog­ram­ma­tū­ras kon­tei­ne­rus var palaist, apturēt un pārvaldīt tieši no termināļa. Ar dēmonu sazinās, iz­man­to­jot komandu docker un tādas ins­truk­ci­jas kā build, pull vai run. Klients un serveris var atrasties vienā sistēmā. Lie­to­tā­jiem ir arī iespēja piekļūt Docker dēmonam citā sistēmā. Atkarībā no izveidotā sa­vie­no­ju­ma veida saziņa starp klientu un serveri notiek, iz­man­to­jot REST-API, UNIX soketus vai tīkla in­ter­fei­su.

Šajā attēlā ir parādīta atsevišķo Docker kom­po­nen­tu mi­jie­dar­bī­ba, iz­man­to­jot pa­raug­ko­man­das docker build, docker pull un docker run:

Image: Schematic representation of the Docker architecture
'The Docker archi­tectu­re is based on the coo­pe­ra­tion of the client (terminal'), serveris (Docker dēmons) un reģistrs (Docker Hub).“

Komanda docker build dod no­rā­dī­ju­mu Docker dēmonam izveidot attēlu (punktu līnija). Tam ir ne­pie­cie­šams at­bil­stošs Dockerfi­le fails. Ja attēlu nevēlas izveidot, bet gan le­ju­pie­lā­dēt no re­po­zi­to­ri­ja Docker Hub, tad tiek izmantota komanda docker pull (pār­trauk­ta līnija). Ja Docker dēmonam ar docker run tiek dots rīkojums palaist kon­tei­ne­ru, fona programma pārbauda, vai at­bil­sto­šais kon­tei­ne­ra attēls ir pieejams lokāli. Ja ir, tad kon­tei­ners tiek palaists (ne­pār­trauk­ta līnija). Ja dēmons nevar atrast attēlu, tas au­to­mā­tis­ki uzsāk le­ju­pie­lā­di no re­po­zi­to­ri­ja.

Darbs ar Docker

Tagad ir pienācis laiks ie­pa­zī­ties ar kon­tei­ne­ru plat­for­mas lie­to­jum­prog­ram­mām. Ja vēl neesat in­sta­lē­jis Docker dzinēju, to var izdarīt, iz­man­to­jot Linux termināli. No­rā­dī­ju­mus par to, kā to izdarīt, varat atrast mūsu rakstā„Docker in­sta­lē­ša­na Ubuntu 22.04”. Tur­pi­nā­ju­mā uzziniet, kā vadīt Docker dzinēju no termināļa, ko Docker Hub var jums piedāvāt un kāpēc Docker kon­tei­ne­ri var radikāli mainīt jūsu darbu ar lie­to­jum­prog­ram­mām.

Kā pārvaldīt Docker dzinēju

Sākot ar versiju 16.04, Ubuntu procesu pār­val­dī­bai izmanto fona programmu systemd(sa­īsi­nā­jums no „system daemon“).Systemd irsākuma process, ko izmanto arī citās Linux dis­tri­bū­ci­jās, piemēram, RHEL, CentOS vai Fedora. Parastisystemd tiek piešķirtsprocesa ID 1. Kā sistēmas pirmais process, šis dēmons ir atbildīgs par visu pārējo procesu sākšanu, uz­rau­dzī­bu un pār­trauk­ša­nu. Ie­priek­šē­jās Ubuntu versijās (14.10 un vecākās) šo funkciju pilda fonaprogramma upstart.

Docker dēmonu var vadīt arī ar systemd palīdzību. Standarta in­sta­lā­ci­jā kon­tei­ne­ru platforma ir kon­fi­gu­rē­ta tā, ka dēmons au­to­mā­tis­ki palaižas sistēmas uz­sāk­ša­nas brīdī. Šo no­klu­sē­ju­ma ie­sta­tī­ju­mu var pielāgot, iz­man­to­jot ko­man­drin­das rīku systemctl.

Iz­man­to­jot *systemctl*, jūs nosūtāt komandas *systemd*, lai vadītu procesu vai no­skaid­ro­tu tā statusu. Šādas komandas sintakse ir šāda:

systemctl [OPTION] [COMMAND]
bash

Dažas komandas attiecas uz kon­krē­tiem resursiem (piemēram, Docker). Systemd ter­mi­no­lo­ģi­jā tos sauc par vienībām. Šajā gadījumā komanda sastāv no at­tie­cī­gās ins­truk­ci­jas un ad­re­sē­ja­mās vienības nosaukuma.

Ja vēlaties aktivizēt (ieslēgt) vai deak­ti­vi­zēt (izslēgt) Docker dēmonu au­to­mā­tis­ko palaišanu, iz­man­to­jiet ko­man­drin­das rīku systemctl ar šādām komandām:

sudo systemctl enable docker
sudo systemctl disable docker
bash

Ko­man­drin­das rīks systemctl ļauj no­skaid­rot vienības statusu:

sudo systemctl status docker
bash

Ja jūsu Ubuntu sistēmā darbojas Docker dzinējs, termināla izvadei vajadzētu iz­ska­tī­ties tā, kā redzams šajā ek­rā­nuz­ņē­mu­mā:

Image: The status query via systemctl shows: The Docker engine is active (running)
Status query via systemctl: The Docker Engine is active (running)

Ja jūsu Docker dzinējs pašlaik ir atspējots, jūs saņemsiet statusa pa­zi­ņo­ju­mu „inactive (dead)“. Šādā gadījumā, lai palaistu kon­tei­ne­rus, jums ir manuāli jāuzsāk Docker dēmons.

Image: The status query via systemctl shows: The Docker engine is inactive (dead)
Status query via systemctl: The Docker engine is inactive (dead)

Ja vēlaties manuāli palaist, apturēt vai pār­star­tēt Docker dzinēju, iz­man­to­jiet vienu no šīm komandām, kas pa­re­dzē­tas sistēmai systemd.

Lai palaistu deak­ti­vi­zē­to dēmonu, iz­man­to­jiet komandu systemctl kopā ar komandu start:

sudo systemctl start docker
bash

Ja ir jāizbeidz Docker dēmonu darbība, iz­man­to­jiet komandu stop:

sudo systemctl stop docker
bash

Dzinēja atkārtota ie­dar­bi­nā­ša­na tiek pie­pra­sī­ta ar komandu restart:

sudo systemctl restart docker
bash

Kā lietot Docker Hub

Ja Docker dzinējs ir kon­tei­ne­ru plat­for­mas sirds, tad Docker Hub ir šī atvērtā koda projekta dvēsele. Tieši šeit pulcējas kopiena. Šajā mākonī bāzētajā reģistrā lietotāji var atrast visu ne­pie­cie­ša­mo, lai piešķirtu dzīvību savai Docker in­sta­lā­ci­jai.

Šis tiešsais­tes pa­kal­po­jums piedāvā dažādus oficiālos re­po­zi­to­ri­jus ar vairāk nekā 100 000 bezmaksas lietotnēm. Lie­to­tā­jiem ir iespēja izveidot attēlu arhīvu un kopīgi izmantot to darba grupās. Papildus pro­fe­sio­nā­la­jam atbalstam , ko sniedz izstrādes komanda, iesācēji šeit var atrast saites uz lietotāju kopienu. GitHub vietnē ir pieejams forums kopienas atbalstam.

Image: The Docker hub: Registration
Create your personal Docker ID for free by re­gis­te­ring / Source: hub.docker.com

Re­ģis­trē­ša­nās Docker Hub vietnē

Re­ģis­trā­ci­ja Docker Hub vietnē ir bezmaksas. Lie­to­tā­jiem ne­pie­cie­ša­ma tikai e-pasta adrese un iz­vē­lē­tais Docker ID. Tas vēlāk kalpo kā per­so­nī­gais re­po­zi­to­ri­ja vārdu telpa un nodrošina lie­to­tā­jiem piekļuvi visiem Docker pa­kal­po­ju­miem. Pašlaik šis pie­dā­vā­jums papildus Docker hub ietver Docker cloud, Docker store un at­se­viš­ķas beta prog­ram­mas. Tas ļauj Docker ID izmantot arī kā pie­teik­ša­nās datus Docker atbalsta centram, kā arī Docker panākumu portālam un Docker forumam.

Re­ģis­trā­ci­jas process sastāv no pieciem posmiem:

  1. Iz­vē­lie­ties savu Docker ID: Pie­teik­ša­nās sākumā iz­vē­lie­ties lie­to­tājvār­du, kas vēlāk tiks izmantots kā jūsu per­so­nī­gais Docker ID.
  2. Ievadiet e-pasta adresi: Ievadiet savu pa­šrei­zē­jo e-pasta adresi. Ņemiet vērā, ka jums būs jā­ap­stip­ri­na re­ģis­trā­ci­ja Docker Hub vietnē, iz­man­to­jot e-pastu.
  3. Iz­vē­lie­ties paroli: Iz­vē­lie­ties slepenu paroli.
  4. Ie­snie­dziet re­ģis­trā­ci­ju: No­klik­šķi­niet uz „Re­ģis­trē­ties”, lai iesniegtu re­ģis­trā­ci­ju. Kad dati būs pilnībā nosūtīti, Docker nosūtīs saiti uz jūsu norādīto e-pasta pastkasti, lai jūs varētu ap­stip­ri­nāt savu e-pasta adresi.
  5. Ap­stip­ri­niet savu e-pasta adresi: Ap­stip­ri­niet savu e-pasta adresi, no­klik­šķi­not uz ap­stip­ri­nā­ju­ma saites.

Pēc re­ģis­trā­ci­jas pār­lūkprog­ram­mā Docker projekta tiešsais­tes pa­kal­po­ju­mi ir pieejami uzreiz. Šeit varat izveidot re­po­zi­to­ri­jus un darba grupas vai izmantot funkciju „Explore”, lai meklētu publiskos resursus Docker Hub vietnē.

Image: Dashboard of the Docker hub
Select and set re­po­si­to­ries and workgroups via the Docker hub dashboard / Source: hub.docker.com

Varat re­ģis­trē­ties arī tieši ope­rē­tājsis­tē­mas terminālī, iz­man­to­jot komandu docker login. Sīkāks komandas apraksts ir atrodams Docker do­ku­men­tā­ci­jā.

Principā Docker Hub ir pieejams arī lie­to­tā­jiem, kuriem nav konta vai Docker ID. Tomēr šādā gadījumā var le­ju­pie­lā­dēt tikai attēlus no pub­lis­ka­jiem re­po­zi­to­ri­jiem. Savu attēlu aug­šu­pie­lā­de (push) bez Docker ID nav iespējama.

Iz­vei­do­jiet re­po­zi­to­ri­jus Docker Hub

Bezmaksas „Docker Hub“ kontā ir iekļauts viens privāts re­po­zi­to­rijs, kā arī ir iespējams izveidot ne­ie­ro­be­žo­tu skaitu publisku re­po­zi­to­ri­ju. Ja jums ir ne­pie­cie­šams lielāks privāto re­po­zi­to­ri­ju skaits, tos var atbloķēt, veicot maksas pa­kal­po­ju­ma uz­la­bo­ju­mu.

Lai izveidotu re­po­zi­to­ri­ju, rī­ko­jie­ties šādi:

  1. Iz­vē­lie­ties vārdu telpu: Jau­niz­vei­do­tie re­po­zi­to­ri­ji tiek au­to­mā­tis­ki pie­vie­no­ti jūsu Docker ID vārdu telpai. Jums ir arī iespēja ievadīt tās or­ga­ni­zā­ci­jas ID, kuras loceklis esat.
  2. Nosauciet re­po­zi­to­ri­ju: Ievadiet nosaukumu jau­niz­vei­do­ta­jam re­po­zi­to­ri­jam.
  3. Pie­vie­no­jiet aprakstu: pie­vie­no­jiet īsu aprakstu savam re­po­zi­to­ri­jam.
  4. Iestatiet redzamību: izlemiet, vai re­po­zi­to­rijs būs publiski redzams (public) vai pieejams tikai jums vai jūsu or­ga­ni­zā­ci­jai (private).

Ap­stip­ri­niet savus ierakstus, no­klik­šķi­not uz „Izveidot“.

Image: The Docker hub: Input screen for creating a repository
Your re­po­si­to­ries are au­to­ma­ti­cally created in the namespace of your Docker ID / Source: hub.docker.com

Iz­vei­do­jiet komandas un or­ga­ni­zā­ci­jas

Iz­man­to­jot šo platformu, Docker piedāvā mākonī bāzētu vidi, kurā pa­šiz­vei­do­tos attēlus var cen­tra­li­zē­ti pārvaldīt un ērti koplietot ar darba grupām. Docker ter­mi­no­lo­ģi­jā tās sauc par or­ga­ni­zā­ci­jām. Tāpat kā lietotāju kontiem, arī or­ga­ni­zā­ci­jām tiek piešķirti in­di­vi­duā­li iden­ti­fi­ka­to­ri, ar kuru palīdzību var aug­šu­pie­lā­dēt un le­ju­pie­lā­dēt attēlus. Tiesības un lomas or­ga­ni­zā­ci­jā var piešķirt, iz­man­to­jot komandas. Piemēram, lie­to­tā­jiem, kas pieder pie komandas „Owners”, ir tiesības izveidot privātus vai publiskus re­po­zi­to­ri­jus un piešķirt piekļuves tiesības.

Darba grupas var izveidot un pārvaldīt arī tieši caur vadības paneli. Papildu in­for­mā­ci­ja par or­ga­ni­zā­ci­jām un komandām ir pieejama Docker do­ku­men­tā­ci­jā.

Darbs ar attēliem un kon­tei­ne­riem

Kā galvenais oficiālo Docker resursu avots, Docker Hub ir mūsu sā­kum­punkts šajā ievadā par attēlu un kon­tei­ne­ru apstrādi. Iz­strā­dā­tā­ju komanda ir no­dro­ši­nā­ju­si de­mons­trā­ci­jas attēlu „whalesay“, kas kalpos par pamatu turp­mā­ka­jai Docker apmācībai.

Le­ju­pie­lā­dēt Docker attēlus

Attēlu „whalesay“ var atrast, ap­mek­lē­jot vietni „Docker Hub“ un ievadot vārdu „whalesay“ mek­lē­ša­nas joslā blakus „Docker“ logotipam.

Image: The search function in Docker hub
Search the Docker hub using the search bar or the ‘Explore’ button / Source: hub.docker.com

Mek­lē­ša­nas re­zul­tā­tos no­klik­šķi­niet uz resursa ar nosaukumu „docker/whalesay“, lai atvērtu šī attēla publisko re­po­zi­to­ri­ju.

Docker re­po­zi­to­ri­ji vienmēr ir veidoti pēc viena un tā paša parauga. Lapas galvenajā daļā lietotāji redz attēla nosaukumu, re­po­zi­to­ri­ja ka­te­go­ri­ju un pēdējās aug­šu­pie­lā­des laiku (pēdējā reize, kad attēls tika pie­vie­nots).

Image: Web view of a Docker repository
In the re­po­si­tory, users generally find all in­for­ma­tion that is needed to use an image / Source: hub.docker.com

Katrā Docker re­po­zi­to­ri­jā ir pieejami arī šādi in­for­mā­ci­jas logi:

  1. Apraksts: De­ta­li­zēts apraksts, kurā parasti iekļautas lie­to­ša­nas ins­truk­ci­jas
  2. Docker pull komanda: Ko­man­drin­das direktīva, ko izmanto, lai le­ju­pie­lā­dē­tu attēlu no re­po­zi­to­ri­ja (pull)
  3. Īpašnieks: In­for­mā­ci­ja par re­po­zi­to­ri­ja iz­vei­do­tā­ju
  4. Komentāri: Komentāru sadaļa lapas beigās

Re­po­zi­to­ri­ja in­for­mā­ci­jas laukos redzams, ka „whalesay“ ir atvērtā koda Perl skripta „cowsay“ mo­di­fi­kā­ci­ja. Šī programma, ko 1999. gadā iz­strā­dā­ja Tonijs Monro, ģenerē ASCII grafiku govs formā, kas kopā ar ziņojumu parādās lietotāja terminālī.

Lai le­ju­pie­lā­dē­tu docker/whalesay, iz­man­to­jiet komandu docker pull:

docker pull [OPTIONS] NAME [:TAG|@DIGEST]
bash

Komanda docker pull liek dēmonam ielādēt attēlu no re­po­zi­to­ri­ja. Attēla nosaukumu (NAME) norādot, jūs pre­ci­zē­jat, par kuru attēlu ir runa. Jūs varat arī norādīt Docker, kā jāizpilda vēlamā komanda (OPTIONS). Papildu in­for­mā­ci­ja ietver tagus (:TAG) un in­di­vi­duā­los iden­ti­fi­kā­ci­jas numurus (@DIGEST), kas ļauj le­ju­pie­lā­dēt konkrētu attēla versiju.

Docker/whalesay attēla vietējo kopiju var iegūt, iz­man­to­jot šādu komandu:

docker pull docker/whalesay
bash

Vispār šo soli var izlaist. Ja vēlaties palaist kon­tei­ne­ru, Docker dēmons au­to­mā­tis­ki le­ju­pie­lā­dē attēlus no re­po­zi­to­ri­ja, kurus tas nevar atrast vietējā sistēmā.

Palaižiet Docker attēlus kā kon­tei­ne­rus

Lai palaistu Docker attēlu, iz­man­to­jiet komandu docker run:

docker run [OPTIONS] IMAGE [:TAG|@DIGEST] [CMD] [ARG...]
bash

Vienīgā obligātā daļa komandā docker run ir vēlamā Docker attēla nosaukums. Taču, palaižot kon­tei­ne­ru, ir iespēja definēt arī papildu opcijas, TAG un DIGEST. Turklāt komandu docker run var apvienot ar citām komandām, kuras tiek iz­pil­dī­tas, tiklīdz kon­tei­ners tiek palaists. Šajā gadījumā CMD (COMMAND, ko definē attēla iz­vei­do­tājs un kas tiek izpildīts au­to­mā­tis­ki, kad tiek palaists kon­tei­ners) tiek pār­rak­stīts. Citas papildu kon­fi­gu­rā­ci­jas var definēt, iz­man­to­jot papildu ar­gu­men­tus (ARG…). Tas ļauj, piemēram, pievienot lie­to­tā­jus vai pārnest vides mainīgos.

Iz­man­to­jiet ko­man­drin­das direktīvu

docker run docker/whalesay cowsay boo
bash

lai le­ju­pie­lā­dē­tu esošo Perl skriptu kā attēlu un palaistu to kon­tei­ne­rā. Jūs redzēsiet, ka „whalesay“ ie­vē­ro­ja­mi atšķiras no sākotnējā skripta.

Image: Terminal output of the container docker/whalesay: The whale says ‘boo’
If docker/whalesay is run with the standard command, the Docker whale is limited to a short ‘boo’

Ja tiek palaists attēls „docker/whalesay“, skripts izvada ASCII grafiku vaļa formā, kā arī teksta ziņojumu „boo“, kas tiek nodots ar komandu „cowsay“ terminālī.

Tāpat kā iz­mē­ģi­nā­ju­ma režīmā, dēmons vispirms meklē vajadzīgo attēlu vietējā failu di­rek­to­ri­jā. Tā kā nav paketes ar tādu pašu nosaukumu, tiek uzsākta le­ju­pie­lā­de no Docker re­po­zi­to­ri­ja. Pēc tam dēmons palaista mo­di­fi­cē­to „cowsay“ programmu. Ja tā ir veiksmīgi izpildīta, kon­tei­ners tiek au­to­mā­tis­ki pār­traukts.

Tāpat kā „cowsay“, arī Docker rīks „whalesay“ piedāvā iespēju ie­jauk­ties prog­ram­mas darbības secībā, lai ietekmētu terminālī parādīto tekstu. Iz­mē­ģi­niet šo funkciju, aizstājot komandas izvades tekstā vārdu „boo“ ar jebkuru teksta virkni vai, piemēram, ar kādu neveiklu joku par vaļiem.

sudo docker run docker/whalesay cowsay What did the shark say to the whale? What are you blubbering about?
bash
Image: Terminal output of the container docker/whalesay: A whale with an individual message
Make your Docker whale say whatever you want by placing words in his speech bubble

Parādīt visus Docker attēlus vietējā sistēmā

Ja neesat pār­lie­ci­nāts, vai konkrēto attēlu jau esat le­ju­pie­lā­dē­jis, varat apskatīt pārskatu par visiem attēliem savā lokālajā sistēmā. Iz­man­to­jiet šādu ko­man­drin­das komandu:

sudo docker image
bash

Komanda docker images (vai docker image ls) parāda visus vietējos attēlus, norādot to izmēru, at­slēg­vār­du un attēla iden­ti­fi­ka­to­ru.

Image: Overview of all images on the local system
The overview displays the images hello-world and docker/whalesay

Ja palaidāt kon­tei­ne­ru, tā pa­ma­tat­tēls tiek le­ju­pie­lā­dēts kā kopija no re­po­zi­to­ri­ja un pastāvīgi saglabāts jūsu datorā. Tas ļauj ietaupīt laiku, ja vēlaties piekļūt attēlam vēlāk. Jauna le­ju­pie­lā­de tiek uzsākta tikai tad, ja mainās attēla avots, piemēram, ja re­po­zi­to­ri­jā ir pieejama jaunāka versija.

Rādīt visus kon­tei­ne­rus vietējā sistēmā

Ja vēlaties parādīt pārskatu par visiem kon­tei­ne­riem, kas pašlaik darbojas jūsu sistēmā vai ir dar­bo­ju­šies agrāk, iz­man­to­jiet ko­man­drin­das direktīvu docker ps kopā ar opciju --all (sa­īsi­nā­ju­mā: -a):

sudo docker ps -a
bash
Image: Overview of all containers on the local system
The overview shows all con­tai­ners that have been launched on the Docker engine

Termināļa izvades dati ietver tādu in­for­mā­ci­ju kā attiecīgā kon­tei­ne­ra ID, pa­ma­tat­tēls, komanda, kas tika izpildīta kon­tei­ne­ra pa­lai­ša­nas brīdī, kon­tei­ne­ra pa­lai­ša­nas laiks un statuss.

Ja vēlaties parādīt tikai tos kon­tei­ne­rus, kas pašlaik darbojas jūsu sistēmā, iz­man­to­jiet ko­man­drin­das komandu docker ps bez jebkādām citām opcijām:

sudo docker ps
bash

Tomēr pašlaik jūsu sistēmā ne­va­ja­dzē­tu būt nevienam dar­bo­jo­šam kon­tei­ne­ram.

Izveidot Docker attēlus

Mūsu Docker apmācībā jau tika parādīts, kā atrast attēlus Docker Hub vietnē, tos le­ju­pie­lā­dēt un palaist jebkurā sistēmā, kurā ir instalēts Docker dzinējs. Taču, iz­man­to­jot Docker, jums būs pieejams ne tikai reģistrā esošais plašais lietotņu klāsts. Platforma piedāvā arī daudz­vei­dī­gas iespējas, kā izveidot savus attēlus un dalīties ar tiem ar citiem iz­strā­dā­tā­jiem.

Šīs Docker apmācības ie­vadno­da­ļās jūs jau uzzinājāt, ka katrs Docker attēls balstās uz Dockerfi­le. Dockerfi­le var uzskatīt par sava veida attēlu izveides veidni. Tie ir vienkārši teksta faili, kuros ir iekļautas visas ins­truk­ci­jas, kas Docker ne­pie­cie­ša­mas attēla izveidei. Turp­mā­ka­jos soļos jūs ie­mā­cī­sie­ties, kā uzrakstīt šāda veida Dockerfi­le un norādīt Docker, lai tas to izmantotu kā pamatu jūsu paša attēla izveidei.

  1. Izveidot jaunu di­rek­to­ri­ju: Docker iz­strā­dā­tā­ju komanda iesaka katram Dockerfi­le failam izveidot jaunu di­rek­to­ri­ju. Linux vidē di­rek­to­ri­jas var viegli izveidot terminālī. Lai izveidotu di­rek­to­ri­ju ar nosaukumu mydocker­build, iz­man­to­jiet šādu komandu:
mkdir mydockerbuild
bash
Image: Ubuntu terminal: The command mkdir
Create new di­rec­to­ries with the command mkdir
  1. Pār­vie­to­jie­ties jaunajā di­rek­to­ri­jā: iz­man­to­jiet komandu cd, lai pār­vie­to­tos jau­niz­vei­do­ta­jā darba di­rek­to­ri­jā.
cd mydockerbuild
bash
Image: Ubuntu terminal: The command cd
With the help of the cd command, switch to another working directory
  1. Iz­vei­do­jiet jaunu teksta failu: Ubuntu vidē teksta failus var viegli izveidot arī, iz­man­to­jot termināli. Lai to izdarītu, iz­man­to­jiet tādu teksta redaktoru kā Nano vai Vim. Iz­vei­do­jiet teksta failu ar nosaukumu Dockerfi­le di­rek­to­ri­jā mydocker­build.
nano Dockerfile
bash
Image: Ubuntu terminal: Create text files with Nano
The text editor Nano is prein­stal­led on all Ubuntu versions
  1. Iz­vei­do­jiet Dockerfi­le: Jau­niz­vei­do­tais teksta fails kalpo kā izstrādes plāns jūsu pa­šiz­vei­do­ta­jam attēlam. Tā vietā, lai attēlu prog­ram­mē­tu no nulles, šajā Docker apmācībā kā paraugu iz­man­to­sim de­mons­trā­ci­jas attēlu docker/whalesay. To iekļauj, iz­man­to­jot komandu FROM jūsu Dockerfi­le failā. Lai norādītu uz attēla jaunāko versiju, iz­man­to­jiet tagu :latest.
FROM docker/whalesay:latest

Līdz šim programma „docker/whalesay“ darbojās tā, ka jūs tai „ielikāt vārdus mutē“. Terminālī tiek parādīts tieši tas teksts, ko jūs ievadījāt, kopā ar komandu kon­tei­ne­ra pa­lai­ša­nai. Taču būtu daudz in­te­re­san­tāk, ja skripts au­to­mā­tis­ki ģenerētu jaunu izvades tekstu. To var izdarīt, piemēram, iz­man­to­jot programmu „fortunes“, kas ir pieejama katrā Linux sistēmā. Prog­ram­mas fortunes galvenā funkcija ir ģenerēt laimes cepumu teicienus un hu­mo­ris­tis­kus aforismus. Iz­man­to­jiet šādu komandu, lai at­jau­ni­nā­tu savu pa­šrei­zē­jo vietējo pakotņu indeksu un instalētu programmu fortunes:

RUN apt-get -y update && apt-get install -y fortunes

Tad de­fi­nē­jiet CMD komandu. Tā tiek izpildīta pēc RUN komandas, ja vien tā nav pār­rak­stī­ta ar komandu call (docker run image CMD). Iz­man­to­jiet šādu komandu, lai palaistu programmu fortunes ar opciju -a („Iz­vē­lē­ties no visām datu bāzēm”) un terminālī parādītu izvadi, iz­man­to­jot programmu cowsay:

CMD /usr/games/fortune -a | cowsay

Jūsu Dockerfi­le failam jā­iz­ska­tās šādi:

FROM docker/whalesay:latest
RUN apt-get -y update && apt-get install -y fortunes
CMD /usr/games/fortune -a | cowsay

Piezīme: Komandas Dockerfi­le failā vienmēr tiek rakstītas ar vienotu atstarpi un vienmēr sākas ar at­slēg­vār­du. Sintakse neņem vērā lielos un mazos burtus, tāpēc nav nozīmes, vai rakstāt ar lielajiem vai mazajiem burtiem. Tomēr ir ieviesta vienota at­slēg­vār­du rak­stī­ša­na ar lielajiem burtiem.

Image: The text editor Nano in the Ubuntu terminal
Control the text editor Nano via the key com­bi­na­tions given in the footer
  1. Teksta faila sa­gla­bā­ša­na: Sa­gla­bā­jiet savu ierakstu. Ja iz­man­to­jat redaktoru Nano, sa­gla­bā­jiet to, nospiežot taustiņu kom­bi­nā­ci­ju [CTRL] + [O] un ap­stip­ri­niet ar [ENTER]. Nano parādīs ziņojumu, ka iz­vē­lē­ta­jā failā ir ie­rak­stī­tas trīs rindas. Aizveriet teksta redaktoru, nospiežot taustiņu kom­bi­nā­ci­ju [CTRL] + [X].
  2. Iz­vei­do­jiet attēlu kā Dockerfi­le: Lai izveidotu attēlu no Dockerfi­le, vispirms atveriet di­rek­to­ri­ju, kurā atrodas teksta fails. Sāciet attēla izveidi ar ko­man­drin­das direktīvu docker build. Ja vēlaties attēlam piešķirt in­di­vi­duā­lu nosaukumu vai tagu, iz­man­to­jiet opciju -t, kam seko vēlamā nosaukuma un tagu kom­bi­nā­ci­ja. Standarta formāts ir name:tag.

Šajā piemērā ir jāizveido attēls ar nosaukumu docker-whale:

docker build -t docker-whale .
bash

Pēdējais teikums norāda, ka pamatā esošais Dockerfi­le atrodas iz­vē­lē­ta­jā di­rek­to­ri­jā. Jums ir arī iespēja norādīt avota failu ceļu vai URL.

Vei­do­ša­nas process sākas, tiklīdz komanda tiek ap­stip­ri­nā­ta, nospiežot [ENTER]. Vispirms Docker dēmons pārbauda, vai tam ir visi faili, kas ne­pie­cie­ša­mi attēla izveidei. Docker ter­mi­no­lo­ģi­jā to apzīmē ar terminu „konteksts”.

Tad attēls „docker/whalesay “ ar tagu :latest atrodas:

Ja attēla izveidei ne­pie­cie­ša­mais konteksts jau ir pilnībā pieejams, tad Docker dēmons pagaidu kon­tei­ne­rā palaista attēla veidni, kas pie­vie­no­ta ar komandu FROM, un pāriet uz nākamo komandu Dockerfi­le failā. Šajā piemērā tā ir komanda RUN, kas izraisa prog­ram­mas „fortunes“ in­sta­lē­ša­nu.

Pēc katra attēla izveides posma pa­beig­ša­nas Docker piešķir iden­ti­fi­ka­to­ru at­tie­cī­ga­jam slānim, kas izveidots šajā posmā. Tas nozīmē, ka katra rinda pamatā esošajā Dockerfi­le failā atbilst slānim attēlā, kas uz tā balstās.

Kad komanda RUN ir izpildīta, Docker dēmons aptur tai izveidoto kon­tei­ne­ru, to izdzēš un sāk jaunu pagaidu kon­tei­ne­ru CMD komandas slānim. Izveides procesa beigās arī šis pagaidu kon­tei­ners tiek apturēts un izdzēsts. Docker parāda jaunā attēla iden­ti­fi­ka­to­ru:

Successfully built a8f2048c9ab8
Image: Ubuntu terminal: Status message during image creation
Docker images are created in multiple layers

Jūsu tikko izveidoto attēlu var atrast ar nosaukumu „docker-whale” jūsu lokāli saglabāto attēlu pārskatā.

sudo docker images
bash
Image: Ubuntu terminal: Overview of all images
The newly created image in the image overview

Lai palaistu kon­tei­ne­ru no tikko izveidotā attēla, iz­man­to­jiet ko­man­drin­das komandu sudo docker run kopā ar attēla nosaukumu:

sudo docker run docker-whale
bash

Ja attēls ir pareizi izveidots, iz­man­to­jot Dockerfi­le, jūsu vaļam tagad vajadzētu iedvesmot jūs ar vairāk vai mazāk gudriem vārdiem. Piezīme: Katru reizi, kad pār­star­tē­jat kon­tei­ne­ru, tiek ģenerēta jauna frāze.

Image: Container based on docker-whale: Text output in the terminal
Thanks to fortunes, the ASCII whale now provides witty or wise phrases

Marķējiet Docker attēlus un aug­šu­pie­lā­dē­jiet tos Docker Hub

Ja vēlaties aug­šu­pie­lā­dēt savu pielāgoto „docker-whale“ attēlu centrā un padarīt to pieejamu kopienai vai darba grupai, vispirms tas ir jā­sa­sais­ta ar tāda paša nosaukuma re­po­zi­to­ri­ju savā per­so­nī­ga­jā vārdu telpā. Docker ter­mi­no­lo­ģi­jā šo darbību sauc par marķēšanu.

Lai publicētu attēlu Docker Hub vietnē, rī­ko­jie­ties šādi:

  1. Iz­vei­do­jiet re­po­zi­to­ri­ju: Pie­sa­kie­ties Docker Hub vietnē, iz­man­to­jot savu Docker ID un personīgo paroli, un iz­vei­do­jiet publisku re­po­zi­to­ri­ju ar nosaukumu docker-whale.
Image: The Docker hub: Entry form for creating a repository
Create a re­po­si­tory for your custom image / Source: hub.docker.com
  1. Nosakiet attēla iden­ti­fi­ka­to­ru: Nosakiet jūsu pielāgotā attēla „docker-whale“ iden­ti­fi­ka­to­ru, iz­man­to­jot ko­man­drin­das komandu docker images.
Image: Overview of all local images in the Ubuntu terminal
The command docker images lists all images that are saved on your system

Mūsu gadījumā attēla ID ir a8f2048c9ab8. Tas mums būs ne­pie­cie­šams, lai nākamajā solī pie­vie­no­tu atzīmes.

  1. Pie­vie­no­jiet tēlu: Pie­vie­no­jiet tēlu „docker-whale”, iz­man­to­jot ko­man­drin­das programmu docker tag, kā norādīts turpmāk:
sudo docker tag [Image-ID][Docker-ID]/[Image-Name]:[TAG]
bash

Šajā piemērā ko­man­drin­das norāde mar­ķē­ša­nai ir šāda:

sudo docker tag a8f2048c9ab8 [Namespace]/docker-whale:latest
bash

Iz­man­to­jot docker images pārskatu, vari pārbaudīt, vai attēls ir pareizi atzīmēts. Re­po­zi­to­ri­ja nosaukumā tagad būtu jābūt iekļautam tavam Docker ID.

Image: Ubuntu terminal: Image overview before and after tagging
Link images with your Docker ID using the command docker tag
  1. Attēla aug­šu­pie­lā­de: Lai aug­šu­pie­lā­dē­tu attēlu, vispirms ir jā­pie­sa­kās Docker Hub vietnē. To var izdarīt, iz­man­to­jot komandu docker login.
sudo docker login
bash

Tad termināls lūgs ievadīt lie­to­tājvār­du (Docker ID) un paroli.

Image: Log in to the Docker hub via the Ubuntu terminal
Before you can upload an image to the Docker hub, you first need to log in

Ja pie­teik­ša­nās izdevās, iz­man­to­jiet ko­man­drin­das komandu docker push, lai aug­šu­pie­lā­dē­tu savu attēlu jau­niz­vei­do­ta­jā re­po­zi­to­ri­jā.

sudo docker push [Namespace]/docker-whale
bash

Aug­šu­pie­lā­des process ilgs tikai dažas sekundes. Pa­šrei­zē­jais statuss tiek parādīts terminālī.

Image: Ubuntu terminal: Status message of the image upload
After uploading, the image is available under the set tag latest in the Docker hub

Pie­sa­kie­ties Docker Hub vietnē, iz­man­to­jot pārlūku, lai apskatītu aug­šu­pie­lā­dē­to attēlu.

Image: Docker hub: The repository [Namespace]/docker-whale in the detailed view
The latest update of your re­po­si­tory is shown in the detailed view / Source: hub.docker.com

Ja vēlaties aug­šu­pie­lā­dēt vairāk nekā vienu attēlu vienā re­po­zi­to­ri­jā, iz­man­to­jiet dažādas at­slēg­vār­dus, lai piedāvātu attēlus dažādās versijās. Piemēram:

[Namespace]/docker-whale:latest
[Namespace]/docker-whale:version1
[Namespace]/docker-whale:version2

Pārskatu par dažādajām attēla versijām var atrast Docker Hub re­po­zi­to­ri­jā cilnē „Tags”.

Image: Docker hub: The ‘Tags’ tab
In the ‘Tags’ tab, you’ll find all versions of an image / Source: hub.docker.com

Tomēr dažādu projektu attēli būtu jāievieto at­se­viš­ķās krātuvēs.

Ja aug­šu­pie­lā­de ir iz­de­vu­sies, jūsu pie­lā­go­tais attēls tagad būs pieejams pub­lis­ka­jā re­po­zi­to­ri­jā visiem Docker lie­to­tā­jiem visā pasaulē.

  1. Pārbaudes darbs: Pār­bau­diet, vai aug­šu­pie­lā­de ir iz­de­vu­sies, mēģinot le­ju­pie­lā­dēt attēlu.

Ņemiet vērā, ka, lai le­ju­pie­lā­dē­tu jaunu kopiju ar to pašu tagu, vispirms ir jādzēš attēla vietējā versija. Pretējā gadījumā Docker ziņos, ka vēlamais attēls jau pastāv pa­šrei­zē­jā versijā.

Image: The Image is up to date
If an image exists locally, the pull command is cancelled

Lai dzēstu vietējo Docker attēlu, iz­man­to­jiet ko­man­drin­das komandu docker rmi kopā ar attiecīgo attēla iden­ti­fi­ka­to­ru. To, kā parasti, nosaka, iz­man­to­jot docker images. Ja Docker reģistrē konfliktu, piemēram, tāpēc, ka attēla iden­ti­fi­ka­tors tiek izmantots vairākos re­po­zi­to­ri­jos vai tiek izmantots kon­tei­ne­rā, at­kār­to­jiet komandu ar opciju --force (saīsināti –f ), lai piespiedu kārtā veiktu dzēšanu.

sudo docker rmi -f a8f2048c9ab8
bash
Image: Command docker rmi in combination with the option -f (force)
Use the command docker rmi in com­bi­na­tion with the option -f to force a deletion

Atkal parādīt visu vietējo attēlu pārskatu:

sudo docker Images
bash

Dzēstie elementi vairs nedrīkst pa­rā­dī­ties termināļa izvades logā. Tagad iz­man­to­jiet re­po­zi­to­ri­jā norādīto komandu „pull“, lai le­ju­pie­lā­dē­tu jaunu attēla kopiju no Docker Hub.

sudo docker pull [Namespace]/docker-whale
bash
Image: Ubuntu terminal: Download from the Docker hub
The pre­viously published image is successfully downloa­ded

Papildu tēmas un apmācības par Docker

Docker pasaule ir plaša, un laika gaitā no Docker rīkiem ir iz­vei­do­ju­sies dinamiska eko­sis­tē­ma. Docker ir īpaši noderīgs sistēmu ad­mi­nis­tra­to­riem, it īpaši, ja viņi vien­lai­kus pārvalda sa­rež­ģī­tas lie­to­jum­prog­ram­mas ar vairākiem kon­tei­ne­riem dažādās sistēmās. Docker piedāvā dažādas funkcijas šādu klasteru koor­di­nē­ša­nai. Vairāk in­for­mā­ci­jas par to varat atrast mūsu rakstā par Docker koor­di­nē­ša­nu ar Swarm un Compose.

Di­gi­tā­la­jā ceļvedī ir pieejami papildu apmācību materiāli par darbu ar Docker:

  • Docker re­po­zi­to­ri­ja kon­fi­gu­rē­ša­na
  • Docker kon­tei­ne­ru apjomi
  • Docker: dublējums un at­jau­no­ša­na
  • Docker in­sta­lē­ša­na un palaide Linux serverī
  • Docker Compose apmācība

Docker ir piemērots dažādiem lie­to­ša­nas sce­nā­ri­jiem. Di­gi­tā­la­jā ceļvedī varat atrast šādus apmācību ma­te­riā­lus:

Docker ne vienmēr ir labākā izvēle visām lie­to­jum­prog­ram­mām. Vienā no mūsu rakstiem ir ap­rak­stī­tas po­pu­lā­rā­kās Docker al­ter­na­tī­vas. Turklāt mums ir pieejami daudzi raksti, kuros Docker tiek sa­lī­dzi­nāts ar citām plat­for­mām:

  • Ku­ber­ne­tes pret Docker
  • Openshift pret Docker
  • Podman pret Docker
Go to Main Menu