Preskoči na vsebino

Nastavitve piškotkov

Za vsako vrsto izberite, katere piškotke dovolite. Svojo izbiro lahko kadar koli spremenite prek povezave Nastavitve piškotkov na dnu vsake strani. Izjava o zasebnosti

Nujni

Vedno vklopljeno

Potrebni so za prijavo, shranjevanje košarice in pomnjenje Vaših izbir. Vedno so vklopljeni.

Kateri piškotki?
  • weboke_sessie, weboke_klant, weboke_remember: Vaša seja in ohranjanje prijave
  • weboke_basket: Vaša košarica
  • wkBtwIncl: prikaz cen z DDV ali brez DDV
  • wok_cookies: Vaša izbira glede piškotkov, 12 mesecev

Meri, kateri oglas vodi do obiska ali naročila, da ne plačujemo za oglase, ki ne prinesejo ničesar.

Kateri piškotki?
  • Google Ads prek Google Tag Manager (_gcl_au, _gcl_aw), do 90 dni
  • OpenAI Ads, oglasi v ChatGPT
  • wok_aff: prek katerega partnerja ste prišli k nam (partnerski program), 60 dni

4,6

Država in jezik

Vsaka država ima svojo spletno stran, s cenami in DDV za to državo.

Prikaži

Razumevanje vsebnikov

Modul 9: Docker in docker compose · Čas branja: 10 minut

Učni cilj: Po tej lekciji boste znali razložiti, kaj je vsebnik, v čem se razlikuje od virtualnega stroja, kje ostanejo podatki vsebnika in kdaj je Docker na Vašem strežniku smiseln.

Ključni pojmi: slika (image), vsebnik (container), plast, register (Docker Hub), oznaka (tag), povzetek (digest), imenski prostori (namespaces), cgroups, skupno jedro, nestalni datotečni sistem, nosilec (volume), bind mount, objava vrat, uradna slika

Zakaj vsebniki?

Recimo, da želite na svojem VPS poganjati stran s stanjem, ki prikazuje, ali Vaše spletno mesto deluje. Program je napisan v Node.js, potrebuje določeno različico tega okolja in še kakšnih dvesto knjižnic. Brez vsebnikov vse to namestite na strežnik, poleg spletnega strežnika in podatkovne baze. Leto kasneje želite drugi program, ki potrebuje drugo različico Node.js. In začne se sestavljanje sestavljanke.

Vsebnik to reši. Izdelovalec programa dostavi program skupaj z vsem, kar potrebuje, v enem paketu: sliki (image). Na strežniku to sliko zaženete kot vsebnik. Program vidi svoje datoteke, svoj Node.js, svoje knjižnice in se ne tepe s preostankom Vašega strežnika. Ga ne potrebujete več? Odstranite vsebnik in sliko, pa v /usr ali /etc ne ostane ničesar.

Docker je najbolj znano orodje za prenos slik in poganjanje vsebnikov. Obstajajo tudi alternative (Podman, sam containerd), vendar so pojmi povsod enaki.

Slika, vsebnik in register

Trije izrazi, na katere boste stalno naleteli:

  • Slika (image): predloga samo za branje z datotečnim sistemom (program, knjižnice, nastavitve) in ukazom, ki se mora zagnati. Slika je sestavljena iz plasti: osnovne plasti (na primer gol Debian), nad njo plasti z Node.js, nad njo programa. Dve sliki z isto osnovno plastjo si to plast na disku delita.
  • Vsebnik (container): delujoč (ali ustavljen) primerek slike. Nad plastmi samo za branje dobi vsebnik lastno tanko plast za pisanje. Iz ene slike lahko zaženete deset vsebnikov.
  • Register (registry): mesto, kjer so shranjene slike, na primer Docker Hub (docker.io) ali register GitHuba (ghcr.io). Docker sliko prenese z docker pull.

Ime slike je videti takole:

louislam/uptime-kuma:2
caddy:2
vaultwarden/server:latest

Del za dvopičjem je oznaka (tag): ime za različico. Oznaka se lahko spremeni: caddy:2 danes kaže na drugo izdajo kot čez tri mesece, ko izide nova 2.x. Če želite natančno določiti, katero sliko poganjate, uporabite povzetek (digest): prstni odtis vsebine, na primer caddy@sha256:.... Ta se nikoli ne spremeni. Oznaka latest je le ime, ki ga izbere izdelovalec; ne pomeni samodejno "najnovejše stabilne različice" in je zato slaba izbira, če želite vedeti, kaj poganjate.

Ni virtualni stroj

Vsebnik je podoben majhnemu virtualnemu stroju, a to ni. Ta razlika je pomembna za varnost.

Virtualni stroj (kot Vaš VPS)Vsebnik
JedroLastno jedroDeli jedro gostitelja
ZagonOd sekund do minut, celoten operacijski sistemObičajno v sekundi, samo program
LočevanjeS hipervizorjem, na ravni strojne opremeZ jedrom: namespaces in cgroups
VelikostGigabajtiPogosto od nekaj deset do nekaj sto megabajtov

Vsebnik je v bistvu navaden proces na Vašem strežniku, ki ga jedro postavi v zaščiteno okolje:

  • namespaces (imenski prostori) poskrbijo, da ima proces lasten pogled na datoteke, procese, omrežje in uporabnike. V vsebniku je videti, kot da je program proces številka 1, preostanka strežnika pa ne vidi;
  • cgroups omejujejo, koliko procesorja in pomnilnika sme uporabiti.

Ker si vsi vsebniki delijo isto jedro, je ločevanje manj strogo kot med dvema VPS. Ranljivost v jedru ali vsebnik, ki dobi preveč pravic, lahko prizadene gostitelja. Zato veljajo pravila iz tega modula: poganjajte samo slike, ki jim zaupate, vsebnikom ne dajajte več pravic, kot je potrebno, in v vsebnik nikoli ne priklopite /var/run/docker.sock ali / (lekciji 9.3 in 10.2).

Kje ostanejo Vaši podatki?

To je klasična past za začetnike. Plast za pisanje v vsebniku je nestalna: ko vsebnik odstranite (na primer pri posodobitvi, lekcija 9.4), izgine vse, kar je program vanjo zapisal. Podatki, ki morajo ostati, zato sodijo zunaj vsebnika:

  • Nosilec (volume): prostor za shranjevanje, ki ga upravlja Docker sam (pod /var/lib/docker/volumes/). Poimenujete ga, na primer uptime-kuma, in ga povežete z mapo v vsebniku: -v uptime-kuma:/app/data.
  • Bind mount: navadna mapa na Vašem strežniku, ki jo priklopite v vsebnik: -v /srv/vaultwarden:/data. Priročno, ker datoteke vidite neposredno in jih zlahka vključite v varnostno kopijo (modul 8).

Vsebnik z dobrimi nosilci lahko zavržete in ga znova ustvarite, ne da bi kar koli izgubili. Natanko tako deluje posodabljanje: prenesete novo sliko, odstranite stari vsebnik in zaženete novega na istih nosilcih. Zato nosilce vključite v svoj načrt varnostnega kopiranja (lekcija 8.1).

Objava vrat

Vsebnik ima lastno omrežje. Spletni program, ki v vsebniku posluša na vratih 3001, od zunaj strežnika ni dosegljiv, dokler teh vrat ne objavite: -p 3001:3001 (vrata gostitelja:vrata vsebnika). Pozor: brez naslova Docker objavi vrata na vseh naslovih Vašega strežnika, torej 0.0.0.0 in [::]. To pomeni: dosegljivo z vsega interneta, Docker pa to uredi mimo ufw (lekcija 9.3). Varna navada je objava na loopback, -p 127.0.0.1:3001:3001, in pred tem obratni posredniški strežnik (reverse proxy) s https (lekcija 9.4).

Kdo izdela sliko?

Slika je programska oprema nekoga drugega, ki lahko na Vašem strežniku teče kot root. Zato preverite, kdo je izdelovalec:

  • Docker Official Images (kot caddy, nginx, postgres) vzdržuje Docker skupaj z izdelovalci;
  • slike izdelovalca samega (kot louislam/uptime-kuma in vaultwarden/server), prepoznavne po imenu, ki ga navaja spletno mesto projekta;
  • slike neznancev s podobnimi imeni: ne uporabljajte jih.

Vedno uporabite ime, ki je navedeno na uradnem spletnem mestu projekta, ne prvega, ki ga vrne iskanje.

Kdaj da in kdaj ne?

Docker je priročen za programe, ki jih izdelovalec dostavlja kot sliko, za storitve, ki jih želite hitro zavreči ali premakniti, in za vzporedno poganjanje več programov z različnimi zahtevami. Za osnovo strežnika (SSH, požarni zid, posodobitve) vsebnikov ne uporabljate. Tudi posamezno spletno mesto z nginx in PHP iz repozitorija paketov (lekcija 7.2) odlično deluje brez Dockerja. Vsebnik doda plast, ki jo morate razumeti in posodabljati; uporabite ga, kadar Vam kaj prinese.

Povzetek

  • Slika je predloga samo za branje, sestavljena iz plasti; vsebnik je delujoč primerek z lastno plastjo za pisanje.
  • Vsebniki si delijo jedro gostitelja in so zaščiteni z namespaces in cgroups: lažji od VM, a manj strogo ločeni.
  • Plast za pisanje je nestalna: trajni podatki sodijo v nosilec ali bind mount, ti pa v Vašo varnostno kopijo.
  • Oznaka se lahko spremeni, povzetek ne; latest pove malo.
  • Vrata objavite na 127.0.0.1 in uporabljajte samo slike izdelovalca ali uradne slike.

Kviz

1. Kaj je najpomembnejša razlika med vsebnikom in virtualnim strojem?



2. Poganjate vsebnik brez nosilca. Program shranjuje svoje nastavitve v /app/data. Vsebnik odstranite, da bi zagnali novo različico. Kaj se zgodi z nastavitvami?



3. Zakaj image:latest v produkcijski postavitvi ni dobra izbira?



4. Zaženete docker run -d -p 8080:80 nginx. S katerih naslovov so vrata 8080 dosegljiva?



5. Iskanje vrne sliko vaultwarden-server-official/vaultwarden. Kaj storite?



Naloga

Naloga O9.1: Vsebnik ali ne? Izberite dva programa, ki ju želite poganjati na svojem strežniku (ali kot primer uporabite Uptime Kuma in spletno mesto WordPress). Za vsak program poiščite, ali izdelovalec dostavlja uradno sliko in pod katerim imenom, katero oznako bi izbrali, katera mapa vsebuje trajne podatke in na katerih vratih program posluša. Nato razložite, ali bi ga poganjali v vsebniku ali iz repozitorija paketov, in zakaj.

Naloga O9.1: Vsebnik ali ne?

To nalogo opravite sami; nihče je ne pregleda. Odkljukajte, kar ste naredili, in nalogo označite kot opravljeno.




Vaše kljukice in zapiski ostanejo samo v tem brskalniku, nikamor jih ne pošiljamo. Če ste prijavljeni, v Moji tečaji shranimo samo podatek, da ste nalogo opravili.

Za nadaljnje branje

Trenutek…

Nastavite svoje domene

Za vsako domeno uredite imenske strežnike, povezavo z gostovanjem in kdo bo imetnik.

Nalaganje Vaših domen…