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

Namestitev Dockerja in Vaš prvi vsebnik

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

Učni cilj: Po tej lekciji boste znali namestiti Docker Engine iz uradnega vira paketov, zagnati, pregledati, pogledati v notranjost in počistiti vsebnike, poleg tega pa boste vedeli, zakaj je skupina docker enakovredna rootu.

Ključni pojmi: Docker Engine, Docker Desktop, uradni vir apt, docker.io iz Debiana, skupina docker, način rootless, docker run, -d, -p, -v, --name, docker ps, docker logs, docker exec, docker stop, docker rm, docker image prune, docker system df

Kateri Docker?

Na strežnik namestite Docker Engine: storitev v ozadju (dockerd) in ukaz docker. Docker Desktop je nekaj drugega: program z okni za Windows, macOS in namizja Linux. Ta na strežnik ne spada.

Za Docker Engine obstajata dva urejena vira:

  1. Vir paketov samega Dockerja (download.docker.com). Vedno najnovejša različica, vključno z vtičnikom docker compose, ki ga boste uporabili v lekciji 9.3. To opisuje dokumentacija Dockerja in to uporablja ta tečaj.
  2. Paket docker.io iz Debiana ali Ubuntuja. Starejši, a ga distribucija posodablja prek Vaših običajnih varnostnih posodobitev (lekcija 4.2). Odlična izbira, če ne želite ničesar od zunaj distribucije; v tem primeru pa preverite, ali je na voljo docker compose (s presledkom).

Izberite enega. Mešana namestitev povzroča spore; dokumentacija Dockerja zato svetuje, da najprej odstranite neuradne pakete, kot so docker.io, docker-compose in podman-docker.

Namestitev iz vira paketov Dockerja

To so koraki iz dokumentacije Dockerja za Debian, s ključem v ločeni datoteki in lastnim Signed-By (lekcija 4.1). Če želite, najprej naredite posnetek stanja.

anna@web1:~$ sudo apt update
anna@web1:~$ sudo apt install ca-certificates curl
anna@web1:~$ sudo install -m 0755 -d /etc/apt/keyrings
anna@web1:~$ sudo curl -fsSL https://download.docker.com/linux/debian/gpg -o /etc/apt/keyrings/docker.asc
anna@web1:~$ sudo chmod a+r /etc/apt/keyrings/docker.asc

Nato datoteka vira /etc/apt/sources.list.d/docker.sources (oblika deb822):

Types: deb
URIs: https://download.docker.com/linux/debian
Suites: trixie
Components: stable
Architectures: amd64
Signed-By: /etc/apt/keyrings/docker.asc

Pri Suites vpišete kodno ime svoje izdaje (cat /etc/os-release, lekcija 4.3), pri Architectures pa izpis ukaza dpkg --print-architecture. Na Ubuntuju je URL https://download.docker.com/linux/ubuntu, suite pa na primer noble.

Nato namestitev:

anna@web1:~$ sudo apt update
anna@web1:~$ sudo apt install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
anna@web1:~$ sudo docker run hello-world
...
Hello from Docker!
This message shows that your installation appears to be working correctly.

Na Debianu in Ubuntuju se Docker po namestitvi zažene samodejno, prav tako po vsakem ponovnem zagonu (systemctl status docker, lekcija 6.1).

Pozor: unattended-upgrades (lekcija 4.2) paketov iz tega vira privzeto ne posodablja samodejno. Vključite sudo apt update && sudo apt upgrade za Docker v svoj ritem vzdrževanja (lekcija 10.4) ali pa vir zavestno dodajte med samodejne posodobitve.

Skupina docker je root

Povsod na internetu piše, da se dodajte v skupino docker, da Vam ne bo več treba tipkati sudo:

anna@web1:~$ sudo usermod -aG docker anna

To storite le, če razumete, kaj pomeni. Dokumentacija Dockerja je jasna: skupina docker daje pravice na ravni roota. Kdor sme upravljati storitev Docker, lahko zažene vsebnik, v katerega je priklopljen celoten disk gostitelja:

docker run -it -v /:/host debian chroot /host

in je s tem root na Vašem strežniku, brez gesla in brez zapisa v dnevniku sudo. Dokumentacija Dockerja pravi: storitev Docker smejo upravljati samo zaupanja vredni uporabniki.

Pri strežniku, ki ga upravljate samo Vi, je to stvar izbire: udobje v zameno za dodatno pot do roota. Varneje je, da še naprej tipkate sudo docker ...; tako je vsak ukaz zapisan v dnevniku sudo (lekcija 3.2). V nobenem primeru pa v skupino ne dodajte uporabnika, ki ne sme biti root, na primer storitvenega uporabnika za spletno mesto.

Način rootless

Docker lahko teče tudi brez roota: storitev in vsebniki takrat tečejo pod običajnim uporabnikom, z lastnim uporabniškim imenskim prostorom (user namespace). Kot ta uporabnik ga namestite z dockerd-rootless-setuptool.sh install (iz paketa docker-ce-rootless-extras; predhodno potrebujete paket uidmap). Ranljivost v vsebniku tako ne prinese roota na gostitelju. Obstajajo omejitve in nastavitev je zahtevnejša; v tem tečaju uporabljamo običajno namestitev in poskrbimo za varnost s pravili iz tega modula.

Prvi pravi vsebnik

Zaženemo spletni strežnik nginx v vsebniku, dosegljiv samo s strežnika samega:

anna@web1:~$ sudo docker run -d --name proef -p 127.0.0.1:8080:80 nginx:stable
Unable to find image 'nginx:stable' locally
stable: Pulling from library/nginx
...
3f1c9e0d7a2b...

Sestavni deli:

DelPomen
-dTek v ozadju (detached)
--name proefIme, da Vam ni treba delati z dolgimi ID-ji
-p 127.0.0.1:8080:80Vrata 80 v vsebniku postanejo vrata 8080 na gostitelju, samo na loopbacku
nginx:stableUradna slika nginx, oznaka stable

Preverjanje:

anna@web1:~$ sudo docker ps
CONTAINER ID   IMAGE          COMMAND                  STATUS         PORTS                    NAMES
3f1c9e0d7a2b   nginx:stable   "/docker-entrypoint.…"   Up 5 seconds   127.0.0.1:8080->80/tcp   proef
anna@web1:~$ curl -I http://127.0.0.1:8080
HTTP/1.1 200 OK
Server: nginx/1.28.0
anna@web1:~$ sudo ss -tlnp | grep 8080
LISTEN 0 4096 127.0.0.1:8080 0.0.0.0:* users:(("docker-proxy",pid=2211,fd=7))

ss (lekcija 5.1) potrdi: samo na 127.0.0.1. Če bi vtipkali -p 8080:80, bi tam pisalo 0.0.0.0:8080 in [::]:8080, Vaš vsebnik pa bi bil dosegljiv z interneta, tudi če ufw vrat 8080 ne dovoljuje (lekcija 9.3). Različica v glavi Server je lahko pri Vas drugačna.

Pregledovanje in posredovanje

anna@web1:~$ sudo docker logs proef            # kar je program izpisal (stdout in stderr)
anna@web1:~$ sudo docker logs -f --tail 20 proef   # zadnjih 20 vrstic in nadaljnje spremljanje
anna@web1:~$ sudo docker exec -it proef sh     # lupina v delujočem vsebniku
# cat /etc/os-release
# exit
anna@web1:~$ sudo docker stop proef
anna@web1:~$ sudo docker start proef
anna@web1:~$ sudo docker rm -f proef           # ustavite in odstranite

docker logs je prvo mesto, ki ga pogledate, ko vsebnik ne dela, kar pričakujete, tako kot journalctl pri običajnih storitvah (lekcija 6.2). Z docker exec pogledate v notranjost, a tam raje ničesar ne spreminjajte: spremembe v vsebniku ob naslednji posodobitvi izginejo (lekcija 9.1).

Čiščenje

Slike in ustavljeni vsebniki ostanejo, dokler jih ne počistite. Na VPS z majhnim diskom se to neopazno nabira.

anna@web1:~$ sudo docker system df
TYPE            TOTAL     ACTIVE    SIZE      RECLAIMABLE
Images          7         3         1.9GB     1.2GB (63%)
Containers      3         3         12MB      0B (0%)
Local Volumes   2         2         180MB     0B (0%)
Build Cache     0         0         0B        0B
anna@web1:~$ sudo docker image prune

docker image prune odstrani slike brez imena, ki ne pripadajo ničemur več; z -a tudi vse slike, ki jih ne uporablja noben vsebnik. Bodite previdni z docker system prune --volumes: ta odstrani tudi anonimne nosilce (brez imena), ki v tistem trenutku ne pripadajo nobenemu vsebniku, docker volume prune -a pa celo poimenovane nosilce. V njih so lahko Vaši podatki. Zato nosilce vedno poimenujte ali uporabite bind mount (lekcija 9.1) in najprej preverite z docker volume ls.

Tudi dnevniki vsebnikov lahko rastejo. Docker jih privzeto shranjuje v datoteke JSON brez omejitve velikosti. Omejitev nastavite v /etc/docker/daemon.json:

{
  "log-driver": "json-file",
  "log-opts": { "max-size": "10m", "max-file": "3" }
}

Nato sudo systemctl restart docker; nastavitev velja samo za na novo ustvarjene vsebnike, obstoječe vsebnike ustvarite znova.

V praksi

Docker na VPS pri WebOké deluje enako kot pri vsakem drugem ponudniku: gre za programsko opremo na Vašem lastnem strežniku, ki jo namestite in posodabljate sami. Pri majhnem VPS z docker system df in df -h (lekcija 1.4) redno preverjajte prostor na disku.

Povzetek

  • Docker Engine namestite iz vira paketov Dockerja (z lastnim ključem in Signed-By) ali docker.io iz distribucije, ne obojega.
  • Skupina docker je enakovredna rootu; sudo docker pusti sled v dnevniku sudo. Način rootless je varnejša, a bolj omejena alternativa.
  • docker run -d --name ... -p 127.0.0.1:host:container image:tag zažene vsebnik, ki je dosegljiv samo lokalno; preverite z ss.
  • docker ps, logs, exec, stop, rm so Vaše vsakodnevno orodje.
  • Slike čistite z docker image prune, omejite dnevnike vsebnikov (privzeto neomejeni) in bodite varčni z --volumes.

Kviz

1. Zakaj članstvo v skupini docker dejansko daje pravice roota?



2. Po docker run -d -p 8080:80 nginx prikaže ss -tlnp vrstico 0.0.0.0:8080. Kaj bi morali vtipkati, da bi vrata objavili samo lokalno?



3. Vsebnik se zažene, spletno mesto v njem pa ne deluje. Kaj pogledate najprej?



4. Zakaj izberete en vir za Docker in ne namestite docker.io in docker-ce hkrati?



5. Kaj naredi docker system prune --volumes, kar morate dobro vedeti?



Naloga

Naloga O9.2: Vaš prvi vsebnik. Namestite Docker Engine na svoj strežnik po navodilih iz lekcije (ali na testni računalnik). Zaženite vsebnik nginx, ki posluša samo na 127.0.0.1:8080, preverite z docker ps, curl -I in ss -tlnp, poglejte dnevnike in ga nato počistite. Odgovorite na vprašanja: iz katerega vira ste namestili Docker, kaj je ss pokazal pri vratih 8080 in ali ste se dodali v skupino docker (zakaj da ali zakaj ne)?

Naloga O9.2: Vaš prvi vsebnik

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…