Meie Docker-õpetuses tut­vus­tame teile Docker-vir­tua­li­see­ri­mis­plat­vormi ja näitame lihtsate juhiste abil, kuidas Dockeri oma Ubuntu 22.04 süsteemis kasutada.

Dockeri üles­ehi­tus ja omadused

„Looge, levitage ja käivitage mis tahes rakendus, kus tahes“ – see on Docker’i moto. See avatud läh­te­koo­diga kon­tei­nerplat­vorm pakub paind­likku ja vähe ressursse nõudvat al­ter­na­tiivi riist­va­ra­kom­po­nen­tide emu­lee­ri­miseks vir­tuaal­ma­si­nate (VM) abil.

Kui tra­dit­sioo­ni­line riist­va­ra­line vir­tua­li­see­ri­mine põhineb mitme kü­la­lis­süs­teemi käi­vi­ta­misel ühisel pe­re­süs­tee­mil, siis Docker-rakendusi käi­ta­takse kon­tei­ne­rite abil sama süsteemi sees iso­lee­ri­tud prot­ses­si­dena. Seda ni­me­ta­takse kon­tei­ne­ri­põ­hi­seks vir­tua­li­see­ri­miseks, mida tuntakse ka ope­rat­sioo­ni­süs­teemi tasandi vir­tua­li­see­ri­misena.

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

Kon­tei­ne­ri­põ­hise vir­tua­li­see­ri­mise üks suur eelis on see, et erinevate nõuetega ra­ken­dused saavad töötada üks­tei­sest eral­da­tult, ilma et oleks vaja eraldi kü­la­lis­süs­teemi li­sa­koor­must. Lisaks või­mal­da­vad kon­tei­ne­rid rakendusi plat­vormi­de­va­he­li­selt ja eri­ne­va­tes inf­ra­struk­tuu­ri­des ka­su­tusele võtta, ilma et neid oleks vaja kohandada vastavalt pe­re­süs­teemi riist- või tark­va­ra­kon­fi­gu­rat­sioo­nile.

Docker on kõige po­pu­laar­sem tark­va­ra­pro­jekt, mis pakub ka­su­ta­ja­tele kon­tei­ne­ri­põ­hist vir­tua­li­see­ri­mis­teh­no­loo­giat. See avatud läh­te­koo­diga platvorm põhineb kolmel põ­hi­kom­po­nen­dil. Kon­tei­ne­rite käi­vi­ta­miseks on ka­su­ta­ja­tel vaja vaid Docker-mootorit ning spet­siaal­seid Docker-pilte, mida saab hankida Docker Hubist või ise luua.

Docker-pildid

Sarnaselt vir­tuaal­ma­si­na­tega põhinevad Docker-kon­tei­ne­rid Docker-piltidel. Pilt on ainult lu­ge­miseks mõeldud mall, mis sisaldab kõiki juhiseid, mida Docker-mootor vajab kon­tei­neri loomiseks. Docker-pilti kir­jel­da­takse kui kon­tei­neri tei­sal­da­ta­vat pilti teks­ti­faili vormis, mida ni­me­ta­takse ka Doc­ker­file’iks. Kui kon­tei­ne­rit soo­vi­takse süsteemis käivitada, laa­di­takse esmalt alla vastava pildiga pakett, juhul kui seda ko­ha­li­kult veel ei ole. Laaditud pilt pakub vajalikku fai­li­süs­teemi, seal­hul­gas kõiki pa­ra­meetreid käi­ta­miseks. Kon­tei­ne­rit võib vaadelda kui pildi käi­mas­ole­vat protsessi.

Docker Hub

Docker Hub on pil­ve­põ­hine tark­va­ra­re­po­si­too­riumide register, mis on omamoodi Docker-piltide raa­ma­tu­kogu. Vee­bi­tee­nus on jagatud avalikuks ja pri­vaat­seks osaks. Avalikus osas on ka­su­ta­ja­tel võimalus üles laadida enda loodud pilte ja neid ko­gu­kon­naga jagada. Siin on saadaval mitmed ametlikud pildid, mille on loonud Docker aren­da­jate meeskond ja tuntud avatud läh­te­koo­diga projektid. Registri pri­vaat­sesse osasse üles laaditud kujutised ei ole avalikult kät­te­saa­da­vad ja neid saab jagada näiteks ettevõtte si­se­rin­gis või sõprade ja tut­ta­va­tega. Docker Hubile pääseb ligi aadressil hub.docker.com.

Docker-mootor

Docker-projekti keskmes on Docker-mootor. Tegemist on avatud läh­te­koo­diga kliendi-serveri ra­ken­du­s­ega, mille praegune versioon on kõigile ka­su­ta­ja­tele kät­te­saa­dav kõigil levinud plat­vormi­del.

Docker-mootori põ­hi­ar­hi­tek­tuur jaguneb kolmeks kom­po­nen­diks: ser­ve­ri­funkt­sioone täitev daemon, REST-pa­ra­digmal (Rep­re­sen­ta­tio­nal State Transfer) põhinev prog­ram­mee­ri­mis­lii­des (API) ning ope­rat­sioo­ni­süs­teemi terminal (käs­ku­de­rida, CLI) ka­su­ta­ja­lii­de­sena (klient).

  • Docker-daemon: Docker-mootori serverina ka­su­ta­takse daemon-protsessi. Docker-daemon töötab host-süsteemi taustal ja seda ka­su­ta­takse Docker-mootori keskseks juh­ti­miseks. See funkt­sioon loob ja haldab kõiki kujutisi, kon­tei­ne­rid ja võrke.
  • REST-API: REST-API määrab kindlaks liideste kogumi, mis võimaldab teistel prog­rammi­del Docker-daemoniga suhelda ja talle juhiseid anda. Üks neist prog­rammi­dest on ope­rat­sioo­ni­süs­teemi terminal.
  • Terminal: Klien­di­prog­ram­mina kasutab Docker ope­rat­sioo­ni­süs­teemi terminali. See, mis on REST-API kaudu in­teg­ree­ri­tud Docker-daemoniga, võimaldab ka­su­ta­ja­tel seda skriptide või kasutaja si­ses­tuste kaudu juhtida.
Tip

2017. aastal nimetati Docker Engine ümber Docker Community Edi­tio­niks (lü­hen­da­tult Docker CE), kuid ametlikus do­ku­men­tat­sioo­nis ja Docker-hoid­la­test ka­su­ta­takse enamasti ikka veel vana nime. Lisaks Docker CE-le on olemas ka Docker En­terprise Edition (Docker EE), millel on mõned li­sa­funkt­sioo­nid. See pole aga tasuta ja sobib pigem et­te­võ­te­tele.

Docker-käskude abil saab kasutaja tark­va­ra­kon­tei­ne­reid käivitada, peatada ja hallata otse terminali kaudu. Daemoniga su­hel­dakse käsu docker ning käskude build, pull või run abil. Klient ja server võivad asuda samas süsteemis. Ka­su­ta­ja­tel on ka võimalus pääseda juurde teise süsteemi Docker-daemonile. Sõltuvalt loodava ühenduse tüübist toimub suhtlus kliendi ja serveri vahel REST-API, UNIX-sokettide või võr­gu­lii­d­ese kaudu.

Järgmine joonis il­lust­ree­rib Docker’i üksikute kom­po­nen­tide koos­toimet näi­dis­käs­kude docker build, docker pull ja docker run puhul:

Image: Schematic representation of the Docker architecture
'The Docker arc­hi­tec­ture is based on the coo­pe­ra­tion of the client (terminal'), server (Docker-daemon) ja registri (Docker Hub).“

Käsk docker build annab Docker-daemonile käsu luua pilt (punk­tiir­joon). Selleks peab olema olemas vastav Doc­ker­file. Kui pilti ei soovitata luua, vaid laadida Docker Hubi hoidlast, ka­su­ta­takse käsku docker pull (kat­kend­joon). Kui Docker-daemonile antakse käsk docker run käivitada konteiner, kont­rol­lib taus­taprog­ramm, kas vastav kon­tei­ne­ri­pilt on ko­ha­li­kult kät­te­saa­dav. Kui on, siis käi­vi­ta­takse konteiner (täisjoon). Kui daemon pilti ei leia, algatab ta au­to­maat­selt selle al­la­laa­di­mise hoidlast.

Töö Dockeriga

Nüüd on aeg tutvuda kon­tei­nerplat­vormi ra­ken­dus­tega. Kui te pole Docker-mootorit veel ins­tal­li­nud, saate seda teha Linuxi terminali kaudu. Juhised selle kohta leiate meie artiklist„Docker’i ins­tal­li­mine Ubuntu 22.04-le”. Allpool saate teada, kuidas Docker-mootorit terminali kaudu juhtida, mida Docker Hub teie heaks teha saab ja miks Docker-kon­tei­ne­rid võivad teie töö­ta­mis­viisi ra­ken­dus­tega põh­ja­li­kult muuta.

Kuidas juhtida Docker-mootorit

Alates ver­sioo­nist 16.04 on Ubuntu kasutanud prot­ses­side hal­da­miseks taus­taprog­rammi systemd(lühend sõnast „system daemon“).Systemd onal­gus­prot­sess, mida ka­su­ta­takse ka teistes Linuxi dist­ri­but­sioo­ni­des, nagu RHEL, CentOS või Fedora. Ta­va­li­seltantakse systemd-leprotsessi ID 1. Süsteemi esimese prot­ses­sina vastutab see daemon kõigi järg­ne­vate prot­ses­side käi­vi­ta­mise, jälgimise ja lõ­pe­ta­mise eest. Vara­se­ma­tes Ubuntu ver­sioo­ni­des (14.10 ja vanemad) täidab seda funkt­siooni taus­taprog­rammupstart.

Docker-daemonit saab juhtida ka systemd kaudu. Stan­dardse installi puhul on kon­tei­nerplat­vorm sea­dis­ta­tud nii, et daemon käivitub au­to­maat­selt süsteemi käi­vi­ta­misel. Seda vaikimisi seadet saab kohandada käsurea tööriista systemctl abil.

Süsteemi systemctl abil saadad systemd-le käske protsessi juh­ti­miseks või selle seisundi pä­ri­miseks. Sellise käsu süntaks on järgmine:

systemctl [OPTION] [COMMAND]
bash

Mõned käsud viitavad konk­reet­se­tele res­surs­si­dele (näiteks Docker). Systemd ter­mi­no­loo­gias ni­me­ta­takse neid üksusteks. Sel juhul koosneb käsk vastavast juhisest ja kä­sit­le­tava üksuse nimest.

Kui soovid Docker-daemoni au­to­maat­set käi­vi­ta­mist ak­ti­vee­rida (sisse lülitada) või deak­ti­vee­rida (välja lülitada), kasuta käsurea tööriista systemctl järgmiste käskudega:

sudo systemctl enable docker
sudo systemctl disable docker
bash

Käsurea tööriist systemctl võimaldab teil kont­rol­lida üksuse seisundit:

sudo systemctl status docker
bash

Kui teie Ubuntu-süsteemis on Docker-mootor aktiivne, peaks terminali väljund nägema välja nagu järgneval pildil:

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

Kui teie Docker-mootor on hetkel välja lülitatud, kuvatakse staa­tu­sena „inactive (dead)“. Sellisel juhul peate kon­tei­ne­rite käi­vi­ta­miseks Docker-daemoni käsitsi käivitama.

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

Kui soovid oma Docker-mootorit käsitsi käivitada, peatada või taas­käi­vi­tada, kasuta systemd-süsteemis ühte järg­mis­test käskudest.

Deak­ti­vee­ri­tud daemoni käi­vi­ta­miseks kasuta systemctl-i koos käskuga start:

sudo systemctl start docker
bash

Kui soovid Docker-daemoni sulgeda, kasuta selle asemel käsku stop:

sudo systemctl stop docker
bash

Mootori taas­käi­vi­ta­mine käi­vi­ta­takse käsuga restart:

sudo systemctl restart docker
bash

Kuidas kasutada Docker Hubi

Kui Docker Engine on kon­tei­nerplat­vormi süda, siis on Docker Hub selle avatud läh­te­koo­diga projekti hing. Just siin koguneb kogukond. Pil­ve­põ­hi­ses registris leiavad kasutajad kõik vajaliku, et oma Docker-ins­tal­lat­sioo­nile elu sisse puhuda.

Vee­bi­tee­nus pakub mit­me­ke­si­seid ametlikke tark­va­ra­va­rusid, mis si­sal­da­vad üle 100 000 tasuta rakenduse. Ka­su­ta­ja­tel on võimalus luua pil­diar­hiiv ja jagada seda töö­rüh­ma­dega. Lisaks aren­dus­mees­konna pa­ku­ta­vale pro­fes­sio­naal­sele tuge leiavad algajad siit ka kontakte ka­su­ta­jate ko­gu­kon­naga. GitHubis on avatud foorum, kus kogukond pakub vas­tas­ti­kust tuge.

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

Re­gist­ree­ri­mine Docker Hubis

Docker Hubis re­gist­ree­ru­mine on tasuta. Ka­su­ta­ja­tel on vaja vaid e-posti aadressi ja enda valitud Docker ID-d. See toimib hiljem isikliku re­po­si­too­riumi ni­me­ruu­mina ja annab ka­su­ta­ja­tele juur­de­pääsu kõigile Docker tee­nus­tele. Praegu hõlmab see pakkumine lisaks Docker Hubile ka Docker Cloudi, Docker Store’i ja valitud bee­taprog­ramme. Samuti võimaldab see kasutada Docker ID-d sis­se­lo­gi­miseks Docker tu­gi­kes­ku­sesse, Docker Success portaali ja Docker foo­ru­misse.

Re­gist­ree­ri­mis­prot­sess koosneb viiest etapist:

  1. Vali oma Docker ID: Taotluse esimeses osas vali ka­su­ta­ja­nimi, mida ka­su­ta­takse hiljem sinu isikliku Docker ID-na.
  2. Sisesta e-posti aadress: Sisesta oma praegune e-posti aadress. Pane tähele, et pead oma re­gist­ree­ri­mist Docker Hubis e-posti teel kinnitama.
  3. Vali parool: Vali salajane parool.
  4. Esitage re­gist­ree­ri­mine: klõpsake nuppu „Re­gist­reeru”, et esitada re­gist­ree­ri­mine. Kui andmed on täie­li­kult edastatud, saadab Docker teie määratud postkasti lingi, mille kaudu saate oma e-posti aadressi kinnitada.
  5. Kinnitage oma e-posti aadress: kinnitage oma e-posti aadress, klõpsates kin­ni­tus­lin­gil.

Docker-projekti vee­bi­tee­nu­sed on pärast re­gist­ree­ri­mist brauseris kohe kät­te­saa­da­vad. Siin saate luua hoidlaid ja töörühmi või otsida Docker Hubist avalikke ressursse funkt­siooni „Explore“ abil.

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

Võite re­gist­reeruda ka otse oma ope­rat­sioo­ni­süs­teemi ter­mi­na­lis käsuga *docker login*. Käsu ük­sik­as­ja­lik kirjeldus on toodud Docker’i do­ku­men­tat­sioo­nis.

Põ­hi­mõt­te­li­selt on Docker Hub kät­te­saa­dav ka neile, kellel pole kontot ega Docker ID-d. Sel juhul saab aga laadida alla ainult avalikest hoid­la­test pärit kujutisi. Oma kujutiste üleslaa­di­mine (push) ei ole ilma Docker ID-ta võimalik.

Loo hoidlad Docker Hubis

Tasuta Docker Hubi konto sisaldab ühte pri­vaat­set hoidlat ja võimaldab luua piiramatu arvu avalikke hoidlaid. Kui vajate rohkem pri­vaat­seid hoidlaid, saate need tasulise uuenduse abil avada.

Hoidla loomiseks tegutse järg­mi­selt:

  1. Vali nimeruumi: äsja loodud hoidlad mää­ra­takse au­to­maat­selt sinu Docker-ID nimeruumi. Sul on ka võimalus sisestada selle or­ga­ni­sat­siooni ID, mille liige sa oled.
  2. Märgista hoidla: Sisesta äsja loodud hoidla nimi.
  3. Lisage kirjeldus: Lisage oma re­po­si­too­riu­mile lü­hi­kir­jel­dus.
  4. Määra nähtavus: otsusta, kas hoidla peaks olema avalikult nähtav (avalik) või kät­te­saa­dav ainult sulle või su or­ga­ni­sat­sioo­nile (privaatne).

Kinnita oma si­ses­tused, klõpsates nuppu „Loo”.

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

Loo mees­kon­nad ja or­ga­ni­sat­sioo­nid

Hubi abil pakub Docker pil­ve­põ­hist platvormi, kus kasutaja enda loodud kujutisi hal­la­takse keskelt ja jagatakse mugavalt töö­rüh­ma­dega. Docker’i ter­mi­no­loo­gias ni­me­ta­takse neid or­ga­ni­sat­sioo­ni­deks. Nii nagu ka­su­ta­ja­kon­ti­delgi, saavad or­ga­ni­sat­sioo­nid in­di­vi­duaal­sed ID-d, mille kaudu kujutisi saab üles laadida ja alla laadida. Or­ga­ni­sat­siooni siseseid õigusi ja rolle saab määrata mees­kon­dade kaudu. Näiteks on mees­kon­nale „Owners” määratud ka­su­ta­ja­tel õigus luua pri­vaat­seid või avalikud hoidlad ning määrata juur­de­pää­su­õi­gusi.

Töörühmi saab luua ja hallata ka otse juht­pa­neeli kaudu. Li­sa­tea­vet or­ga­ni­sat­sioo­nide ja mees­kon­dade kohta leiate Docker’i do­ku­men­tat­sioo­nist.

Töö piltide ja kon­tei­ne­ri­tega

Kuna Docker Hub on ametlike Docker-res­surs­side peamine kon­takt­punkt, on see meie läh­te­punk­tiks käes­ole­vas sis­se­ju­ha­tu­ses piltide ja kon­tei­ne­rite kä­sit­le­misse. Aren­da­jate meeskond on loonud näi­dis­pildi „whalesay“, mis on järgneva Docker-õpetuse aluseks.

Lae alla Docker-pildid

Pildi „whalesay “ leiate, kui külastate Docker Hubi vee­bi­saiti ja sisestate Docker’i logo kõrval asuvasse ot­sin­gu­ri­basse sõna „whalesay “.

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

Klõpsake ot­sin­gu­tu­le­mus­tes peal­kir­jaga „docker/whalesay“ ressursil, et avada selle pildi avalik hoidla.

Docker-hoidlad on alati üles ehitatud sama skeemi järgi. Lehe päises leiavad kasutajad pildi pealkirja, hoidla ka­te­goo­ria ja viimase üleslaa­di­mise aja (last pushed).

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

Iga Docker-hoidla pakub ka järgmisi infokaste:

  1. Kirjeldus: ük­sik­as­ja­lik kirjeldus, mis sisaldab ta­va­li­selt ka­su­tus­ju­hi­seid
  2. Docker pull-käsk: käsurea käsk, mida ka­su­ta­takse pildi al­la­laa­di­miseks hoidlast (pull)
  3. Omanik: Teave hoidla looja kohta
  4. Kom­men­taa­rid: Kom­men­taa­ride osa lehe lõpus

Re­po­si­too­riumi in­fo­kas­ti­dest selgub, et „whalesay” on avatud läh­te­koo­diga Perl-skripti „cowsay” mo­di­fi­kat­sioon. Tony Monroe poolt 1999. aastal loodud programm ge­ne­ree­rib lehma kujulise ASCII-graafiku, mis kuvatakse koos sõnumiga kasutaja ter­mi­na­lis.

Docker/whalesay al­la­laa­di­miseks kasuta käsku docker pull:

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

Käsk docker pull annab daemonile käsu laadida pilt hoidlast. Pildi nime (NAME) si­ses­ta­mi­sega mää­ra­takse, millise pildi tegemist on. Samuti on võimalik anda Dockerile juhiseid soovitud käsu täitmise kohta (OPTIONS). Va­li­ku­liste sisendite hulka kuuluvad sildid (:TAG) ja in­di­vi­duaal­sed iden­ti­fit­see­ri­mis­numb­rid (@DIGEST), mis või­mal­da­vad alla laadida pildi konk­reetse versiooni.

Docker/whalesay-pildi kohaliku koopia saab järgmise käsuga:

docker pull docker/whalesay
bash

Üldiselt võid selle sammu vahele jätta. Kui soovid kon­tei­ne­rit käivitada, laadib Docker-daemon au­to­maat­selt alla need pildid hoidlast, mida ta ko­ha­li­kust süs­tee­mist ei leia.

Käivita Docker-pildid kon­tei­ne­ri­tena

Docker-pildi käi­vi­ta­miseks kasuta käsku docker run:

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

Käsu docker run ainus ko­hus­tus­lik osa on soovitud Docker-pildi nimi. Kuid kon­tei­ne­rit käi­vi­ta­des on teil võimalus määrata ka li­sapa­ra­meetreid, TAG-e ja DIGEST-e. Lisaks saab käsku docker run kom­bi­nee­rida teiste käskudega, mis käi­vi­ta­takse kohe, kui konteiner tööle hakkab. Sel juhul kir­ju­ta­takse üle CMD (COMMAND, mille määrab pildi looja ja mis käi­vi­ta­takse au­to­maat­selt kon­tei­neri käi­vi­ta­misel). Muid va­li­ku­lisi sea­dis­tusi saab määrata täien­da­vate ar­gu­men­tide (ARG…) abil. See võimaldab näiteks lisada ka­su­ta­jaid või edastada kesk­kon­na­muu­tu­jaid.

Kasuta käsurea käsku

docker run docker/whalesay cowsay boo
bash

et laadida ole­mas­olev Perl-skript alla ku­ju­ti­sena ja käivitada see kon­tei­ne­ris. Sa näed, et whalesay erineb oluliselt algsest skriptist.

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’

Kui käi­vi­ta­takse pilt „docker/whalesay“, kuvab skript ASCII-graafika vaala kujul ning teks­ti­sõ­numi „boo“, mis on edastatud ter­mi­na­lis käsuga „cowsay “.

Nagu ka test­käi­vi­tuse puhul, otsib daemon kõi­ge­pealt soovitud kujutist ko­ha­li­kust fai­li­ka­ta­loo­gist. Kuna sama nimega paketti ei leidu, al­ga­ta­takse al­la­laa­di­mine Docker-hoidlast. Seejärel käivitab daemon muudetud cowsay-programmi. Kui see on lõpule viidud, suletakse konteiner au­to­maat­selt.

Nagu cowsay, pakub ka Docker’i whalesay võimalust sekkuda programmi käiku, et mõjutada ter­mi­na­lis kuvatavat teksti. Proovi seda funkt­siooni, asendades väl­jund­käs­kus sõna „boo“ mõne muu stringiga või näiteks mõne halva vaa­la­vit­saga.

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

Kuva kõik kohalikus süsteemis olevad Docker-pildid

Kui te ei ole kindel, kas olete konk­reetse pildi juba alla laadinud, saate vaadata ülevaadet kõigist teie kohalikus süsteemis olevatest piltidest. Kasutage järgmist käsurea käsku:

sudo docker image
bash

Käsk docker images (või docker image ls) kuvab kõik kohalikud pildid, seal­hul­gas faili suuruse, sildid ja pildi ID.

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

Kui käivitad kon­tei­neri, laa­di­takse selle aluseks olev pilt allikast alla koopia ja sal­ves­ta­takse püsivalt sinu arvutisse. See säästab aega, kui soovid pilti hiljem uuesti kasutada. Uus al­la­laa­di­mine al­ga­ta­takse ainult siis, kui pildi allikas muutub, näiteks kui allikas on saadaval uus versioon.

Kuva kõik kohalikus süsteemis olevad kon­tei­ne­rid

Kui soovid kuvada ülevaate kõigist süsteemis käi­mas­ole­va­test või varem käi­vi­ta­tud kon­tei­ne­ri­test, kasuta käsurea käsku docker ps koos valikuga --all (lühend: -a):

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

Terminali väljund sisaldab sellist teavet nagu vastava kon­tei­neri ID, aluseks olev pilt, kon­tei­neri käi­vi­ta­misel käi­vi­ta­tud käsk, kon­tei­neri käi­vi­ta­mise aeg ja staatus.

Kui soovid näha ainult neid kon­tei­ne­rid, mis hetkel sinu süsteemis töötavad, kasuta käsurea käsku docker ps ilma muude va­li­ku­teta:

sudo docker ps
bash

Praegu ei tohiks teie süsteemis siiski ühtegi töötavat kon­tei­ne­rit olla.

Docker-piltide loomine

Meie Docker-õpetus on küll näidanud, kuidas leida pilte Docker Hubist, neid alla laadida ja käivitada igas süsteemis, kuhu on pai­gal­da­tud Docker-mootor. Kuid Dockeriga ei saa te mitte ainult kasutada registris olevat laia valikut rakendusi. Platvorm pakub ka mit­me­su­gu­seid võimalusi oma piltide loomiseks ja nende ja­ga­miseks teiste aren­da­ja­tega.

Selle Docker-õpetuse sis­se­ju­ha­ta­va­tes pea­tük­ki­des õppisid sa juba, et iga Docker-pilt põhineb Doc­ker­file’il. Doc­ker­file’i võib kujutada kui piltide koos­ta­mise mallina. Need on lihtsad teks­ti­fai­lid, mis si­sal­da­vad kõiki juhiseid, mida Docker vajab pildi loomiseks. Järg­mis­tes sammudes õpid, kuidas sellist Doc­ker­file’i kirjutada ja kuidas anda Dockerile juhis seda oma pildi alusena kasutada.

  1. Uue kataloogi loomine: Docker aren­da­jate meeskond soovitab iga Doc­ker­file’i jaoks luua uue kataloogi. Linuxis saab katalooge ter­mi­na­lis hõlpsasti luua. Kasuta järgmist käsurea käsku, et luua kataloog nimega my­doc­ker­build:
mkdir mydockerbuild
bash
Image: Ubuntu terminal: The command mkdir
Create new di­rec­to­ries with the command mkdir
  1. Liikumine uues ka­ta­loo­gis: Kasutage käsku cd, et liikuda äsja loodud töö­ka­ta­loo­gis.
cd mydockerbuild
bash
Image: Ubuntu terminal: The command cd
With the help of the cd command, switch to another working directory
  1. Uue teks­ti­faili loomine: Ubuntu kesk­kon­nas saad teks­ti­faile hõlpsasti luua ka terminali kaudu. Selleks kasuta mõnda teks­ti­re­dak­to­rit, näiteks Nano või Vim. Loo ka­ta­loo­gis my­doc­ker­build teks­ti­fail nimega Doc­ker­file.
nano Dockerfile
bash
Image: Ubuntu terminal: Create text files with Nano
The text editor Nano is pre­ins­tal­led on all Ubuntu versions
  1. Doc­ker­file’i kir­ju­ta­mine: äsja loodud teks­ti­fail on teie enda loodud pildi koos­ta­mise juhis. Selle asemel, et pilt täiesti nullist prog­ram­mee­rida, kasutame selles Docker-õpetuses mallina näi­dis­pilti docker/whalesay. See in­teg­ree­ri­takse Doc­ker­file’is käsuga FROM. Kasutage sildit :latest, et viidata pildi uusimale ver­sioo­nile.
FROM docker/whalesay:latest

Seni on docker/whalesay töötanud nii, et kasutaja sisestab ise sõnad. Ter­mi­na­lis kuvatakse täpselt see tekst, mille si­ses­ta­sid, koos kon­tei­neri käi­vi­ta­mise käsuga. Kuid oleks huvitavam, kui skript ge­ne­ree­riks au­to­maat­selt uut väl­jund­teksti. Seda saab teha näiteks iga Linuxi süsteemis ole­mas­oleva fortunes-programmi abil. Fortunes’i põhiline funkt­sioon on ge­ne­ree­rida õn­ne­küp­siste ütlemisi ja hu­moo­ri­kaid aforisme. Kasutage järgmist käsku, et uuendada oma praegust kohalikku pakettide indeksit ja ins­tal­lida fortunes:

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

Seejärel määratle CMD-käsk. See käi­vi­ta­takse pärast RUN-käsku, kui seda pole käsuga (docker run image CMD) ümber kir­ju­ta­tud. Kasuta järgmist käsku, et käivitada programm fortunes koos valikuga -a („Vali kõikidest and­me­baasi­dest”) ja kuvada väljund ter­mi­na­lis programmi cowsay abil:

CMD /usr/games/fortune -a | cowsay

Teie Doc­ker­file peaks välja nägema järgmine:

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

Märkus: Doc­ker­file’is olevad käsud on alati ühe reavahega ja algavad alati märk­sõ­naga. Süntaks ei erista suurtähti ja väi­ke­tähti, seega ei ole oluline, kas kirjutad suurtähti või väi­ke­tähti. Märk­sõ­nade puhul on siiski keh­tes­ta­tud ühtne suur- ja väiketähe ka­su­ta­mine.

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. Salvesta teks­ti­fail: Salvesta oma sisestus. Kui kasutad Nano-re­dak­to­rit, salvesta klah­vi­kom­bi­nat­sioo­niga [CTRL] + [O] ja kinnita klahviga [ENTER]. Nano kuvab teate, et valitud faili on kir­ju­ta­tud kolm rida. Sulge teks­ti­re­dak­tor klah­vi­kom­bi­nat­sioo­niga [CTRL] + [X].
  2. Loo pilt Doc­ker­file’ina: et luua pilt Doc­ker­file’ist, mine esmalt kataloogi, kus teks­ti­fail asub. Alusta pildi loomist käsurea käsklu­sega docker build. Kui soovid pildile in­di­vi­duaalse nime anda või sellele sildi lisada, kasuta valikut -t, millele järgneb soovitud nime ja sildi kom­bi­nat­sioon. Stan­dard­vor­ming on name:tag.

Käes­ole­vas näites tuleks luua pilt nimega docker-whale:

docker build -t docker-whale .
bash

Viimane osa näitab, et vastav Doc­ker­file asub valitud ka­ta­loo­gis. Sul on ka võimalus määrata al­li­ka­fai­lide jaoks failitee või URL-aadress.

Kom­pi­lee­ri­mis­prot­sess algab kohe, kui käsk on kin­ni­ta­tud klahviga [ENTER]. Esmalt kont­rol­lib Docker-daemon, kas tal on olemas kõik pildi loomiseks vajalikud failid. Docker-ter­mi­no­loo­gias ni­me­ta­takse seda kok­ku­võt­li­kult „kon­teks­tiks”.

Siis asub Docker/whalesay -pilt sildiga :latest järgmises asukohas :

Kui pildi loomiseks vajalik kontekst on juba täie­li­kult olemas, käivitab Docker-daemon FROM-käskuga lisatud pil­di­malli ajutises kon­tei­ne­ris ja liigub edasi järgmise käsuni Doc­ker­file’is. Käes­ole­vas näites on see RUN-käsk, mis käivitab programmi fortunes ins­tal­li­mise.

Iga pildi loomise etapi lõpus annab Docker sulle selle etapis loodud vastava kihi ID. See tähendab, et iga aluseks oleva Doc­ker­file’i rida vastab sellel põhineva pildi ühele kihile.

Kui käsk RUN on lõpetatud, peatab Docker-daemon selle jaoks loodud kon­tei­neri, eemaldab selle ja käivitab uue ajutise kon­tei­neri CMD-käsu kihi jaoks. Loo­mis­prot­sessi lõpus lõ­pe­ta­takse ka see ajutine konteiner ja eemal­da­takse. Docker annab sulle uue pildi ID:

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

Teie äsja loodud pilt on teie ko­ha­li­kult sal­ves­ta­tud piltide ülevaates leitav nime docker-whale all.

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

Et käivitada konteiner äsja loodud pildi põhjal, kasuta käsurea käsku sudo docker run koos pildi nimega:

sudo docker run docker-whale
bash

Kui pilt loodi Doc­ker­file’i abil õigesti, peaks su vaal sind nüüd enam-vähem tarkade sõnadega ins­pi­ree­rima. Märkus: iga kord, kui sa kon­tei­ne­rit uuesti käivitad, ge­ne­ree­ri­takse uus lause.

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

Märgista Docker-pildid ja lae need Docker Hubi üles

Kui soovid oma ko­han­da­tud docker-whale-pildi hubisse üles laadida ja teha selle kät­te­saa­da­vaks kas ko­gu­kon­nale või töö­rüh­male, pead selle kõi­ge­pealt siduma sama nimega hoidlast oma isiklikus ni­me­ruumis. Docker-ter­mi­no­loo­gias ni­me­ta­takse seda sammu mär­gis­ta­miseks.

Pildi aval­da­miseks Docker Hubis tegutse järg­mi­selt:

  1. Loo hoidla: logi Docker Hubisse sisse oma Docker ID ja isikliku parooliga ning loo avalik hoidla nimega 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. Määra pildi ID: Määra oma ko­han­da­tud pildi „docker-whale” ID käsurea käsu docker images abil.
Image: Overview of all local images in the Ubuntu terminal
The command docker images lists all images that are saved on your system

Meie puhul on pildi ID a8f2048c9ab8. Seda on vaja järgmises etapis mär­gis­ta­miseks.

  1. Pildi mär­gis­ta­mine: Märgista docker-whale-pilt kä­su­reaprog­rammi docker tag abil järg­mi­selt:
sudo docker tag [Image-ID][Docker-ID]/[Image-Name]:[TAG]
bash

Käesoleva näite puhul on mär­gis­ta­mise käsurea käsk järgmine:

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

Saad kont­rol­lida, kas oled oma pildi õigesti mär­gis­ta­nud, kasutades ülevaadet docker images. Re­po­si­too­riumi nimi peaks nüüd sisaldama sinu Docker-ID-d.

Image: Ubuntu terminal: Image overview before and after tagging
Link images with your Docker ID using the command docker tag
  1. Pildi üleslaa­di­mine: Pildi üleslaa­di­miseks peate esmalt sisse logima Docker Hubi. Seda saab teha käsuga docker login.
sudo docker login
bash

Seejärel palub terminal teil sisestada oma ka­su­ta­ja­nimi (Docker ID) ja parool.

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

Kui sis­se­lo­gi­mine õnnestus, kasuta käsurea käsku docker push, et laadida oma pilt üles äsja loodud hoidlasse.

sudo docker push [Namespace]/docker-whale
bash

Üleslaa­di­mine peaks võtma vaid paar sekundit. Praegune staatus kuvatakse ter­mi­na­lis.

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

Logi brauseri kaudu Docker Hubisse sisse, et vaadata üleslaa­di­tud pilti.

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

Kui soovid üles laadida rohkem kui ühe pildi ühe hoidla kohta, kasuta erinevaid sildid, et pakkuda oma pilte eri­ne­va­tes ver­sioo­ni­des. Näiteks:

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

Ülevaade eri­ne­va­test pil­di­ver­sioo­ni­dest on leitav Docker Hubi hoidlas va­he­kaar­dil „Tags”.

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

Erinevate pro­jek­tide pildid tuleks siiski pakkuda eraldi hoid­la­tena.

Kui üleslaa­di­mine õnnestus, on teie ko­han­da­tud pilt nüüd avalikus hoidlas kät­te­saa­dav kõigile Docker-ka­su­ta­ja­tele üle kogu maailma.

  1. Proo­vi­käi­vi­tus: Kont­rol­lige, kas faili üleslaa­di­mine õnnestus, proovides pilti alla laadida.

Pange tähele, et sama sildiga uue koopia al­la­laa­di­miseks tuleb kõi­ge­pealt kustutada pildi kohalik versioon. Vastasel juhul teatab Docker, et soovitud pilt on praeguses ver­sioo­nis juba olemas.

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

Kohaliku Docker-pildi kus­tu­ta­miseks kasuta käsurea käsku docker rmi koos vastava pildi ID-ga. See mää­ra­takse kindlaks ta­va­pä­ra­sel viisil docker images abil. Kui Docker teatab konf­lik­tist, näiteks seetõttu, et pildi ID-d ka­su­ta­takse mitmes hoidlas või on see kasutusel mõnes kon­tei­ne­ris, korda käsk koos valikuga --force (lü­hen­da­tult*-f* ), et kus­tu­ta­mine jõustada.

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

Kuva uuesti ülevaade kõigist ko­ha­li­kest piltidest:

sudo docker Images
bash

Kus­tu­ta­tud elemendid ei tohiks enam terminali väljundis ilmuda. Lae nüüd re­po­si­too­riu­mis olevat pull-käsku kasutades Docker Hubist alla pildi uus koopia.

sudo docker pull [Namespace]/docker-whale
bash
Image: Ubuntu terminal: Download from the Docker hub
The pre­viously published image is success­fully down­loaded

Muud Dockeriga seotud teemad ja õpetused

Dockeri maailm on lai ning aja jooksul on Docker-töö­riis­ta­dest kujunenud elav öko­süs­teem. Docker on eriti kasulik süs­tee­miad­mi­nist­raa­to­ri­tele, eriti kui nad haldavad keerukaid rakendusi, kus mitu kon­tei­ne­rit töötab pa­ral­leel­selt eri­ne­va­tes süs­teemi­des. Docker pakub mit­me­su­gu­seid funkt­sioone selliste klastrite koor­di­nee­ri­miseks. Li­sa­tea­vet selle kohta leiate meie artiklist, mis käsitleb Docker-i koor­di­nee­ri­mist Swarmi ja Compose’i abil.

Di­gi­taal­ses juhendis on Dockeriga töö­ta­miseks veel li­sa­ju­hen­did:

  • Docker-hoidla sea­dis­ta­mine
  • Docker-kon­tei­ne­rite mahud
  • Docker: va­run­da­mine ja taas­ta­mine
  • Dockeri ins­tal­li­mine ja käi­vi­ta­mine Linuxi serveris
  • Docker Compose’i juhend

Docker sobib mit­me­su­gus­teks ka­su­tus­juh­tu­deks. Di­gi­taal­sest juhendist leiate järgmised õpetused:

Docker ei ole alati parim valik iga rakenduse jaoks. Ühes meie artiklis tut­vus­ta­takse po­pu­laar­se­maid Dockerile al­ter­na­tiive. Lisaks on meil palju artikleid, milles võr­rel­dakse Dockeri teiste plat­vormi­dega:

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