Šiame „Docker“ vadove su­pa­žin­din­si­me jus su „Docker“ vir­tu­ali­za­ci­jos platforma ir, rem­da­mie­si lengvai su­pran­ta­mais nu­ro­dy­mais, pa­ro­dy­si­me, kaip naudoti „Docker“ jūsų „Ubuntu 22.04“ sistemoje.

„Docker“ struktūra ir savybės

„Sukurk, išleisk ir paleisk bet kokią programą bet kur“ – toks yra „Docker“ šūkis. Ši atvirojo kodo kon­t­ei­ne­rių platforma siūlo lanksčią, mažai išteklių rei­ka­lau­jan­čią al­ter­na­ty­vą apa­ra­ti­nės įrangos kom­po­nen­tų emu­lia­ci­jai, grin­džia­mai vir­tu­a­lio­sio­mis mašinomis (VM).

Nors tradicinė apa­ra­ti­nės įrangos vir­tu­ali­za­ci­ja grin­džia­ma kelių svečių sistemų paleidimu bendroje pag­rin­di­nė­je sistemoje, „Docker“ programos naudojant kon­t­ei­ne­rius vykdomos kaip izoliuoti procesai toje pačioje sistemoje. Tai vadinama kon­t­ei­ne­rių pagrindu vei­kian­čia vir­tu­ali­za­ci­ja, dar žinoma kaip ope­ra­ci­nės sistemos lygio vir­tu­ali­za­ci­ja.

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

Vienas di­džiau­sių kon­t­ei­ne­rių pagrindu vei­kian­čios vir­tu­ali­za­ci­jos privalumų yra tai, kad skir­tin­gus rei­ka­la­vi­mus ke­lian­čios programos gali veikti viena nuo kitos izo­liuo­tai, be papildomų išlaidų, susijusių su atskira svečio sistema. Be to, naudojant kon­t­ei­ne­rius, programas galima diegti įvairiose plat­for­mo­se ir skir­tin­go­se inf­rastruk­tū­ro­se, ne­rei­ka­lau­jant jų pri­tai­ky­ti prie pri­iman­čio­sios sistemos apa­ra­ti­nės ar prog­ra­mi­nės įrangos kon­fi­gū­ra­ci­jų.

„Docker“ yra po­pu­lia­riau­sias prog­ra­mi­nės įrangos projektas, su­tei­kian­tis var­to­to­jams kon­t­ei­ne­rių pagrindu vei­kian­čią vir­tu­ali­za­ci­jos tech­no­lo­gi­ją. Ši atvirojo kodo platforma remiasi trimis pag­rin­di­niais kom­po­nen­tais. Norėdami paleisti kon­t­ei­ne­rius, var­to­to­jams reikia tik „Docker“ variklio bei specialių „Docker“ vaizdų, kuriuos galima at­si­siųs­ti iš „Docker Hub“ arba sukurti patiems.

„Docker“ atvaizdai

Panašiai kaip ir vir­tu­a­lio­sios mašinos, „Docker“ kon­t­ei­ne­riai yra pagrįsti „Docker“ at­vaiz­dais. Atvaizdas – tai tik skaitymo režimu vei­kian­tis šablonas, kuriame yra visos inst­ruk­ci­jos, rei­ka­lin­gos „Docker“ varikliui kon­t­ei­ne­riui sukurti. „Docker“ atvaizdas api­bū­di­na­mas kaip per­ke­lia­mas kon­t­ei­ne­rio atvaizdas tekstinio failo forma, dar vadinamas „Doc­ker­fi­le“. Jei kon­t­ei­ne­ris turi būti paleistas sistemoje, pir­miau­sia įkeliama pakuotė su ati­tin­ka­mu atvaizdu, jei jo dar nėra vie­ti­nia­me diske. Įkeltas atvaizdas suteikia reikiamą failų sistemą, įskaitant visus vykdymo pa­ra­met­rus. Kon­t­ei­ne­rį galima laikyti atvaizdo vykdomu procesu.

„Docker Hub“

„Docker Hub“ – tai debesų pagrindu vei­kian­tis prog­ra­mi­nės įrangos saugyklų registras, t. y. „Docker“ vaizdų bi­b­lio­te­ka. Ši in­ter­ne­ti­nė paslauga su­skirs­ty­ta į viešąją ir pri­va­čią­ją sekcijas. Viešojoje sekcijoje var­to­to­jai gali įkelti savo sukurtus vaizdus ir dalytis jais su bend­ruo­me­ne. Čia galima rasti daugybę oficialių vaizdų, kuriuos pateikia „Docker“ kūrėjų komanda ir pri­pa­žin­ti atvirojo kodo projektai. Į registro privačią sekciją įkelti atvaizdai nėra viešai prieinami, todėl jais galima dalytis, pa­vyz­džiui, įmonės viduje arba su draugais ar pa­žįs­ta­mais. „Docker Hub“ galima pasiekti adresu hub.docker.com.

„Docker“ variklis

Docker projekto šerdis – tai „Docker“ variklis. Tai atvirojo kodo klientų-serverių programa, kurios naujausią versiją gali naudoti visi var­to­to­jai visose po­pu­lia­rio­se plat­for­mo­se.

Pag­rin­di­nė „Docker“ variklio ar­chi­tek­tū­ra susideda iš trijų kom­po­nen­tų: demono, at­lie­kan­čio serverio funkcijas, prog­ra­ma­vi­mo sąsajos (API), pagrįstos prog­ra­ma­vi­mo paradigma REST (Rep­re­sen­ta­tio­nal State Transfer), ir ope­ra­ci­nės sistemos terminalo (ko­man­di­nės eilutės sąsajos, CLI), vei­kian­čio kaip vartotojo sąsaja (klientas).

  • „Docker“ demonas: „Docker“ variklio serverio vaidmenį atlieka demonas. „Docker“ demonas veikia pag­rin­di­nės sistemos fone ir yra nau­do­ja­mas „Docker“ varikliui cent­ra­li­zuo­tai valdyti. Ši funkcija kuria ir tvarko visus atvaizdus, kon­t­ei­ne­rius bei tinklus.
  • REST-API: REST-API apibrėžia sąsajų rinkinį, lei­džian­tį kitoms prog­ra­moms bendrauti su Docker daemonu ir duoti jam nurodymus. Viena iš šių programų yra ope­ra­ci­nės sistemos ter­mi­na­las.
  • Ter­mi­na­las: Kaip kliento programą „Docker“ naudoja ope­ra­ci­nės sistemos terminalą. Tai, in­te­gruo­ta su „Docker“ demonu per REST-API, leidžia var­to­to­jams jį valdyti per skriptus arba vartotojo įvestis.
Tip

2017 m. „Docker“ variklis buvo per­va­din­tas į „Docker Community Edition“ (trumpinys – „Docker CE“), tačiau ofi­cia­lio­je do­ku­men­ta­ci­jo­je ir „Docker“ sau­gyk­lo­se daž­niau­siai vis dar var­to­ja­mas senasis pa­va­di­ni­mas. Be „Docker CE“, yra ir „Docker En­ter­pri­se Edition“ (Docker EE), kuri turi keletą iš­skir­ti­nių funkcijų. Tačiau ji nėra nemokama ir labiau tinka įmonėms.

Naudojant „Docker“ komandas, vartotojo prog­ra­mi­nės įrangos kon­t­ei­ne­rius galima paleisti, su­stab­dy­ti ir valdyti tie­sio­giai iš terminalo. Su demonu su­si­sie­ka­ma naudojant komandą docker ir tokias inst­ruk­ci­jas kaip build, pull ar run. Klientas ir serveris gali būti toje pačioje sistemoje. Var­to­to­jams taip pat su­tei­kia­ma galimybė pri­si­jung­ti prie „Docker“ demono kitoje sistemoje. Pri­klau­so­mai nuo nustatomo ryšio tipo, ryšys tarp kliento ir serverio vyksta per REST-API, per UNIX lizdus arba per tinklo sąsają.

Toliau pa­teik­ta­me pa­veiks­lė­ly­je pa­vaiz­duo­ta atskirų „Docker“ kom­po­nen­tų sąveika, naudojant pa­vyz­di­nes komandas docker build, docker pull ir docker run:

Image: Schematic representation of the Docker architecture
'The Docker ar­chi­tec­tu­re is based on the co­ope­ra­tion of the client (terminal'), serveris (Docker daemonas) ir registras (Docker Hub).“

Komanda docker build nurodo „Docker“ demonui sukurti atvaizdą (punk­ty­ri­nė linija). Tam reikia turėti ati­tin­ka­mą „Doc­ker­fi­le“ failą. Jei atvaizdas neturi būti sukurtas, o įkeltas iš „Docker Hub“ saugyklos, tuomet naudojama komanda docker pull (brūkšninė linija). Jei „Docker“ demonas per docker run nurodoma paleisti kon­t­ei­ne­rį, foninė programa patikrina, ar ati­tin­ka­mas kon­t­ei­ne­rio atvaizdas yra pri­ei­na­mas lokaliai. Jei taip, tada kon­t­ei­ne­ris pa­lei­džia­mas (ištisinė linija). Jei demonas negali rasti atvaizdo, jis au­to­ma­tiš­kai ini­ci­juo­ja at­si­siun­ti­mą iš saugyklos.

Darbas su „Docker“

Dabar atėjo laikas su­si­pa­žin­ti su kon­t­ei­ne­rių plat­for­mos prog­ra­mo­mis. Jei dar ne­įdie­gė­te „Docker“ variklio, tai galite padaryti per „Linux“ terminalą. Inst­ruk­ci­jas, kaip tai padaryti, rasite mūsų straips­ny­je„Docker“ įdiegimas „Ubuntu 22.04“ sistemoje. Toliau su­ži­no­si­te, kaip valdyti „Docker“ variklį iš terminalo, ką „Docker Hub“ gali jums pasiūlyti ir kodėl „Docker“ kon­t­ei­ne­riai gali iš esmės pakeisti jūsų darbo su prog­ra­mo­mis būdą.

Kaip valdyti „Docker“ variklį

Nuo 16.04 versijos „Ubuntu“ procesams valdyti naudoja foninę programą „systemd“(trumpinys nuo „system daemon“).„Systemd“ yraini­ci­ja­vi­mo procesas, nau­do­ja­mas ir kitose „Linux“ dist­ri­bu­ci­jo­se, pa­vyz­džiui, „RHEL“, „CentOS“ ar „Fedora“. Paprastai*„systemd“ gaunaproceso ID 1. Kaip pirmasis sistemos procesas, šis demonas yra at­sa­kin­gas už visų vėlesnių procesų paleidimą, stebėjimą ir užbaigimą. Anks­tes­nė­se „Ubuntu“ versijose (14.10 ir senesnėse) šią funkciją atlieka foninėprograma „upstart* “.

„Docker“ demoną taip pat galima valdyti per „systemd“. Stan­dar­ti­nė­je insta­lia­ci­jo­je kon­t­ei­ne­rių platforma su­kon­fi­gū­ruo­ta taip, kad demonas pa­lei­džia­mas au­to­ma­tiš­kai, kai įkeliama sistema. Šį nu­ma­ty­tą­jį nustatymą galima pri­tai­ky­ti naudodami ko­man­di­nės eilutės įrankį „systemctl“.

Naudodami „systemctl“, siunčiate komandas „systemd“, kad val­dy­tu­mė­te procesą arba su­ži­no­tu­mė­te jo būseną. Tokios komandos sintaksė yra tokia:

systemctl [OPTION] [COMMAND]
bash

Kai kurios komandos su­si­ju­sios su konk­re­čiais iš­tek­liais (pa­vyz­džiui, „Docker“). „systemd“ ter­mi­no­lo­gi­jo­je jie vadinami vienetais. Šiuo atveju komandą sudaro ati­tin­ka­ma inst­ruk­ci­ja ir vieneto, kuriam ji skirta, pa­va­di­ni­mas.

Jei norite įjungti (įgalinti) arba išjungti (atjungti) „Docker“ demono au­to­ma­ti­nį paleidimą, naudokite ko­man­di­nės eilutės įrankį „systemctl“ su šiomis ko­man­do­mis:

sudo systemctl enable docker
sudo systemctl disable docker
bash

Ko­man­di­nės eilutės įrankis „systemctl“ leidžia pa­tik­rin­ti vieneto būseną:

sudo systemctl status docker
bash

Jei jūsų „Ubuntu“ sistemoje veikia „Docker“ variklis, terminalo ekrane turėtų būti rodomas vaizdas, panašus į šį ekrano kopiją:

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

Jei jūsų „Docker“ variklis šiuo metu yra išjungtas, gausite pranešimą apie būseną „inactive (dead)“. Tokiu atveju, norėdami paleisti kon­t­ei­ne­rius, turėsite rankiniu būdu paleisti „Docker“ demoną.

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

Jei norite rankiniu būdu paleisti, su­stab­dy­ti arba perkrauti „Docker“ variklį, naudokite vieną iš šių komandų, skirtų „systemd “.

Norėdami paleisti išjungtą demoną, naudokite komandą „systemctl“ kartu su komanda start:

sudo systemctl start docker
bash

Jei norite uždaryti „Docker“ demoną, vietoj to naudokite komandą stop:

sudo systemctl stop docker
bash

Variklio pa­lei­di­mas iš naujo ini­ci­juo­ja­mas komanda restart:

sudo systemctl restart docker
bash

Kaip naudotis „Docker Hub“

Jei „Docker“ variklis yra kon­t­ei­ne­rių plat­for­mos širdis, tai „Docker Hub“ – atvirojo kodo projekto siela. Čia susirenka bend­ruo­me­nė. Šiame debesų kom­piu­te­ri­jos registru var­to­to­jai gali rasti viską, ko reikia, kad savo „Docker“ įdiegą paverstų vei­kian­čia sistema.

Ši in­ter­ne­ti­nė paslauga siūlo įvairius ofi­cia­lius archyvus, kuriuose yra daugiau nei 100 000 nemokamų prog­ra­mė­lių. Var­to­to­jai gali kurti vaizdų archyvus ir jais naudotis kartu su darbo grupėmis. Be kūrėjų komandos teikiamos pro­fe­sio­na­lios pagalbos, čia pra­de­dan­tie­ji gali rasti ryšių su vartotojų bend­ruo­me­ne. GitHub sve­tai­nė­je veikia bend­ruo­me­nės pagalbos forumas.

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

Re­gist­ra­ci­ja „Docker Hub“

Re­gist­ra­ci­ja „Docker Hub“ yra nemokama. Var­to­to­jams reikia tik el. pašto adreso ir pa­si­rink­tos „Docker“ ID. Vėliau ji tarnauja kaip asmeninės saugyklos vardų erdvė ir suteikia var­to­to­jams prieigą prie visų „Docker“ paslaugų. Šiuo metu šis pa­siū­ly­mas apima „Docker“ debesį, „Docker“ par­duo­tu­vę ir pa­si­rink­tas beta programas, be „Docker Hub“. Be to, „Docker“ ID galima naudoti pri­si­jun­gi­mui prie „Docker“ pagalbos centro, taip pat „Docker“ sėkmės portalo ir „Docker“ forumo.

Re­gist­ra­ci­jos procesą sudaro penki etapai:

  1. Pa­si­rin­ki­te savo „Docker“ ID: Pir­miau­sia pa­si­rin­ki­te vartotojo vardą, kuris vėliau bus nau­do­ja­mas kaip jūsų asmeninis „Docker“ ID.
  2. Įveskite el. pašto adresą: Įveskite savo dabartinį el. pašto adresą. At­kreip­ki­te dėmesį, kad turėsite pa­tvir­tin­ti savo re­gist­ra­ci­ją „Docker Hub“ el. paštu.
  3. Pa­si­rin­ki­te slap­ta­žo­dį: Pa­si­rin­ki­te slaptą slap­ta­žo­dį.
  4. Pateikite re­gist­ra­ci­ją: Spus­te­lė­ki­te „Sign up“ (Re­gist­ruo­tis), kad pa­teik­tu­mė­te re­gist­ra­ci­ją. Kai duomenys bus visiškai perduoti, „Docker“ į jūsų nurodytą pašto dėžutę išsiųs nuorodą, kuria galėsite pa­tvir­tin­ti savo el. pašto adresą.
  5. Pa­tvir­tin­ki­te savo el. pašto adresą: Pa­tvir­tin­ki­te savo el. pašto adresą spus­te­lė­da­mi pa­tvir­ti­ni­mo nuorodą.

Už­si­re­gist­ra­vus nar­šyk­lė­je, „Docker“ projekto in­ter­ne­ti­nės paslaugos tampa iškart pri­ei­na­mos. Čia galite kurti saugyklas ir darbo grupes arba nau­do­da­mie­si funkcija „Explore“ ieškoti viešų išteklių „Docker Hub“ plat­for­mo­je.

Image: Dashboard of the Docker hub
Select and set rep­o­si­tories and work­groups via the Docker hub dashboard / Source: hub.docker.com

Taip pat galite pri­si­jung­ti tie­sio­giai iš savo ope­ra­ci­nės sistemos terminalo, naudodami komandą „docker login“. Išsamus komandos aprašymas pateiktas „Docker“ do­ku­men­ta­ci­jo­je.

Iš esmės „Docker Hub“ pri­ei­na­mas ir tiems, kurie neturi paskyros ar „Docker ID“. Tačiau tokiu atveju galima at­si­siųs­ti tik vaizdus iš viešų saugyklų. Be „Docker ID“ neįmanoma įkelti (push) savo vaizdų.

Sukurti saugyklas „Docker Hub“

Nemokama „Docker Hub“ paskyra apima vieną privatų rep­o­zi­to­ri­jų ir suteikia galimybę kurti neribotą skaičių viešų rep­o­zi­to­ri­jų. Jei jums prireiktų daugiau privačių rep­o­zi­to­ri­jų, juos galite atrakinti atlikdami mokamą at­nau­ji­ni­mą.

Norėdami sukurti saugyklą, atlikite šiuos veiksmus:

  1. Pa­si­rin­ki­te vardų erdvę: naujai sukurti rep­o­zi­to­ri­jai au­to­ma­tiš­kai pri­ski­ria­mi jūsų „Docker“ ID vardų erdvei. Taip pat galite įvesti or­ga­ni­za­ci­jos, kuriai pri­klau­so­te, ID.
  2. Pa­va­din­ki­te saugyklą: įveskite naujai sukurto saugyklos pa­va­di­ni­mą.
  3. Pridėkite aprašymą: Pridėkite trumpą savo saugyklos aprašymą.
  4. Nu­sta­ty­ki­te matomumą: nu­sprę­s­ki­te, ar saugykla turėtų būti viešai matoma (vieša), ar prieinama tik jums ar jūsų or­ga­ni­za­ci­jai (privati).

Pa­tvir­tin­ki­te įvestus duomenis spus­te­lė­da­mi „Sukurti“.

Image: The Docker hub: Input screen for creating a repository
Your rep­o­si­tories are au­to­ma­ti­cal­ly created in the namespace of your Docker ID / Source: hub.docker.com

Kurti komandas ir or­ga­ni­za­ci­jas

Nau­do­da­ma­sis „Hub“, „Docker“ siūlo debesų platformą, kurioje vartotojo sukurti atvaizdai yra cent­ra­li­zuo­tai valdomi ir patogiai dalijami su darbo grupėmis. „Docker“ ter­mi­no­lo­gi­jo­je jos vadinamos or­ga­ni­za­ci­jo­mis. Kaip ir vartotojų paskyros, or­ga­ni­za­ci­jos gauna in­di­vi­dua­lius iden­ti­fi­ka­to­rius, per kuriuos galima teikti ir at­si­siųs­ti atvaizdus. Teisės ir vaidmenys or­ga­ni­za­ci­jo­je gali būti pri­ski­ria­mi per komandas. Pa­vyz­džiui, var­to­to­jai, priskirti „Savininkų“ komandai, turi teisę kurti privačius arba viešus saugyklas ir suteikti prieigos teises.

Darbo grupes taip pat galima kurti ir valdyti tie­sio­giai per valdymo skydą. Daugiau in­for­ma­ci­jos apie or­ga­ni­za­ci­jas ir komandas rasite „Docker“ do­ku­men­ta­ci­jo­je.

Darbas su vaizdais ir kon­t­ei­ne­riais

„Docker Hub“, kaip pag­rin­di­nis oficialių „Docker“ išteklių šaltinis, yra mūsų išeities taškas šioje įvadinėje pamokoje apie vaizdų ir kon­t­ei­ne­rių tvarkymą. Kūrėjų komanda pateikė de­monst­ra­ci­nį vaizdą „whalesay“, kuris bus nau­do­ja­mas kaip pagrindas tolesniam „Docker“ vadovui.

At­si­siųs­ti „Docker“ vaizdus

„Whalesay“ vaizdą galite rasti apsilankę „Docker Hub“ sve­tai­nė­je ir įvedę žodį „whalesay“ paieškos juostoje šalia „Docker“ logotipo.

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

Paieškos re­zul­ta­tuo­se spus­te­lė­ki­te išteklių su pa­va­di­ni­mu „docker/whalesay“, kad pa­tek­tu­mė­te į šio atvaizdo viešąjį rep­o­zi­to­riu­mą.

„Docker“ saugyklos visada sudaromos pagal tą patį modelį. Puslapio ant­raš­tė­je var­to­to­jai mato atvaizdo pa­va­di­ni­mą, saugyklos ka­te­go­ri­ją ir pas­ku­ti­nio įkėlimo laiką (last pushed).

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

Kiek­vie­no­je „Docker“ sau­gyk­lo­je taip pat pa­tei­kia­mi šie in­for­ma­ci­niai langeliai:

  1. Aprašymas: Išsamus aprašymas, paprastai apimantis naudojimo inst­ruk­ci­jas
  2. Komanda „Docker pull“: Ko­man­di­nės eilutės komanda, naudojama vaizdui at­si­siųs­ti iš saugyklos (pull)
  3. Sa­vi­nin­kas: In­for­ma­ci­ja apie saugyklos kūrėją
  4. Ko­men­ta­rai: Komentarų skiltis puslapio pabaigoje

Iš saugyklos in­for­ma­ci­nių langelių matyti, kad „whalesay“ yra atvirojo kodo Perl skripto „cowsay“ mo­di­fi­ka­ci­ja. Ši programa, kurią 1999 m. sukūrė Tony Monroe, generuoja ASCII grafiką, vaiz­duo­jan­čią karvę, kuri vartotojo terminale pasirodo kartu su pranešimu.

Norėddocker pull at­si­siųs­ti „docker/whalesay“, naudokite šią komandą:

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

Komanda docker pull nurodo demonui įkelti atvaizdą iš saugyklos. Atvaizdą nurodote įvedę jo pa­va­di­ni­mą (NAME). Taip pat galite nurodyti „Docker“ programai, kaip turi būti vykdoma norima komanda (OPTIONS). Pa­pil­do­mai galima nurodyti žymes (:TAG) ir in­di­vi­dua­lius iden­ti­fi­ka­vi­mo numerius (@DIGEST), kurie leidžia at­si­siųs­ti konkrečią atvaizdo versiją.

Vietinę „docker/whalesay“ atvaizdo kopiją galima at­si­siųs­ti šia komanda:

docker pull docker/whalesay
bash

Paprastai šį žingsnį galite praleisti. Jei norite paleisti kon­t­ei­ne­rių, „Docker“ demonas au­to­ma­tiš­kai atsisiųs vaizdus iš saugyklos, kurių neranda vietinėje sistemoje.

Paleisti „Docker“ vaizdus kaip kon­t­ei­ne­rius

Norėdami paleisti „Docker“ atvaizdą, naudokite komandą docker run:

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

Vie­nin­te­lė privaloma komandos docker run dalis yra norimo „Docker“ atvaizdo pa­va­di­ni­mas. Tačiau pa­lei­džiant kon­t­ei­ne­rį taip pat galima nustatyti pa­pil­do­mas parinktis, žymes (TAG) ir san­t­rau­kas (DIGEST). Be to, komandą docker run galima derinti su kitomis ko­man­do­mis, kurios pa­lei­džia­mos iškart, kai tik pa­lei­džia­mas kon­t­ei­ne­ris. Tokiu atveju CMD (COMMAND, apibrėžta atvaizdo kūrėjo ir vykdoma au­to­ma­tiš­kai paleidus kon­t­ei­ne­rį) yra perrašoma. Kitos ne­pri­va­lo­mos kon­fi­gū­ra­ci­jos gali būti nu­sta­ty­tos naudojant pa­pil­do­mus ar­gu­men­tus (ARG…). Tai leidžia, pa­vyz­džiui, pridėti var­to­to­jus arba perkelti aplinkos kin­ta­muo­sius.

Naudokite ko­man­di­nės eilutės nurodymą

docker run docker/whalesay cowsay boo
bash

at­si­siųs­ti esamą Perl skriptą kaip vaizdą ir paleisti jį kon­t­ei­ne­ry­je. Pa­ste­bė­si­te, kad „whalesay“ gerokai skiriasi nuo pirminio skripto.

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’

Jei pa­lei­džia­mas vaizdas „docker/whalesay“, sce­na­ri­jus išveda ASCII grafiką, vaiz­duo­jan­čią banginį, bei tekstinį pranešimą „boo“, perduotą terminale naudojant komandą „cowsay “.

Kaip ir bandomojo paleidimo metu, demonas pir­miau­sia ieško reikiamo atvaizdo vie­ti­nia­me failų kataloge. Kadangi tokio paties pa­va­di­ni­mo paketo nėra, pra­de­da­mas at­si­siun­ti­mas iš „Docker“ saugyklos. Tada demonas paleidžia mo­di­fi­kuo­tą „cowsay“ programą. Jei programa sėkmingai baigė veikti, kon­t­ei­ne­ris au­to­ma­tiš­kai uždaromas.

Kaip ir „cowsay“, taip ir „Docker“ komanda „whalesay“ suteikia galimybę įsikišti į programos eigą ir paveikti terminale rodomą tekstą. Iš­ban­dy­ki­te šią funkciją, pa­keis­da­mi komandos išvestyje esantį žodį „boo“ bet kokia eilute arba, pa­vyz­džiui, nevykusiu juokeliu apie banginius.

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

Rodyti visus „Docker“ atvaizdus vietinėje sistemoje

Jei nesate tikri, ar jau at­si­siun­tė­te konkretų vaizdą, galite per­žiū­rė­ti visų vaizdų, esančių jūsų kom­piu­te­ry­je, sąrašą. Naudokite šią ko­man­di­nės eilutės komandą:

sudo docker image
bash

Komanda docker images (arba docker image ls) rodo visus vietinius vaizdus, įskaitant failo dydį, žymę ir vaizdo ID.

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

Jei pa­lei­džia­te kon­t­ei­ne­rių, pag­rin­di­nis atvaizdas at­si­siun­čia­mas kaip kopija iš saugyklos ir visam laikui iš­sau­go­mas jūsų kom­piu­te­ry­je. Tai padeda sutaupyti laiko, jei vėliau norėsite pa­si­nau­do­ti tuo atvaizdu. Naujas at­si­siun­ti­mas pra­de­da­mas tik tuo atveju, jei pa­si­kei­čia atvaizdo šaltinis, pa­vyz­džiui, jei sau­gyk­lo­je pasirodo nauja versija.

Rodyti visus vietinės sistemos kon­t­ei­ne­rius

Jei norite per­žiū­rė­ti visų kon­t­ei­ne­rių, kurie šiuo metu veikia jūsų sistemoje arba veikė anksčiau, sąrašą, naudokite ko­man­di­nės eilutės nurodymą docker ps kartu su pa­rink­ti­mi --all (trumpai: -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

Terminalo išvestyje pa­tei­kia­ma tokia in­for­ma­ci­ja kaip ati­tin­ka­mo kon­t­ei­ne­rio ID, bazinis atvaizdas, komanda, paleista pa­lei­džiant kon­t­ei­ne­rį, kon­t­ei­ne­rio paleidimo laikas ir būsena.

Jei norite rodyti tik tuos kon­t­ei­ne­rius, kurie šiuo metu veikia jūsų sistemoje, naudokite komandos eilutės nurodymą docker ps be jokių kitų parametrų:

sudo docker ps
bash

Tačiau šiuo metu jūsų sistemoje neturėtų būti jokių vei­kian­čių kon­t­ei­ne­rių.

Sukurti „Docker“ vaizdus

Mūsų „Docker“ pamoka jau parodė, kaip rasti vaizdus „Docker Hub“ plat­for­mo­je, juos at­si­siųs­ti ir paleisti bet kurioje sistemoje, kurioje įdiegtas „Docker“ variklis. Tačiau nau­do­da­mie­si „Docker“ galėsite ne tik pa­si­nau­do­ti didžiuliu re­gist­ruo­se esančių programų pa­si­rin­ki­mu. Ši platforma taip pat siūlo daugybę galimybių kurti savo vaizdus ir dalytis jais su kitais prog­ra­muo­to­jais.

Šio „Docker“ vadovo įva­di­niuo­se skyriuose jau su­ži­no­jo­te, kad kiek­vie­nas „Docker“ atvaizdas yra sukurtas remiantis „Doc­ker­fi­le“ failu. „Doc­ker­fi­le“ failus galite įsi­vaiz­duo­ti kaip sa­vo­tiš­kus atvaizdų kūrimo šablonus. Tai paprasti teks­ti­niai failai, kuriuose yra visos inst­ruk­ci­jos, rei­ka­lin­gos „Docker“ atvaizdui sukurti. Toliau pa­teik­tuo­se žings­niuo­se išmoksite, kaip parašyti tokį „Doc­ker­fi­le“ failą ir nurodyti „Docker“ jį naudoti kaip pagrindą jūsų pačių atvaizdui sukurti.

  1. Sukurti naują katalogą: „Docker“ kūrėjų komanda re­ko­men­duo­ja kiek­vie­nam „Doc­ker­fi­le“ failui sukurti atskirą katalogą. Linux sistemoje katalogus lengva sukurti terminale. Norėdami sukurti katalogą pa­va­di­ni­mu „my­doc­ker­build“, naudokite šią komandų eilutės komandą:
mkdir mydockerbuild
bash
Image: Ubuntu terminal: The command mkdir
Create new di­rec­tories with the command mkdir
  1. Naršykite naujame kataloge: naudokite komandą cd, kad per­ei­tu­mė­te į naujai sukurtą darbo katalogą.
cd mydockerbuild
bash
Image: Ubuntu terminal: The command cd
With the help of the cd command, switch to another working directory
  1. Sukurti naują tekstinį failą: Naudodami „Ubuntu“, teks­ti­nius failus taip pat galite lengvai kurti per terminalą. Tam naudokite re­dak­to­rių, pa­vyz­džiui, „Nano“ arba „Vim“. Kataloge „my­doc­ker­build “ sukurkite tekstinį failą pa­va­di­ni­mu „Doc­ker­fi­le “.
nano Dockerfile
bash
Image: Ubuntu terminal: Create text files with Nano
The text editor Nano is pr­einstal­led on all Ubuntu versions
  1. Pa­ra­šy­ki­te „Doc­ker­fi­le“: naujai sukurtas tekstinis failas bus jūsų pačių sukurto atvaizdo kūrimo planas. Vietoj to, kad kurti atvaizdą nuo nulio, šiame „Docker“ pamokų serijos straips­ny­je kaip šabloną naudosime de­monst­ra­ci­nį atvaizdą „docker/whalesay “. Jis įtrau­kia­mas naudojant komandą „FROM“ jūsų „Doc­ker­fi­le“ faile. Naudokite žymę „:latest“, kad nu­ro­dy­tu­mė­te naujausią atvaizdo versiją.
FROM docker/whalesay:latest

Iki šiol „docker/whalesay“ veikė taip, kad jūs patys įra­šy­da­vo­te tekstą. Terminale rodomas būtent tas tekstas, kurį įvedėte, kartu su komanda, skirta paleisti kon­t­ei­ne­rį. Tačiau būtų įdomiau, jei sce­na­ri­jus au­to­ma­tiš­kai generuotų naują tekstą. Tai galima padaryti, pa­vyz­džiui, naudojant programą „fortunes“, kuri yra kiek­vie­no­je Linux sistemoje. Pag­rin­di­nė „fortunes“ funkcija – generuoti „fortune cookie“ posakius ir juokingus aforizmus. Naudokite šią komandą, kad at­nau­jin­tu­mė­te esamą vietinį paketų indeksą ir įdieg­tu­mė­te „fortunes“:

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

Tada api­brėž­ki­te CMD komandą. Ji bus vykdoma po komandos RUN, nebent ją pakeistų komanda call (docker run image CMD). Naudokite šią komandą, kad pa­leis­tu­mė­te programą „fortunes“ su pa­rink­ti­mi -a („Pa­si­rink­ti iš visų duomenų bazių“) ir terminale per programą „cowsay“ pa­ro­dy­tu­mė­te rezultatą:

CMD /usr/games/fortune -a | cowsay

Jūsų „Doc­ker­fi­le“ turėtų atrodyti taip:

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

Pastaba: „Doc­ker­fi­le“ failo komandos visada rašomos vienu tarpeliu ir visada prasideda raktiniu žodžiu. Sintaksė ne­at­si­žvel­gia į didžiųjų ir mažųjų raidžių skirtumą, todėl nesvarbu, ar rašote di­džio­sio­mis, ar ma­žo­sio­mis raidėmis. Tačiau rak­ti­niams žodžiams nustatyta vienoda rašybos tvarka.

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. Iš­sau­go­ki­te tekstinį failą: iš­sau­go­ki­te įrašą. Jei naudojate „Nano“ re­dak­to­rių, iš­sau­go­ki­te naudodami klavišų kom­bi­na­ci­ją [CTRL] + [O] ir pa­tvir­tin­ki­te spausdami [ENTER]. „Nano“ parodys pranešimą, kad į pa­si­rink­tą failą buvo įrašytos trys eilutės. Už­da­ry­ki­te tekstinį re­dak­to­rių naudodami klavišų kom­bi­na­ci­ją [CTRL] + [X].
  2. Sukurti atvaizdą kaip „Doc­ker­fi­le“: Norėdami sukurti atvaizdą iš „Doc­ker­fi­le“, pir­miau­sia pereikite į katalogą, kuriame yra tekstinis failas. Pradėkite atvaizdo kūrimą komandos eilutės nurodymu docker build. Jei norite atskirai pavadinti atvaizdą arba suteikti jam žymę, naudokite parinktį -t, po kurios nu­ro­dy­ki­te norimą pa­va­di­ni­mo ir žymės derinį. Stan­dar­ti­nis formatas yra name:tag.

Šiame pavyzdyje turėtų būti sukurtas pa­veiks­lė­lis, pa­va­din­tas „docker-whale “:

docker build -t docker-whale .
bash

Paskutinė eilutė reiškia, kad pag­rin­di­nis „Doc­ker­fi­le“ failas yra pa­si­rink­ta­me kataloge. Taip pat galite nurodyti šaltinio failų kelią arba URL adresą.

Kom­pi­lia­vi­mo procesas prasideda, vos tik komanda pa­tvir­ti­na­ma paspaudus [ENTER]. Pir­miau­sia „Docker“ demonas patikrina, ar turi visus failus, rei­ka­lin­gus atvaizdui sukurti. „Docker“ ter­mi­no­lo­gi­jo­je tai api­bend­ri­na­ma terminu „kon­teks­tas“.

Tuomet „docker/whalesay“ atvaizdas su žyma :latest yra šioje vietoje:

Jei visos vaizdo sukūrimui rei­ka­lin­gos sąlygos jau yra įvykdytos, „Docker“ demonas paleidžia vaizdo šabloną, nurodytą naudojant „FROM“, lai­ki­na­ja­me kon­t­ei­ne­riu­je ir pereina prie kitos komandos „Doc­ker­fi­le“ faile. Šiame pavyzdyje tai yra komanda „RUN“, kuri įdiegia programą „fortunes “.

Kiekvieno vaizdo kūrimo proceso etapo pabaigoje „Docker“ suteikia ati­tin­ka­mo sluoksnio, sukurto per tą etapą , iden­ti­fi­ka­to­rių. Tai reiškia, kad kiekviena pag­rin­di­nio „Doc­ker­fi­le“ eilutė atitinka vaizdo sluoksnį, sukurtą pagal ją.

Kai komanda „RUN“ įvykdoma, „Docker“ demonas sustabdo jai sukurtą kon­t­ei­ne­rį, jį pašalina ir paleidžia naują laikiną kon­t­ei­ne­rį, skirtą „CMD“ nurodymo sluoks­niui. Pa­si­bai­gus kūrimo procesui, šis lai­ki­na­sis kon­t­ei­ne­ris taip pat uždaromas ir pa­ša­li­na­mas. „Docker“ pateikia naujojo atvaizdo ID:

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

Jūsų naujai sukurtą atvaizdą galite rasti pa­va­di­ni­mu „docker-whale“ vie­ti­nia­me išsaugotų atvaizdų sąraše.

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

Norėdami paleisti kon­t­ei­ne­rių iš naujai sukurto atvaizdo, naudokite ko­man­di­nės eilutės komandą sudo docker run kartu su atvaizdo pa­va­di­ni­mu:

sudo docker run docker-whale
bash

Jei vaizdas buvo sėkmingai sukurtas pagal „Doc­ker­fi­le“, jūsų banginis dabar turėtų įkvėpti jus daugiau ar mažiau iš­min­tin­gais žodžiais. Pastaba: kiekvieną kartą, kai per­krau­na­te kon­t­ei­ne­rį, su­ge­ne­ruo­ja­ma nauja frazė.

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

Pa­žy­mė­ki­te „Docker“ vaizdus ir įkelkite juos į „Docker Hub“

Jei norite įkelti savo sukurtą „docker-whale“ atvaizdą į centrą ir padaryti jį prieinamą bend­ruo­me­nei arba darbo grupei, pir­miau­sia turite jį susieti su to paties pa­va­di­ni­mo saugykla savo as­me­ni­nė­je vardų erdvėje. „Docker“ ter­mi­no­lo­gi­jo­je šis veiksmas vadinamas žymėjimu.

Norėdami paskelbti vaizdą „Docker Hub“ plat­for­mo­je, atlikite šiuos veiksmus:

  1. Sukurkite saugyklą: pri­si­jun­ki­te prie „Docker Hub“ naudodami savo „Docker“ ID ir asmeninį slap­ta­žo­dį, tada sukurkite viešą saugyklą pa­va­di­ni­mu „docker-whale“.
Image: The Docker hub: Entry form for creating a repository
Create a rep­o­si­to­ry for your custom image / Source: hub.docker.com
  1. Nu­sta­ty­ki­te vaizdo iden­ti­fi­ka­to­rių: Nu­sta­ty­ki­te savo pa­si­rink­ti­nio vaizdo „docker-whale“ iden­ti­fi­ka­to­rių naudodami ko­man­di­nės eilutės nurodymą 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ūsų atveju vaizdo iden­ti­fi­ka­to­rius yra a8f2048c9ab8. Jis mums rei­ka­lin­gas žymėjimui kitame žingsnyje.

  1. Pri­skir­ki­te žymę atvaizdui: Pri­skir­ki­te žymę „docker-whale“ atvaizdui naudodami ko­man­di­nės eilutės programą docker tag taip, kaip nurodyta toliau:
sudo docker tag [Image-ID][Docker-ID]/[Image-Name]:[TAG]
bash

Šiame pavyzdyje žymėjimo ko­man­di­nės eilutės nurodymas yra toks:

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

Nau­do­da­mie­si docker images apžvalga galite pa­tik­rin­ti, ar teisingai pa­žy­mė­jo­te savo vaizdą. Dabar saugyklos pa­va­di­ni­me turėtų būti nurodytas jūsų „Docker“ ID.

Image: Ubuntu terminal: Image overview before and after tagging
Link images with your Docker ID using the command docker tag
  1. Įkelkite vaizdą: Norėdami įkelti vaizdą, pir­miau­sia turite pri­si­jung­ti prie „Docker Hub“. Tai galima padaryti naudojant komandą docker login.
sudo docker login
bash

Tada terminale bus paprašyta įvesti vartotojo vardą (Docker ID) ir slap­ta­žo­dį.

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

Jei pri­si­jun­gi­mas pavyko, naudokite ko­man­di­nės eilutės komandą docker push, kad įkel­tu­mė­te savo vaizdą į naujai sukurtą saugyklą.

sudo docker push [Namespace]/docker-whale
bash

Įkėlimo procesas turėtų užtrukti tik kelias sekundes. Dabartinė būsena rodoma terminale.

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

Pri­si­jun­ki­te prie „Docker Hub“ per naršyklę, kad ga­lė­tu­mė­te per­žiū­rė­ti įkeltą vaizdą.

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

Jei norite įkelti daugiau nei vieną pa­veiks­lė­lį į vieną saugyklą, naudokite skir­tin­gas žymes, kad pa­teik­tu­mė­te pa­veiks­lė­lius skir­tin­go­mis ver­si­jo­mis. Pa­vyz­džiui:

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

Įvairių vaizdo versijų apžvalgą galima rasti „Docker Hub“ sau­gyk­lo­je, skiltyje „Žymės“.

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

Tačiau skirtingų projektų vaizdai turėtų būti pa­tei­kia­mi at­ski­ruo­se sau­gyk­lo­se.

Jei įkėlimas pavyko, jūsų pa­si­rink­tas vaizdas dabar bus pri­ei­na­mas viešame rep­o­zi­to­riu­me visiems „Docker“ nau­do­to­jams visame pasaulyje.

  1. Ban­do­ma­sis pa­lei­di­mas: Pa­tik­rin­ki­te, ar failo įkėlimas pavyko, pa­ban­dy­da­mi at­si­siųs­ti pa­veiks­lė­lį.

At­kreip­ki­te dėmesį, kad norint at­si­siųs­ti naują kopiją su ta pačia žyma, pir­miau­sia reikia ištrinti vietinę vaizdo kopiją. Priešingu atveju „Docker“ praneš, kad norimas vaizdas jau eg­zis­tuo­ja da­bar­ti­nė­je versijoje.

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

Norėdami ištrinti vietinį „Docker“ atvaizdą, naudokite ko­man­di­nės eilutės nurodymą docker rmi kartu su ati­tin­ka­mu atvaizdo ID. Jis, kaip įprasta, nu­sta­to­mas naudojant docker images. Jei „Docker“ už­re­gist­ruo­ja konfliktą, pvz., dėl to, kad atvaizdo ID nau­do­ja­mas keliuose sau­gyk­lo­se arba yra nau­do­ja­mas kon­t­ei­ne­riu­je, pa­kar­to­ki­te komandą su pa­rink­ti­mi --force (trumpai – -f ), kad pri­vers­ti­nai iš­trin­tu­mė­te atvaizdą.

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

Vėl parodyti visų vietinių vaizdų sąrašą:

sudo docker Images
bash

Ištrinti elementai turėtų ne­be­at­si­ra­sti terminalo išvestyje. Dabar naudokite rep­o­zi­to­ri­jo­je pateiktą komandą „pull“, kad at­si­siųs­tu­mė­te naują atvaizdo kopiją iš „Docker Hub“.

sudo docker pull [Namespace]/docker-whale
bash
Image: Ubuntu terminal: Download from the Docker hub
The pre­viou­sly published image is suc­cess­ful­ly down­lo­a­ded

Kitos temos ir pamokos apie „Docker“

„Docker“ pasaulis yra platus, ir laikui bėgant iš „Docker“ įrankių su­si­for­ma­vo gyva eko­sis­te­ma. „Docker“ ypač naudingas ad­mi­nist­ra­to­riams, ypač jei jie valdo su­dė­tin­gas programas, kuriose daugybė kon­t­ei­ne­rių veikia ly­gia­gre­čiai skir­tin­go­se sistemose. „Docker“ siūlo įvairias funkcijas, skirtas tokių klasterių ko­or­di­na­vi­mui. Daugiau in­for­ma­ci­jos apie tai rasite mūsų straips­ny­je apie „Docker“ ko­or­di­na­vi­mą naudojant „Swarm“ ir „Compose“.

„Digital Guide“ pa­tei­kia­ma papildomų pamokų apie darbą su „Docker“:

  • „Docker“ saugyklos kon­fi­gū­ra­vi­mas
  • „Docker“ kon­t­ei­ne­rių tomai
  • „Docker“: at­sar­gi­nės kopijos kūrimas ir atkūrimas
  • „Docker“ įdiegimas ir pa­lei­di­mas „Linux“ serveryje
  • „Docker Compose“ pamoka

„Docker“ tinka įvairiems naudojimo atvejams. „Digital Guide“ rasite šiuos mo­ko­muo­sius vadovus:

  • „WordPress“ diegimas „Docker“ kon­t­ei­ne­riuo­se
  • VPN veikimas „Docker“ kon­t­ei­ne­riuo­se naudojant „SoftEther“
  • „Nextcloud“ diegimas naudojant „Docker“
  • „Portainer“ įdiegimas „Docker“
  • „Redis“ „Docker“ kon­t­ei­ne­riuo­se
  • „Valheim“ „Docker“ serveris

„Docker“ ne visada yra ge­riau­sias pa­si­rin­ki­mas kiek­vie­nai programai. Viename iš mūsų straips­nių ap­ta­ria­mos po­pu­lia­riau­sios „Docker“ al­ter­na­ty­vos. Be to, turime daug straips­nių, kuriuose „Docker“ lyginamas su kitomis plat­for­mo­mis:

  • „Ku­ber­ne­tes“ ir „Docker“
  • „Openshift“ ir „Docker“
  • Podman prieš Docker
Go to Main Menu