V našem Doc­ker­je­vem vodiču vam pred­sta­vlja­mo vir­tu­a­li­za­cij­sko platformo Docker in vam s pre­pro­sti­mi navodili pokažemo, kako upo­ra­blja­ti Docker v sistemu Ubuntu 22.04.

Zgradba in zna­čil­no­sti Dockerja

»Izdelajte, objavite in izvajajte katero koli apli­ka­ci­jo, kjer koli« – to je moto podjetja Docker. Ta od­pr­to­ko­dna platforma za kon­tej­ner­je ponuja pri­la­go­dlji­vo in ener­get­sko učin­ko­vi­to al­ter­na­ti­vo za emulacijo strojne opreme na podlagi vir­tu­al­nih strojev (VM).

Medtem ko tra­di­ci­o­nal­na vir­tu­a­li­za­ci­ja strojne opreme temelji na zagonu več go­stu­jo­čih sistemov na skupnem go­sti­telj­skem sistemu, se apli­ka­ci­je Docker izvajajo kot ločeni procesi na istem sistemu s pomočjo kon­tej­ner­jev. To se imenuje vir­tu­a­li­za­ci­ja na podlagi kon­tej­ner­jev, znana tudi kot vir­tu­a­li­za­ci­ja na ravni ope­ra­cij­ske­ga sistema.

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

Ena od glavnih prednosti vir­tu­a­li­za­ci­je na podlagi kon­tej­ner­jev je, da lahko apli­ka­ci­je z raz­lič­ni­mi zahtevami delujejo ločeno druga od druge, ne da bi bilo za to potrebno vzdr­že­va­ti ločen gostujoči sistem. Poleg tega je s kon­tej­ner­ji mogoče apli­ka­ci­je raz­po­re­di­ti na različnih plat­for­mah in v različnih in­fra­struk­tu­rah, ne da bi se morale pri­la­ga­ja­ti strojnim ali pro­gram­skim kon­fi­gu­ra­ci­jam go­sti­telj­ske­ga sistema.

Docker je najbolj pri­lju­bljen pro­gram­ski projekt, ki upo­rab­ni­kom ponuja teh­no­lo­gi­jo vir­tu­a­li­za­ci­je na podlagi kon­tej­ner­jev. Ta od­pr­to­ko­dna platforma temelji na treh osnovnih kom­po­nen­tah. Za zagon kon­tej­ner­jev upo­rab­ni­ki po­tre­bu­je­jo le Dockerjev motor ter posebne Doc­ker­je­ve slike, ki jih lahko pridobijo prek Docker Hub ali ustvarijo sami.

Doc­ker­je­ve slike

Podobno kot virtualni stroji tudi Docker-kon­tej­ner­ji temeljijo na Docker-slikah. Slika je predloga, ki je samo za branje in vsebuje vsa navodila, ki jih Docker-motor potrebuje za ustvar­ja­nje kon­tej­ner­ja. Docker-slika je opisana kot pre­no­slji­va slika kon­tej­ner­ja v obliki besedilne datoteke, imenovane tudi Doc­ker­fi­le. Če je treba kontejner zagnati v sistemu, se najprej naloži paket z ustrezno sliko, če ta lokalno še ne obstaja. Naložena slika za­go­ta­vlja potrebni datotečni sistem, vključno z vsemi parametri za izvajanje. Kontejner lahko obrav­na­va­mo kot tekoči proces slike.

Docker Hub

Docker Hub je spletni register za re­po­zi­to­ri­je pro­gram­ske opreme, nekakšna knjižnica za Docker slike. Spletna storitev je raz­de­lje­na na javni in zasebni del. Javni del upo­rab­ni­kom omogoča, da naložijo svoje lastne slike in jih delijo s sku­pno­stjo. Tu je na voljo vrsta uradnih slik, ki jih je pri­pra­vi­la razvojna ekipa Dockerja ter uve­lja­vlje­ni od­pr­to­ko­dni projekti. Podobe, naložene v zasebni del registra, niso javno dostopne, zato jih je mogoče deliti na primer znotraj no­tra­nje­ga kroga podjetja ali s pri­ja­te­lji in znanci. Do Docker Hub je mogoče dostopati na hub.docker.com.

Dockerjev motor

Srce projekta Docker pred­sta­vlja Docker Engine. Gre za od­pr­to­ko­dno apli­ka­ci­jo tipa odjemalec-strežnik, ki je v trenutni različici na voljo vsem upo­rab­ni­kom na vseh uve­lja­vlje­nih plat­for­mah.

Osnovna ar­hi­tek­tu­ra Doc­ker­je­ve­ga motorja je raz­de­lje­na na tri kom­po­nen­te: demon s stre­žni­ški­mi funk­ci­ja­mi, pro­gram­ski vmesnik (API), ki temelji na pro­gram­skem paradigmu REST (Re­pre­sen­ta­ti­o­nal State Transfer), ter terminal ope­ra­cij­ske­ga sistema (vmesnik ukazne vrstice, CLI) kot upo­rab­ni­ški vmesnik (odjemalec).

  • Dockerjev demon: Kot strežnik za Dockerjev motor se uporablja proces demon. Dockerjev demon teče v ozadju go­sti­telj­ske­ga sistema in se uporablja za centralno upra­vlja­nje Doc­ker­je­ve­ga motorja. Ta funkcija ustvarja in upravlja vse slike, kon­tej­ner­je ali omrežja.
  • REST-API: REST-API določa niz vmesnikov, ki drugim programom omogočajo ko­mu­ni­ka­ci­jo z Docker daemonom in mu dajejo navodila. Eden od teh programov je terminal ope­ra­cij­ske­ga sistema.
  • Terminal: Docker kot od­je­mal­ski program uporablja terminal ope­ra­cij­ske­ga sistema. Ta, in­te­gri­ran z Doc­ker­je­vim demonom prek REST-API, omogoča upo­rab­ni­kom, da ga nad­zo­ru­je­jo prek skriptov ali upo­rab­ni­ških vnosov.
Tip

Leta 2017 je bil Docker Engine pre­i­me­no­van v Docker Community Edition (skrajšano Docker CE), vendar se v uradni do­ku­men­ta­ci­ji in Doc­ker­je­vih re­po­zi­to­ri­jih večinoma še vedno uporablja staro ime. Poleg Docker CE obstaja tudi Docker En­ter­pri­se Edition (Docker EE), ki ponuja nekatere dodatne funkcije. Vendar pa ta različica ni brez­plač­na in je bolj primerna za podjetja.

Z ukazi Dockerja je mogoče upo­rab­ni­ške pro­gram­ske kon­tej­ner­je zagnati, ustaviti in upra­vlja­ti ne­po­sre­dno iz terminala. Na demon se dostopa prek ukaza docker in ukazov, kot so build, pull ali run. Odjemalec in strežnik lahko delujeta na istem sistemu. Upo­rab­ni­ki imajo tudi možnost dostopa do Docker daemona na drugem sistemu. Odvisno od vrste vzpo­sta­vlje­ne povezave poteka ko­mu­ni­ka­ci­ja med od­je­mal­cem in stre­žni­kom prek REST-API, prek UNIX vtičnic ali prek omrežnega vmesnika.

Naslednja slika prikazuje med­se­boj­no delovanje po­sa­me­znih komponent Dockerja na primeru ukazov docker build, docker pull in docker run:

Image: Schematic representation of the Docker architecture
'The Docker ar­chi­tec­tu­re is based on the co­o­pe­ra­ti­on of the client (terminal'), strežnik (Dockerjev demon) in register (Docker Hub).“

Ukaz docker build da Doc­ker­je­ve­mu demonu navodilo, naj ustvari sliko (črtkana črta). Za to mora biti na voljo ustrezen Doc­ker­fi­le. Če slike ne želimo ustvariti, ampak jo namesto tega naložiti iz re­po­zi­to­ri­ja v Docker Hubu, se uporabi ukaz docker pull (pre­ki­nje­na črta). Če se demon Docker prek docker run naroči, naj zažene kontejner, program v ozadju preveri, ali je ustrezna slika kon­tej­ner­ja na voljo lokalno. Če je, se kontejner zažene (ne­pre­ki­nje­na črta). Če demon slike ne najde, samodejno sproži prenos iz re­po­zi­to­ri­ja.

Delo z Dockerjem

Zdaj je čas, da se seznanite z apli­ka­ci­ja­mi na platformi za kon­tej­ner­je. Če še niste namestili Doc­ker­je­ve­ga motorja, lahko to storite prek terminala v sistemu Linux. Navodila za to najdete v našem članku z naslovom»Na­me­sti­tev Dockerja v Ubuntu 22.04«. V na­da­lje­va­nju boste izvedeli, kako upra­vlja­ti Dockerjev motor iz terminala, kaj vam lahko ponudi Docker Hub in zakaj bi Doc­ker­je­vi kon­tej­ner­ji lahko korenito spre­me­ni­li vaš način dela z apli­ka­ci­ja­mi.

Kako upra­vlja­ti Dockerjev motor

Od različice 16.04 Ubuntu za upra­vlja­nje procesov uporablja program v ozadju systemd(kratica za »system daemon«).Systemd jeproces init, ki se uporablja tudi v drugih di­s­tri­bu­ci­jah Linuxa, kot so RHEL, CentOS ali Fedora. Običajnodobi systemdiden­ti­fi­ka­cij­sko številko procesa 1. Kot prvi proces v sistemu je ta demon odgovoren za zagon, nadzor in zaključek vseh na­sle­dnjih procesov. V prejšnjih raz­li­či­cah Ubunta (14.10 in starejših) to funkcijo prevzameprogram v ozadju upstart.

Dockerjev demon je mogoče upra­vlja­ti tudi prek systemd. Pri stan­dar­dni na­me­sti­tvi je platforma za kon­tej­ner­je na­sta­vlje­na tako, da se demon samodejno zažene ob zagonu sistema. To privzeto na­sta­vi­tev je mogoče pri­la­go­di­ti z orodjem za ukazno vrstico systemctl.

Z ukazom systemctl pošiljate ukaze sistemu systemd, da nadzirate proces ali pridobite podatke o njegovem stanju. Sintaksa takšnega ukaza je naslednja:

systemctl [OPTION] [COMMAND]
bash

Nekateri ukazi se nanašajo na določene vire (na primer Docker). V ter­mi­no­lo­gi­ji systemd se ti imenujejo enote. V tem primeru je ukaz se­sta­vljen iz ustre­zne­ga navodila in imena enote, na katero se nanaša.

Če želite vklopiti samodejni zagon demon Dockerja (vklopiti) ali ga izklopiti (izklopiti), uporabite orodje za ukazno vrstico systemctl z na­sle­dnji­mi ukazi:

sudo systemctl enable docker
sudo systemctl disable docker
bash

Orodje za ukazno vrstico systemctl omogoča pre­ver­ja­nje stanja enote:

sudo systemctl status docker
bash

Če je Dockerjev motor na vašem sistemu Ubuntu aktiven, naj bi izpis v terminalu izgledal kot na naslednji sliki:

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

Če je vaš Docker-motor trenutno iz­klo­pljen, boste prejeli statusno sporočilo »inactive (dead)«. V tem primeru morate za zagon kon­tej­ner­jev ročno zagnati Docker-demona.

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

Če želite ročno zagnati, ustaviti ali ponovno zagnati Dockerjev motor, uporabite eno od na­sle­dnjih ukazov za sistem systemd.

Če želite zagnati one­mo­go­če­ne­ga demon, uporabite systemctl v kom­bi­na­ci­ji z ukazom start:

sudo systemctl start docker
bash

Če želite ustaviti Dockerjev demon, uporabite ukaz stop:

sudo systemctl stop docker
bash

Z ukazom restart se sproži ponovni zagon motorja:

sudo systemctl restart docker
bash

Kako upo­ra­blja­ti Docker Hub

Če je Docker Engine srce platforme za kon­tej­ner­je, je Docker Hub duša tega od­pr­to­ko­dne­ga projekta. Tu se zbira skupnost. V registru v oblaku lahko upo­rab­ni­ki najdejo vse, kar po­tre­bu­je­jo, da svojo na­me­sti­tev Dockerja napolnijo z ži­vlje­njem.

Spletna storitev ponuja različne uradne re­po­zi­to­ri­je z več kot 100.000 brez­plač­ni­mi apli­ka­ci­ja­mi. Upo­rab­ni­ki imajo možnost ustvariti arhiv slik in jih skupaj upo­ra­blja­ti z delovnimi skupinami. Poleg strokovne podpore, ki jo nudi razvojna ekipa, lahko začetniki tukaj najdejo povezave do upo­rab­ni­ške skupnosti. Na GitHubu je na voljo forum za podporo skupnosti.

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

Re­gi­stra­ci­ja v Docker Hubu

Re­gi­stra­ci­ja v Docker Hubu je brez­plač­na. Upo­rab­ni­ki po­tre­bu­je­jo le e-poštni naslov in izbrano Docker ID. To kasneje služi kot osebni imenski prostor re­po­zi­to­ri­ja in upo­rab­ni­kom omogoča dostop do vseh storitev Docker. Trenutno ta ponudba poleg Docker Hub vključuje tudi Docker Cloud, Docker Store in izbrane beta programe. Omogoča tudi uporabo Docker ID za prijavo v center za podporo Docker, portal Docker Success in forum Docker.

Postopek re­gi­stra­ci­je obsega pet korakov:

  1. Izberite svoj Docker ID: V prvem delu prijave izberite upo­rab­ni­ško ime, ki ga boste kasneje upo­ra­blja­li kot svoj osebni Docker ID.
  2. Vnesite e-poštni naslov: Vnesite svoj trenutni e-poštni naslov. Upo­šte­vaj­te, da boste morali svojo re­gi­stra­ci­jo pri Docker Hubu potrditi prek e-pošte.
  3. Izberite geslo: Izberite skrivno geslo.
  4. Potrdite re­gi­stra­ci­jo: Kliknite na »Prijavi se«, da potrdite re­gi­stra­ci­jo. Ko bodo podatki v celoti preneseni, vam bo Docker na navedeni e-poštni naslov poslal povezavo za potrditev e-poštnega naslova.
  5. Potrdite svoj e-poštni naslov: Potrdite svoj e-poštni naslov s klikom na povezavo za potrditev.

Spletne storitve projekta Docker so na voljo takoj po re­gi­stra­ci­ji v br­skal­ni­ku. Tukaj lahko ustvar­ja­te re­po­zi­to­ri­je in delovne skupine ali pa z uporabo funkcije »Explore« iščete javne vire v Docker Hubu.

Image: Dashboard of the Docker hub
Select and set re­po­si­to­ri­es and wor­kgro­ups via the Docker hub dashboard / Source: hub.docker.com

Prijavite se lahko tudi ne­po­sre­dno v terminalu ope­ra­cij­ske­ga sistema z ukazom docker login. Podroben opis ukaza najdete v do­ku­men­ta­ci­ji Dockerja.

Načeloma je Docker Hub na voljo tudi tistim, ki nimajo računa ali Docker ID-ja. V tem primeru pa je mogoče naložiti le slike iz javnih re­po­zi­to­ri­jev. Brez Docker ID-ja ni mogoče naložiti (push) lastnih slik.

Ustvarite re­po­zi­to­ri­je v Docker Hubu

Brez­pla­čen račun na Docker Hubu vključuje eno zasebno re­po­zi­to­rij in omogoča ustvar­ja­nje po­ljub­ne­ga števila javnih re­po­zi­to­ri­jev. Če po­tre­bu­je­te več zasebnih re­po­zi­to­ri­jev, jih lahko odklenete s plačljivo nad­gra­dnjo.

Če želite ustvariti re­po­zi­to­rij, ravnajte na naslednji način:

  1. Izberite imenski prostor: Novo ustvar­je­na skladišča se samodejno dodelijo v imenski prostor vašega Docker ID-ja. Imate tudi možnost vnesti ID or­ga­ni­za­ci­je, ki ji pripadate.
  2. Označite re­po­zi­to­rij: Vnesite ime za novo ustvar­je­ni re­po­zi­to­rij.
  3. Dodajte opis: Dodajte kratek opis za vaše re­po­zi­to­rij.
  4. Nastavite vidnost: Odločite se, ali naj bo re­po­zi­to­rij javno viden (javni) ali dostopen samo vam ali vaši or­ga­ni­za­ci­ji (zasebni).

Potrdite vnesene podatke s klikom na gumb »Ustvari«.

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

Ustvar­ja­nje ekip in or­ga­ni­za­cij

Z Docker Hubom Docker ponuja platformo v oblaku, na kateri se sa­mo­stoj­no ustvar­je­ne slike centralno upra­vlja­jo in enostavno delijo z delovnimi skupinami. V Doc­ker­je­vi ter­mi­no­lo­gi­ji se te imenujejo or­ga­ni­za­ci­je. Podobno kot upo­rab­ni­ški računi tudi or­ga­ni­za­ci­je prejmejo in­di­vi­du­al­ne iden­ti­fi­ka­cij­ske številke, prek katerih je mogoče slike ponujati in prenesti. Pravice in vloge znotraj or­ga­ni­za­ci­je se lahko dodelijo prek skupin. Na primer, upo­rab­ni­ki, dodeljeni v skupino »Lastniki«, imajo po­o­bla­sti­la za ustvar­ja­nje zasebnih ali javnih re­po­zi­to­ri­jev ter do­de­lje­va­nje dostopnih pravic.

Delovne skupine je mogoče ustvar­ja­ti in upra­vlja­ti tudi ne­po­sre­dno prek nadzorne plošče. Več in­for­ma­cij o or­ga­ni­za­ci­jah in ekipah najdete v do­ku­men­ta­ci­ji Dockerja.

Delovanje s slikami in kon­tej­ner­ji

Docker Hub je kot prva točka za dostop do uradnih virov Dockerja naša iz­ho­dišč­na točka za ta uvod v ravnanje s slikami in kon­tej­ner­ji. Razvojna ekipa je pri­pra­vi­la de­mon­stra­cij­sko sliko »whalesay«, ki bo služila kot podlaga za naslednji Dockerjev vodič.

Prenesi slike Dockerja

Sliko »whalesay« najdete tako, da obiščete spletno stran Docker Hub in v iskalno polje ob logotipu Docker vnesete izraz »whalesay «.

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

V re­zul­ta­tih iskanja kliknite na vir z naslovom docker/whalesay, da odprete javno re­po­zi­to­rij za to sliko.

Re­po­zi­to­ri­ji Dockerja so vedno se­sta­vlje­ni po istem vzorcu. V glavi strani so navedeni naslov slike, ka­te­go­ri­ja re­po­zi­to­ri­ja in čas zadnjega prenosa (last pushed).

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

Vsako Doc­ker­je­vo skladišče ponuja tudi naslednja in­for­ma­cij­ska okna:

  1. Opis: Podroben opis, ki običajno vključuje navodila za uporabo
  2. Ukaz Docker pull: Direktiva ukazne vrstice, ki se uporablja za prenos slike iz re­po­zi­to­ri­ja (pull)
  3. Lastnik: In­for­ma­ci­je o ustvar­jal­cu re­po­zi­to­ri­ja
  4. Ko­men­tar­ji: Oddelek za ko­men­tar­je na koncu strani

Iz opisnih polj v re­po­zi­to­ri­ju je razvidno, da je program »whalesay« predelava od­pr­to­ko­dne­ga Perl skripta »cowsay«. Program, ki ga je leta 1999 razvil Tony Monroe, ustvari ASCII-grafiko v obliki krave, ki se skupaj s spo­ro­či­lom prikaže na upo­rab­ni­ko­vem terminalu.

Če želite prenesti docker/whalesay, uporabite ukaz docker pull:

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

Ukaz docker pull daemonu naroči, naj naloži sliko iz re­po­zi­to­ri­ja. Katero sliko želite, določite z vnosom naslova slike (NAME). Dockerju lahko tudi navedete, kako naj izvede želeni ukaz (OPTIONS). Med neobvezne vnose spadajo oznake (:TAG) in posamezne iden­ti­fi­ka­cij­ske številke (@DIGEST), ki vam omogočajo prenos določene različice slike.

Lokalno kopijo slike docker/whalesay pridobimo z na­sle­dnjim ukazom:

docker pull docker/whalesay
bash

Na splošno lahko ta korak pre­sko­či­te. Če želite zagnati kontejner, bo Dockerjev demon samodejno prenesel slike iz re­po­zi­to­ri­ja, ki jih ne najde v lokalnem sistemu.

Zaženi slike Dockerja kot kon­tej­ner­je

Za zagon slike Dockerja uporabite ukaz docker run:

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

Edini obvezni del ukaza docker run je ime želene slike Dockerja. Ko pa zaženete kontejner, imate možnost določiti tudi dodatne možnosti, oznake (TAGs) in povzetke (DIGESTs). Poleg tega se ukaz docker run lahko kombinira z drugimi ukazi, ki se izvedejo takoj ob zagonu kon­tej­ner­ja. V tem primeru se CMD (COMMAND, ki ga določi ustvar­ja­lec slike in se samodejno izvede ob zagonu kon­tej­ner­ja) prepiše. Druge neobvezne kon­fi­gu­ra­ci­je se lahko določijo z dodatnimi argumenti (ARG…). To omogoča na primer dodajanje upo­rab­ni­kov ali prenos spre­men­ljivk okolja.

Uporabi ukazno vrstico

docker run docker/whalesay cowsay boo
bash

da prenesete obstoječi Perl skript kot sliko in ga zaženete v kon­tej­ner­ju. Opazili boste, da se whalesay precej razlikuje od izvirnega 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’

Če se zažene slika docker/whalesay, skript izpiše ASCII-grafiko v obliki kita ter besedilno sporočilo »boo«, ki je bilo po­sre­do­va­no z ukazom cowsay v terminalu.

Tako kot pri preskusu demon najprej poišče želeno sliko v lokalnem imeniku. Ker paket z enakim imenom ne obstaja, se sproži prenos iz Doc­ker­je­ve­ga re­po­zi­to­ri­ja. Nato demon zažene spre­me­nje­ni program cowsay. Če se ta uspešno izvede, se kontejner samodejno zaključi.

Podobno kot cowsay tudi Dockerjev whalesay omogoča poseg v potek programa, da bi vplivali na izpis besedila v terminalu. To funkcijo pre­iz­ku­si­te tako, da v izpisnem ukazu besedo »boo« na­do­me­sti­te s katerim koli nizom znakov ali pa na primer z neumnim šalom o kitih.

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

Prikaži vse slike Dockerja v lokalnem sistemu

Če niste pre­pri­ča­ni, ali ste določeno sliko že prenesli, si lahko ogledate pregled vseh slik na svojem lokalnem ra­ču­nal­ni­ku. Uporabite naslednjo ukazno vrstico:

sudo docker image
bash

Ukaz docker images (ali docker image ls) prikaže vse lokalne slike, vključno z ve­li­ko­stjo datoteke, oznako in ID slike.

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

Če zaženete kontejner, se izvorna slika prenese iz re­po­zi­to­ri­ja kot kopija in trajno shrani na vaš ra­ču­nal­nik. Tako pri­hra­ni­te čas, če želite do slike dostopati kasneje. Novo pre­na­ša­nje se sproži le, če se vir slike spremeni, na primer če je v re­po­zi­to­ri­ju na voljo nova različica.

Prikaži vse kon­tej­ner­je v lokalnem sistemu

Če želite prikazati pregled vseh kon­tej­ner­jev, ki trenutno tečejo v vašem sistemu ali so v pre­te­klo­sti že tekli, uporabite ukazno vrstico docker ps v kom­bi­na­ci­ji z možnostjo --all (skrajšano: -a):

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

Izpis v terminalu vsebuje podatke, kot so ID po­sa­me­zne­ga kon­tej­ner­ja, iz­ho­dišč­na slika, ukaz, ki je bil izveden ob zagonu kon­tej­ner­ja, čas zagona kon­tej­ner­ja in stanje.

Če želite prikazati le kon­tej­ner­je, ki trenutno tečejo v vašem sistemu, uporabite ukazno vrstico docker ps brez drugih opcij:

sudo docker ps
bash

Trenutno pa v vašem sistemu ne bi smelo biti nobenih zagnanih kon­tej­ner­jev.

Ustvar­ja­nje slik Dockerja

V našem Doc­ker­je­vem vodiču smo vam sicer že pokazali, kako poiskati slike v Docker Hubu, jih prenesti in zagnati na katerem koli sistemu, na katerem je nameščen Dockerjev motor. Vendar pa vam Docker ne omogoča le dostopa do obsežne ponudbe aplikacij, ki so na voljo v registru. Platforma ponuja tudi številne možnosti za ustvar­ja­nje lastnih slik in njihovo deljenje z drugimi raz­vi­jal­ci.

V uvodnih poglavjih tega Doc­ker­je­ve­ga vodiča ste že izvedeli, da vsaka Doc­ker­je­va slika temelji na datoteki Doc­ker­fi­le. Datoteke Doc­ker­fi­le si lahko pred­sta­vlja­te kot nekakšne predloge za izdelavo slik. To so preproste besedilne datoteke, ki vsebujejo vsa navodila, ki jih Docker potrebuje za ustvar­ja­nje slike. V na­sle­dnjih korakih se boste naučili, kako napisati takšno datoteko Doc­ker­fi­le in Dockerju naročiti, naj jo uporabi kot osnovo za vašo lastno sliko.

  1. Ustvar­ja­nje novega imenika: Razvojna ekipa Dockerja priporoča, da za vsak Doc­ker­fi­le ustvarite nov imenik. V sistemu Linux imenike enostavno ustvarite v terminalu. Z na­sle­dnjim ukazom v ukazni vrstici ustvarite imenik z imenom mydoc­ker­bu­ild:
mkdir mydockerbuild
bash
Image: Ubuntu terminal: The command mkdir
Create new di­rec­to­ri­es with the command mkdir
  1. Pre­mi­ka­nje po novem imeniku: Uporabite ukaz cd za pre­mi­ka­nje po novo ustvar­je­nem delovnem imeniku.
cd mydockerbuild
bash
Image: Ubuntu terminal: The command cd
With the help of the cd command, switch to another working directory
  1. Ustvar­ja­nje nove besedilne datoteke: V sistemu Ubuntu lahko besedilne datoteke enostavno ustvarite tudi prek terminala. Za to uporabite ure­je­val­nik, kot je Nano ali Vim. V imeniku mydoc­ker­bu­ild ustvarite besedilno datoteko z imenom Doc­ker­fi­le.
nano Dockerfile
bash
Image: Ubuntu terminal: Create text files with Nano
The text editor Nano is pre­in­stal­led on all Ubuntu versions
  1. Napišite datoteko Doc­ker­fi­le: Novo ustvar­je­na besedilna datoteka služi kot načrt za izdelavo vaše lastne slike. Namesto da bi sliko pro­gra­mi­ra­li od začetka, bomo v tem Doc­ker­je­vem vodiču kot predlogo uporabili de­mon­stra­cij­sko sliko docker/whalesay. To vključite z ukazom FROM v datoteki Doc­ker­fi­le. Uporabite oznako :latest, da se skli­cu­je­te na naj­no­vej­šo različico slike.
FROM docker/whalesay:latest

Doslej je program docker/whalesay deloval tako, da ste mu sami vnesli besedilo. V terminalu se je prikazalo točno tisto besedilo, ki ste ga vnesli, skupaj z ukazom za zagon kon­tej­ner­ja. A bilo bi bolj zanimivo, če bi skript samodejno ustvarjal novo besedilo. To je mogoče doseči na primer z uporabo programa fortunes, ki je na voljo v vsakem sistemu Linux. Osnovna funkcija programa fortunes je ustvar­ja­nje izrekov iz piškotkov sreče in duhovitih aforizmov. Uporabite naslednji ukaz, da po­so­do­bi­te trenutni lokalni indeks paketov in namestite program fortunes:

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

Nato opre­de­li­te ukaz CMD. Ta se izvede po ukazu RUN, razen če ga ni prepisal klic (docker run image CMD). Z na­sle­dnjim ukazom zaženite program fortunes z možnostjo -a („Izberi iz vseh zbirk podatkov“) in izpis prikažite v terminalu prek programa cowsay:

CMD /usr/games/fortune -a | cowsay

Vaša datoteka Doc­ker­fi­le naj bi bila takšna:

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

Opomba: Ukazi v datoteki Doc­ker­fi­le so vedno zapisani z enim razmikom in se vedno začnejo s ključno besedo. Sintaksa ne razlikuje med velikimi in malimi črkami, zato ni pomembno, ali pišete z velikimi ali malimi črkami. Vendar pa je bila uvedena enotna uporaba velikih črk za ključne besede.

Image: The text editor Nano in the Ubuntu terminal
Control the text editor Nano via the key com­bi­na­ti­ons given in the footer
  1. Shranite besedilno datoteko: Shranite svoj vnos. Če upo­ra­blja­te ure­je­val­nik Nano, datoteko shranite s kom­bi­na­ci­jo tipk [CTRL] + [O] in potrdite s tipko [ENTER]. Nano vas bo obvestil, da so bile v izbrano datoteko zapisane tri vrstice. Ure­je­val­nik zaprite s kom­bi­na­ci­jo tipk [CTRL] + [X].
  2. Ustvar­ja­nje slike kot Doc­ker­fi­le: Če želite ustvariti sliko iz Doc­ker­fi­le, se najprej pomaknite v imenik, kjer se nahaja besedilna datoteka. Ustvar­ja­nje slike začnite z ukazno vrstico docker build. Če želite sliko po­i­me­no­va­ti po lastni izbiri ali ji dodeliti oznako, uporabite možnost -t, ki ji sledi želena kom­bi­na­ci­ja imena in oznake. Stan­dar­dni format je name:tag.

V tem primeru je treba ustvariti sliko z imenom docker-whale:

docker build -t docker-whale .
bash

Zadnji del besedila pomeni, da se iz­ho­dišč­na datoteka Doc­ker­fi­le nahaja v izbrani mapi. Imate tudi možnost, da za izvorne datoteke določite pot do datoteke ali URL-naslov.

Postopek gradnje se začne takoj, ko potrdite ukaz s tipko [ENTER]. Najprej Dockerjev demon preveri, ali ima vse datoteke, ki jih potrebuje za ustvar­ja­nje slike. V Doc­ker­je­vi ter­mi­no­lo­gi­ji se to imenuje »kontekst«.

Nato poiščemo sliko docker/whalesay z oznako :latest:

Če je potrebno okolje za ustvar­ja­nje slike že v celoti pri­pra­vlje­no, demon Docker v začasnem kon­tej­ner­ju zažene sliko, ki je bila dodana prek ukaza FROM, in preide na naslednji ukaz v datoteki Doc­ker­fi­le. V tem primeru je to ukaz RUN, ki poskrbi za na­me­sti­tev programa fortunes.

Na koncu vsakega koraka pri ustvar­ja­nju slike vam Docker dodeli iden­ti­fi­ka­cij­sko številko za ustrezno plast, ki je bila ustvar­je­na v tem koraku. To pomeni, da vsaka vrstica v ustreznem datoteki Doc­ker­fi­le ustreza plasti slike, ki je bila na tej podlagi zgrajena.

Ko se ukaz RUN zaključi, Dockerjev demon ustavi kontejner, ki je bil ustvarjen zanj, ga odstrani in za sloj iz ukaza CMD zažene nov začasni kontejner. Ob koncu postopka ustvar­ja­nja se tudi ta začasni kontejner ustavi in odstrani. Docker vam prikaže ID nove slike:

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

Novo ustvar­je­no sliko najdete pod imenom docker-whale v pregledu lokalno shra­nje­nih slik.

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

Če želite zagnati kontejner iz novo ustvar­je­ne slike, uporabite ukazno vrstico sudo docker run v kom­bi­na­ci­ji z imenom slike:

sudo docker run docker-whale
bash

Če je bila slika pravilno ustvar­je­na iz datoteke Doc­ker­fi­le, naj bi vas vaš kit zdaj nav­di­ho­val z bolj ali manj modrimi besedami. Opomba: Vsakič, ko ponovno zaženete kontejner, se ustvari nov stavek.

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

Označite slike Dockerja in jih naložite na Docker Hub

Če želite svojo lastno sliko docker-whale naložiti v hub in jo dati na voljo skupnosti ali delovni skupini, jo morate najprej povezati z re­po­zi­to­ri­jem z enakim imenom v svojem osebnem imenskem prostoru. V ter­mi­no­lo­gi­ji Dockerja se ta korak imenuje ozna­če­va­nje.

Če želite objaviti sliko v Docker Hubu, ravnajte na naslednji način:

  1. Ustvarite re­po­zi­to­rij: Prijavite se v Docker Hub z vašim Docker ID-jem in osebnim geslom ter ustvarite javni re­po­zi­to­rij z imenom 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. Ugotovite ID slike: Ugotovite ID vaše pri­la­go­je­ne slike »docker-whale« z uporabo ukazne vrstice 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

V našem primeru je ID slike a8f2048c9ab8. To po­tre­bu­je­mo za ozna­če­va­nje v na­sle­dnjem koraku.

  1. Označite sliko: Označite sliko »docker-whale« s pomočjo programa za ukazno vrstico docker tag na naslednji način:
sudo docker tag [Image-ID][Docker-ID]/[Image-Name]:[TAG]
bash

V tem primeru se ukazna vrstica za ozna­če­va­nje glasi:

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

V pregledu docker images lahko preverite, ali ste sliko pravilno označili. Ime re­po­zi­to­ri­ja naj bi zdaj vsebovalo vašo Docker ID.

Image: Ubuntu terminal: Image overview before and after tagging
Link images with your Docker ID using the command docker tag
  1. Naložite sliko: Da bi sliko naložili, se morate najprej prijaviti v Docker Hub. To lahko storite z ukazom docker login.
sudo docker login
bash

Nato vas terminal pozove, da vnesete svoje upo­rab­ni­ško ime (Docker ID) in geslo.

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

Če se je prijava uspela, uporabite ukazno vrstico docker push za naložitev slike v novo ustvar­je­no re­po­zi­to­rij.

sudo docker push [Namespace]/docker-whale
bash

Nalaganje naj bi trajalo le nekaj sekund. Trenutno stanje je prikazano v terminalu.

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

Prijavite se v Docker Hub prek br­skal­ni­ka, da si ogledate naloženo sliko.

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

Če želite v posamezno re­po­zi­to­rij naložiti več kot eno sliko, uporabite različne oznake, da slike ponudite v različnih raz­li­či­cah. Na primer:

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

Pregled različnih različic slike je na voljo v re­po­zi­to­ri­ju Docker Hub pod zavihkom »Oznake«.

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

Slike različnih projektov pa bi morale biti na voljo v ločenih re­po­zi­to­ri­jih.

Če je bilo nalaganje uspešno, bo vaša pri­la­go­je­na slika zdaj na voljo v javnem re­po­zi­to­ri­ju vsem upo­rab­ni­kom Dockerja po vsem svetu.

  1. Preizkus: Preverite, ali je prenos uspel, tako da poskusite sliko prenesti.

Upo­šte­vaj­te, da je treba najprej izbrisati lokalno različico slike, da lahko prenesete novo kopijo z istim oznako. V na­spro­tnem primeru bo Docker sporočil, da želeni sliki v trenutni različici že obstaja.

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

Če želite izbrisati lokalno sliko Dockerja, uporabite ukazno vrstico docker rmi v kom­bi­na­ci­ji z ustreznim ID-jem slike. Ta se, kot običajno, določi prek docker images. Če Docker zabeleži konflikt, npr. ker se ID slike uporablja v več re­po­zi­to­ri­jih ali v kon­tej­ner­ju, ponovite ukaz z možnostjo --force (skrajšano*-f* ), da prisilite izbris.

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­ti­on with the option -f to force a deletion

Ponovno prikaži pregled vseh lokalnih slik:

sudo docker Images
bash

Izbrisani elementi se v izpisu terminala ne bi smeli več pri­ka­zo­va­ti. Sedaj uporabite ukaz »pull«, ki je naveden v re­po­zi­to­ri­ju, da prenesete novo kopijo slike iz Docker Hub.

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

Dodatne teme in vodiči o Dockerju

Svet Dockerja je obsežen in sčasoma se je iz Doc­ker­je­vih orodij razvil živahen ekosistem. Docker je še posebej koristen za skrbnike, predvsem če upra­vlja­jo zapletene apli­ka­ci­je z več kon­tej­ner­ji, ki delujejo vzporedno na različnih sistemih. Docker ponuja raznolike funkcije za uskla­je­va­nje takšnih grozdov. Več in­for­ma­cij o tem najdete v našem članku o uskla­je­va­nju Dockerja s Swarmom in Composeom.

Digitalni vodnik vsebuje dodatna navodila za delo z Dockerjem:

  • Na­sta­vi­tev re­po­zi­to­ri­ja Docker
  • Volumi kon­tej­ner­jev Docker
  • Docker: Varnostno kopiranje in obnovitev
  • Na­me­sti­tev in zagon Dockerja na strežniku Linux
  • Vodnik po Docker Compose

Docker je primeren za različne scenarije uporabe. V di­gi­tal­nem vodniku najdete naslednje vodiče:

Docker ni vedno najboljša izbira za vsako apli­ka­ci­jo. V enem od naših člankov smo pred­sta­vi­li najbolj pri­lju­blje­ne al­ter­na­ti­ve za Docker. Poleg tega imamo na voljo še številne druge članke, v katerih pri­mer­ja­mo Docker z drugimi plat­for­ma­mi:

  • Ku­ber­ne­tes proti Dockerju
  • Openshift proti Dockerju
  • Podman proti Dockerju
Go to Main Menu