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

Konteinerite mõistmine

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

Õpieesmärk: Selle õppetunni järel oskad selgitada, mis on konteiner, kuidas see erineb virtuaalmasinast, kuhu jäävad konteineri andmed ja millal on Dockerist sinu serveris kasu.

Põhimõisted: image (tõmmis), konteiner, kiht, registry (Docker Hub), tag (silt), digest (räsi), namespaces, cgroups, jagatud kernel, mittepüsiv failisüsteem, volume (andmeköide), bind mount, pordi avaldamine, ametlik image

Miks konteinerid?

Oletame, et tahad oma VPS-is käitada olekulehte, mis näitab, kas su veebisait töötab. Programm on kirjutatud Node.js-is, vajab sellest kindlat versiooni ja lisaks umbes kakssada teeki. Ilma konteineriteta paigaldad selle kõik oma serverisse, veebiserveri ja andmebaasi kõrvale. Aasta pärast tahad teist programmi, mis vajab teist Node.js-i versiooni. Siis algab nuputamine.

Konteiner lahendab selle. Programmi autor tarnib programmi koos kõige vajalikuga ühes paketis: see on image. Oma serveris käivitad selle image'i konteinerina. Programm näeb oma faile, oma Node.js-i ja oma teeke ega lähe ülejäänud serveriga konflikti. Ei vaja seda enam? Kustuta konteiner ja image ning /usr või /etc alla ei jää midagi maha.

Docker on tuntuim tööriist image'ite allalaadimiseks ja konteinerite käitamiseks. On ka alternatiive (Podman, containerd ise), kuid mõisted on kõikjal samad.

Image, konteiner ja registry

Kolm sõna, mida kohtad pidevalt:

  • Image: kirjutuskaitstud mall, milles on failisüsteem (programm, teegid, seaded) ja käsk, mis tuleb käivitada. Image koosneb kihtidest: baaskiht (näiteks paljas Debian), selle peal kiht Node.js-iga ja selle peal programm. Kaks sama baaskihiga image'it jagavad seda kihti sinu kettal.
  • Konteiner: image'i töötav (või peatatud) eksemplar. Kirjutuskaitstud kihtide peale saab konteiner oma õhukese kirjutatava kihi. Ühest image'ist saad käivitada kümme konteinerit.
  • Registry: koht, kus image'id asuvad, näiteks Docker Hub (docker.io) või GitHubi registry (ghcr.io). Docker laadib image'i alla käsuga docker pull.

Image'i nimi näeb välja selline:

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

Koolonijärgne osa on tag: versiooni silt. Tag võib muutuda: caddy:2 osutab täna teisele buildile kui kolme kuu pärast, kui ilmub uus 2.x. Kui tahad täpselt fikseerida, millist image'it käitad, kasuta digesti: sisu sõrmejälge, näiteks caddy@sha256:.... See ei muutu kunagi. Tag latest on lihtsalt nimi, mille autor valib; see ei tähenda automaatselt "uusim stabiilne versioon" ja on seepärast halb valik, kui tahad teada, mis töötab.

Mitte virtuaalmasin

Konteiner sarnaneb väikese virtuaalmasinaga, kuid pole seda. See erinevus on turvalisuse jaoks oluline.

Virtuaalmasin (nagu sinu VPS)Konteiner
KernelOma kernelJagab hosti kernelit
KäivitumineSekunditest minutiteni, terve operatsioonisüsteemEnamasti sekundiga, ainult programm
EraldatusHüperviisori abil, riistvara tasemelKerneli abil: namespaces ja cgroups
SuurusGigabaididSageli kümned kuni sajad megabaidid

Konteiner on tegelikult tavaline protsess sinu serveris, mille kernel paneb eraldatud keskkonda:

  • namespaces tagavad, et protsessil on oma vaade failidele, protsessidele, võrgule ja kasutajatele. Konteineris näib programm olevat protsess number 1 ega näe ülejäänud serverit;
  • cgroups piiravad, kui palju protsessorit ja mälu see kasutada tohib.

Kuna kõik konteinerid jagavad sama kernelit, on eraldatus vähem range kui kahe VPS-i vahel. Kerneli turvaauk või konteiner, millel on liiga palju õigusi, võib mõjutada hosti. Sellest tulenevad selle mooduli reeglid: käita ainult image'eid, mida usaldad, ära anna konteineritele rohkem õigusi kui vaja ja ära kunagi mount'i /var/run/docker.sock ega / konteinerisse (õppetund 9.3 ja 10.2).

Kuhu jäävad sinu andmed?

See on algajate klassikaline lõks. Konteineri kirjutatav kiht on mittepüsiv: kui kustutad konteineri (näiteks uuendamisel, õppetund 9.4), kaob kõik, mida programm sinna kirjutas. Andmed, mis peavad säilima, kuuluvad seepärast konteinerist välja:

  • Volume: hoiukoht, mida haldab Docker ise (kaustas /var/lib/docker/volumes/). Annad sellele nime, näiteks uptime-kuma, ja seod selle konteineri kaustaga: -v uptime-kuma:/app/data.
  • Bind mount: tavaline kaust sinu serveris, mille ühendad konteinerisse: -v /srv/vaultwarden:/data. Mugav, sest näed faile otse ja saad need hõlpsasti varukoopiasse (moodul 8) lisada.

Heade volume'idega konteineri saad ära visata ja uuesti luua ilma midagi kaotamata. Täpselt nii uuendamine käibki: laadi alla uus image, kustuta vana konteiner ja loo uus konteiner samade volume'itega. Lisa volume'id seepärast oma varundusplaani (õppetund 8.1).

Portide avaldamine

Konteineril on oma võrk. Veebiprogramm, mis kuulab konteineris porti 3001, pole serverist väljastpoolt kättesaadav enne, kui avaldad selle pordi: -p 3001:3001 (hostiport:konteineriport). Tähelepanu: ilma aadressita avaldab Docker pordi kõigil sinu serveri aadressidel, seega 0.0.0.0 ja [::]. See tähendab: kättesaadav kogu internetist, ja Docker korraldab selle ufw-st mööda (õppetund 9.3). Turvaline harjumus on avaldada loopbackil, -p 127.0.0.1:3001:3001, ja panna ette https-iga reverse proxy (õppetund 9.4).

Kes image'i teeb?

Image on kellegi teise tarkvara, mis võib sinu serveris töötada root'ina. Vaata seepärast, kes on autor:

  • Docker Official Images (näiteks caddy, nginx, postgres) hooldab Docker koos autoritega;
  • autori enda image'id (näiteks louislam/uptime-kuma ja vaultwarden/server), mida tunned ära nime järgi, mida projekti veebisait nimetab;
  • tundmatute image'id sarnaste nimedega: ära kasuta.

Kasuta alati nime, mis on projekti ametlikul veebisaidil, mitte esimest, mille otsing annab.

Millal jah, millal mitte?

Docker on mugav programmide jaoks, mida autor tarnib image'ina, teenuste jaoks, mida tahad kiiresti ära visata või teise kohta viia, ja selleks, et käitada kõrvuti mitut erinevate nõuetega programmi. Serveri aluse (SSH, tulemüür, uuendused) jaoks konteinereid ei kasuta. Ja üksik veebisait nginxi ja paketiallika PHP-ga (õppetund 7.2) töötab suurepäraselt ka ilma Dockerita. Konteiner lisab kihi, mida pead mõistma ja uuendama; kasuta seda siis, kui sellest on kasu.

Kokkuvõte

  • Image on kihtidest koosnev kirjutuskaitstud mall; konteiner on töötav eksemplar oma kirjutatava kihiga.
  • Konteinerid jagavad hosti kernelit ja on eraldatud namespaces'i ja cgroups'i abil: kergemad kui VM, kuid vähem rangelt eraldatud.
  • Kirjutatav kiht on mittepüsiv: püsivad andmed kuuluvad volume'isse või bind mount'i ja need omakorda varukoopiasse.
  • Tag võib muutuda, digest mitte; latest ütleb vähe.
  • Avalda porte aadressil 127.0.0.1 ja kasuta ainult autori image'eid või ametlikke image'eid.

Test (quiz)

1. Mis on peamine erinevus konteineri ja virtuaalmasina vahel?



2. Käitad konteinerit ilma volume'ita. Programm hoiab oma seadeid kaustas /app/data. Kustutad konteineri, et käivitada uus versioon. Mis juhtub seadetega?



3. Miks pole image:latest tootmiskeskkonnas hea valik?



4. Käivitad docker run -d -p 8080:80 nginx. Millistelt aadressidelt on port 8080 kättesaadav?



5. Otsing annab image'i vaultwarden-server-official/vaultwarden. Mida teed?



Ülesanne

Ülesanne O9.1: Konteiner või mitte? Vali kaks programmi, mida tahad oma serveris käitada (või kasuta näitena Uptime Kumat ja WordPressi saiti). Uuri iga programmi kohta, kas autor tarnib ametliku image'i ja mis nime all, millise tagi valiksid, milline kaust sisaldab püsivaid andmeid ja millist porti programm kuulab. Seejärel selgita, kas käitaksid seda konteineris või paketiallikast, ja miks.

Ülesanne O9.1: Konteiner või mitte?

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…