Mine sisu juurde

Küpsiste seaded

Vali iga liigi kohta, milliseid küpsiseid lubad. Oma valikut saad alati muuta iga lehe allosas oleva lingi „Küpsiste seaded“ kaudu. Privaatsuspoliitika

Vajalikud

Alati sees

Vajalikud sisselogimiseks, ostukorvi säilitamiseks ja sinu valikute meelespidamiseks. Need on alati sees.

Millised küpsised?
  • weboke_sessie, weboke_klant, weboke_remember: sinu seanss ja sisselogituks jäämine
  • weboke_basket: sinu ostukorv
  • wkBtwIncl: hindade näitamine koos käibemaksuga või ilma
  • wok_cookies: sinu küpsisevalik, 12 kuud

Mõõdab, milline reklaam viib külastuse või tellimuseni, et me ei maksaks reklaamide eest, mis midagi ei anna.

Millised küpsised?
  • Google Ads Google Tag Manageri kaudu (_gcl_au, _gcl_aw), kuni 90 päeva
  • OpenAI Ads, reklaamid ChatGPT-s
  • wok_aff: millise partneri kaudu meie juurde jõudsid (partnerprogramm), 60 päeva

4,6

Riik ja keel

Igal riigil on oma sait, selle riigi hindade ja käibemaksuga.

Vaata

Dockeri paigaldamine ja sinu esimene konteiner

Moodul 9: Docker ja docker compose · Lugemisaeg: 11 minutit

Õpieesmärk: Pärast seda õppetundi oskad paigaldada Docker Engine'i ametlikust pakiallikast ning konteinereid käivitada, vaadata, nende sisse piiluda ja koristada. Samuti tead, miks docker-grupp on võrdne root-õigustega.

Põhimõisted: Docker Engine, Docker Desktop, ametlik apt-allikas, Debiani docker.io, docker-grupp, rootless mode, docker run, -d, -p, -v, --name, docker ps, docker logs, docker exec, docker stop, docker rm, docker image prune, docker system df

Milline Docker?

Serverisse paigaldad Docker Engine'i: taustateenuse (dockerd) ja käsu docker. Docker Desktop on midagi muud: akendega programm Windowsi, macOS-i ja Linuxi töölaudade jaoks. Serverisse see ei kuulu.

Docker Engine'i jaoks on kaks korralikku allikat:

  1. Dockeri enda pakiallikas (download.docker.com). Alati uusim versioon, koos pistikprogrammiga docker compose, mida kasutad õppetunnis 9.3. Seda kirjeldab Dockeri dokumentatsioon ja seda kasutab ka see kursus.
  2. Debiani või Ubuntu pakett docker.io. Vanem, kuid distributsioon uuendab seda sinu tavaliste turvauuendustega (õppetund 4.2). Sobib hästi, kui eelistad, et väljastpoolt distributsiooni ei tuleks midagi; kontrolli siis aga, kas docker compose (tühikuga) on saadaval.

Vali neist üks. Segamini paigaldamine tekitab konflikte; seepärast soovitab Dockeri dokumentatsioon esmalt eemaldada mitteametlikud paketid, nagu docker.io, docker-compose ja podman-docker.

Paigaldamine Dockeri pakiallikast

Need on Dockeri dokumentatsiooni sammud Debiani jaoks, eraldi võtme ja oma Signed-By-iga (õppetund 4.1). Soovi korral tee enne hetktõmmis (snapshot).

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

Seejärel allikafail /etc/apt/sources.list.d/docker.sources (deb822-kujul):

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

Väljale Suites käib sinu väljalaske koodnimi (cat /etc/os-release, õppetund 4.3) ja väljale Architectures käsu dpkg --print-architecture väljund. Ubuntus on URL https://download.docker.com/linux/ubuntu ja suite näiteks noble.

Siis paigalda:

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.

Debianis ja Ubuntus käivitub Docker pärast paigaldamist ise ning ka pärast iga taaskäivitust (systemctl status docker, õppetund 6.1).

NB! unattended-upgrades (õppetund 4.2) ei uuenda selle allika pakette vaikimisi automaatselt. Lisa Dockeri jaoks sudo apt update && sudo apt upgrade oma hoolduse rütmi (õppetund 10.4) või lisa allikas teadlikult automaatsete uuenduste hulka.

docker-grupp on root

Internetis kirjutatakse igal pool, et lisa end gruppi docker, siis ei pea sa enam sudo trükkima:

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

Tee seda ainult siis, kui mõistad, mida see tähendab. Dockeri dokumentatsioon ütleb selgelt: docker-grupp annab root-tasemel õigused. Kes tohib Dockeri teenust juhtida, saab käivitada konteineri, kuhu on haagitud kogu hosti ketas:

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

ja on seega sinu serveris root, ilma paroolita ja ilma sudo-logita. Dockeri dokumentatsioon sõnastab selle nii: Dockeri teenust tohivad juhtida ainult usaldusväärsed kasutajad.

Serveri puhul, mida haldad ainult ise, on see valik: mugavus versus lisatee root-õigusteni. Turvalisem on lihtsalt edasi trükkida sudo docker ...; siis on iga käsk sudo-logis (õppetund 3.2). Ära igal juhul lisa gruppi kasutajat, kes ei tohi olla root, näiteks veebisaidi teenusekasutajat.

Rootless mode

Docker võib töötada ka ilma rootita: teenus ja konteinerid töötavad siis tavakasutaja all, oma user namespace'iga. Paigaldad selle selle kasutajana käsuga dockerd-rootless-setuptool.sh install (paketist docker-ce-rootless-extras; eelnevalt on vaja paketti uidmap). Konteineri turvaauk ei anna siis hostis root-õigusi. Sellel on piiranguid ja seadistamine on keerulisem; selles kursuses kasutame tavalist paigaldust ning hoiame selle turvalisena selle mooduli reeglitega.

Esimene päris konteiner

Käivitame konteineris nginx-veebiserveri, millele pääseb ligi ainult serverist endast:

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...

Osad:

OsaTähendus
-dTöötab taustal (detached)
--name proefNimi, et ei peaks pikkade ID-dega töötama
-p 127.0.0.1:8080:80Konteineri port 80 saab hosti pordiks 8080, ainult loopbackil
nginx:stableAmetlik nginx-image, silt stable

Kontrolli:

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 (õppetund 5.1) kinnitab: ainult aadressil 127.0.0.1. Kui oleksid trükkinud -p 8080:80, oleks seal olnud 0.0.0.0:8080 ja [::]:8080 ning su konteiner oleks olnud internetist kättesaadav, isegi kui ufw porti 8080 ei luba (õppetund 9.3). Versioon päises Server võib sinul olla teine.

Ringi vaatamine ja sekkumine

anna@web1:~$ sudo docker logs proef            # mida programm kirjutas (stdout ja stderr)
anna@web1:~$ sudo docker logs -f --tail 20 proef   # viimased 20 rida ja jälgi edasi
anna@web1:~$ sudo docker exec -it proef sh     # shell töötavas konteineris
# cat /etc/os-release
# exit
anna@web1:~$ sudo docker stop proef
anna@web1:~$ sudo docker start proef
anna@web1:~$ sudo docker rm -f proef           # peata ja eemalda

docker logs on esimene koht, kuhu vaatad, kui konteiner ei tee seda, mida ootad, täpselt nagu journalctl tavaliste teenuste puhul (õppetund 6.2). docker exec abil vaatad sisse, kuid parem ära seal midagi muuda: muudatused konteineris kaovad järgmise uuendusega (õppetund 9.1).

Koristamine

Image'id ja peatatud konteinerid jäävad alles, kuni need koristad. Väikese kettaga VPS-is kuhjub see märkamatult.

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 eemaldab nimeta image'id, mis enam millegi juurde ei kuulu; võtmega -a ka kõik image'id, mida ükski konteiner ei kasuta. Ole ettevaatlik käsuga docker system prune --volumes: see eemaldab ka anonüümsed (nimeta) köited, mis parasjagu ühegi konteineri juurde ei kuulu, ja docker volume prune -a isegi nimega köited. Neis võivad olla sinu andmed. Seepärast anna köidetele alati nimi või kasuta bind mount'i (õppetund 9.1) ning vaata enne üle käsuga docker volume ls.

Ka konteinerite logid võivad kasvada. Docker hoiab neid vaikimisi JSON-failides ilma suuruspiiranguta. Piirangu sead failis /etc/docker/daemon.json:

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

Seejärel sudo systemctl restart docker; seadistus kehtib ainult uutele konteineritele, olemasolevad konteinerid loo uuesti.

Praktikas

Docker töötab WebOké VPS-is samamoodi nagu iga teise teenusepakkuja juures: see on tarkvara sinu enda serveris, mille paigaldad ja uuendad ise. Väikese VPS-i puhul vaata käskudega docker system df ja df -h (õppetund 1.4) regulaarselt kettaruumi.

Kokkuvõte

  • Paigalda Docker Engine Dockeri pakiallikast (oma võtme ja Signed-By-iga) või docker.io distributsioonist, mitte mõlemat.
  • docker-grupp võrdub rootiga; sudo docker jätab jälje sudo-logisse. Rootless mode on turvalisem, kuid piiratum alternatiiv.
  • docker run -d --name ... -p 127.0.0.1:host:container image:tag käivitab konteineri, mis on kättesaadav ainult lokaalselt; kontrolli käsuga ss.
  • docker ps, logs, exec, stop, rm on sinu igapäevased tööriistad.
  • Koristа image'id käsuga docker image prune, piira konteinerite logisid (vaikimisi piiramata) ja ole säästlik käsuga --volumes.

Test (quiz)

1. Miks annab docker-gruppi kuulumine tegelikult root-õigused?



2. Pärast käsku docker run -d -p 8080:80 nginx näitab ss -tlnp rida 0.0.0.0:8080. Mida oleksid pidanud trükkima, et port avaldataks ainult lokaalselt?



3. Konteiner käivitub, kuid selle sees olev veebisait ei tööta. Mida vaatad kõigepealt?



4. Miks valid Dockeri jaoks ühe allika ega paigalda docker.io ja docker-ce segamini?



5. Mida teeb docker system prune --volumes, mida pead hästi teadma?



Ülesanne

Ülesanne O9.2: Sinu esimene konteiner. Paigalda Docker Engine oma serverisse õppetunni järgi (või testmasinasse). Käivita nginx-konteiner, mis kuulab ainult aadressil 127.0.0.1:8080, kontrolli käskudega docker ps, curl -I ja ss -tlnp, vaata logisid ja koristа see seejärel ära. Vasta küsimustele: millisest allikast paigaldasid Dockeri, mida näitas ss pordi 8080 juures ja kas lisasid end docker-gruppi (miks või miks mitte)?

Ülesanne O9.2: Sinu esimene konteiner

Selle ülesande teed ise, keegi ei kontrolli seda. Märgi ära, mida tegid, ja märgi ülesanne tehtuks.




Su linnukesed ja märkmed jäävad ainult sellesse brauserisse, me ei saada neid kuhugi. Kui oled sisse loginud, salvestame Minu kursustes ainult info, et tegid ülesande ära.

Loe edasi

Hetk…

Seadista oma domeenid

Määra iga domeeni jaoks nimeserverid, seos sinu majutusega ja kes saab omanikuks.

Laadin sinu domeene…