Siirry suoraan sisältöön

Evästeasetukset

Valitse, mitä evästetyyppejä sallit. Voit muuttaa valintaasi milloin tahansa jokaisen sivun alareunassa olevasta kohdasta Evästeasetukset. Tietosuojaseloste

Välttämättömät

Aina käytössä

Tarvitaan sisäänkirjautumiseen, ostoskorin säilyttämiseen ja valintojesi muistamiseen. Nämä ovat aina käytössä.

Mitkä evästeet?
  • weboke_sessie, weboke_klant, weboke_remember: istuntosi ja sisäänkirjautuneena pysyminen
  • weboke_basket: ostoskorisi
  • wkBtwIncl: hintojen näyttäminen verollisina tai verottomina
  • wok_cookies: evästevalintasi, 12 kuukautta

Mittaa, mikä mainos johtaa käyntiin tai tilaukseen, jotta emme maksa mainoksista, joista ei ole hyötyä.

Mitkä evästeet?
  • Google Ads Google Tag Managerin kautta (_gcl_au, _gcl_aw), enintään 90 päivää
  • OpenAI Ads, mainokset ChatGPT-palvelussa
  • wok_aff: minkä kumppanin kautta tulit meille (kumppaniohjelma), 60 päivää

4,6

Maa ja kieli

Jokaisella maalla on oma sivustonsa, jossa on kyseisen maan hinnat ja ALV.

Näytä

Dockerin asentaminen ja ensimmäinen konttisi

Moduuli 9: Docker ja docker compose · Lukuaika: 11 minuuttia

Tavoite: Tämän oppitunnin jälkeen osaat asentaa Docker Enginen virallisesta pakettilähteestä sekä käynnistää, tarkastella, tutkia sisältä ja siivota kontteja. Tiedät myös, miksi docker-ryhmä vastaa rootia.

Keskeiset käsitteet: Docker Engine, Docker Desktop, virallinen apt-lähde, Debianin docker.io, docker-ryhmä, rootless mode, docker run, -d, -p, -v, --name, docker ps, docker logs, docker exec, docker stop, docker rm, docker image prune, docker system df

Mikä Docker?

Palvelimelle asennetaan Docker Engine: taustapalvelu (dockerd) ja komento docker. Docker Desktop on eri asia: ikkunoilla toimiva ohjelma Windowsiin, macOS:ään ja Linux-työpöydille. Se ei kuulu palvelimelle.

Docker Enginelle on kaksi siistiä lähdettä:

  1. Dockerin oma pakettilähde (download.docker.com). Aina uusin versio, mukaan lukien liitännäinen docker compose, jota käytät oppitunnilla 9.3. Tätä Dockerin dokumentaatio kuvaa ja tätä tämä kurssi käyttää.
  2. Debianin tai Ubuntun paketti docker.io. Vanhempi, mutta jakelu päivittää sen tavallisten tietoturvapäivitystesi mukana (oppitunti 4.2). Hyvä valinta, jos et halua mitään jakelun ulkopuolelta. Tarkista silloin, että docker compose (välilyönnillä) on saatavilla.

Valitse yksi. Molempien asentaminen sekaisin aiheuttaa ristiriitoja, ja siksi Dockerin dokumentaatio neuvoo poistamaan ensin epäviralliset paketit, kuten docker.io, docker-compose ja podman-docker.

Asennus Dockerin pakettilähteestä

Nämä ovat Dockerin dokumentaation vaiheet Debianille, avain erillään ja oma Signed-By (oppitunti 4.1). Ota halutessasi ensin tilannevedos.

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

Sen jälkeen lähdetiedosto /etc/apt/sources.list.d/docker.sources (deb822-muodossa):

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

Kohtaan Suites tulee julkaisusi koodinimi (cat /etc/os-release, oppitunti 4.3) ja kohtaan Architectures komennon dpkg --print-architecture tuloste. Ubuntussa URL on https://download.docker.com/linux/ubuntu ja suite esimerkiksi noble.

Sitten asennus:

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.

Debianissa ja Ubuntussa Docker käynnistyy itsestään asennuksen jälkeen ja myös jokaisen uudelleenkäynnistyksen jälkeen (systemctl status docker, oppitunti 6.1).

Huomaa: unattended-upgrades (oppitunti 4.2) ei oletuksena päivitä tämän lähteen paketteja automaattisesti. Ota Dockerin sudo apt update && sudo apt upgrade mukaan ylläpitorytmiisi (oppitunti 10.4) tai lisää lähde tietoisesti automaattisiin päivityksiisi.

docker-ryhmä on root

Kaikkialla internetissä neuvotaan lisäämään itsesi ryhmään docker, jotta sinun ei tarvitse enää kirjoittaa sudo:

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

Tee niin vain, jos ymmärrät, mitä se tarkoittaa. Dockerin dokumentaatio sanoo sen selvästi: docker-ryhmä antaa root-tason oikeudet. Kuka tahansa, joka saa ohjata Docker-palvelua, voi käynnistää kontin, johon on liitetty isännän koko levy:

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

ja on sen jälkeen root palvelimellasi ilman salasanaa ja ilman merkintää sudo-lokiin. Dockerin dokumentaation sanoin: vain luotetut käyttäjät saavat ohjata Docker-palvelua.

Palvelimella, jota ylläpidät yksin, kyse on valinnasta: mukavuus vastaan ylimääräinen reitti rootiksi. Turvallisempaa on kirjoittaa edelleen sudo docker ..., jolloin jokainen komento näkyy sudo-lokissa (oppitunti 3.2). Älä missään tapauksessa lisää ryhmään käyttäjää, joka ei saa olla root, kuten verkkosivuston palvelukäyttäjää.

Rootless mode

Docker voi toimia myös ilman rootia: palvelu ja kontit toimivat silloin tavallisen käyttäjän alla, omassa user namespacessa. Asennat sen kyseisenä käyttäjänä komennolla dockerd-rootless-setuptool.sh install (paketista docker-ce-rootless-extras; ennen sitä tarvitaan paketti uidmap). Tällöin kontin vuoto ei anna root-oikeuksia isäntään. Tilassa on rajoituksia ja sen käyttöönotto on hankalampaa. Tällä kurssilla käytämme tavallista asennusta ja pidämme sen turvallisena tämän moduulin säännöillä.

Ensimmäinen oikea kontti

Käynnistämme nginx-verkkopalvelimen kontissa, ja se on tavoitettavissa vain palvelimelta itseltään:

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

Osat:

OsaMerkitys
-dToimii taustalla (detached)
--name proefNimi, jotta sinun ei tarvitse käyttää pitkiä tunnisteita
-p 127.0.0.1:8080:80Kontin portista 80 tulee isännän portti 8080, vain loopbackissa
nginx:stableVirallinen nginx-image, tagi stable

Tarkistus:

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 (oppitunti 5.1) vahvistaa: vain osoitteessa 127.0.0.1. Jos olisit kirjoittanut -p 8080:80, siinä lukisi 0.0.0.0:8080 ja [::]:8080, ja konttisi olisi tavoitettavissa internetistä, vaikka ufw ei sallisi porttia 8080 (oppitunti 9.3). Server-otsakkeen versio voi olla sinulla eri.

Tarkastelu ja toimenpiteet

anna@web1:~$ sudo docker logs proef            # mitä ohjelma kirjoitti (stdout ja stderr)
anna@web1:~$ sudo docker logs -f --tail 20 proef   # viimeiset 20 riviä ja seuraa jatkuvasti
anna@web1:~$ sudo docker exec -it proef sh     # shell käynnissä olevaan konttiin
# cat /etc/os-release
# exit
anna@web1:~$ sudo docker stop proef
anna@web1:~$ sudo docker start proef
anna@web1:~$ sudo docker rm -f proef           # pysäytä ja poista

docker logs on ensimmäinen paikka, josta katsot, kun kontti ei toimi odotetusti, samaan tapaan kuin journalctl tavallisille palveluille (oppitunti 6.2). Komennolla docker exec pääset katsomaan sisälle, mutta älä mieluiten muuta siellä mitään: kontin muutokset katoavat seuraavassa päivityksessä (oppitunti 9.1).

Siivoaminen

Imaget ja pysäytetyt kontit jäävät paikalleen, kunnes siivoat ne. Pienen levyn VPS:llä tämä kasvaa huomaamatta.

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 poistaa nimettömät imaget, joita mikään ei enää käytä; valitsimella -a myös kaikki imaget, joita mikään kontti ei käytä. Ole varovainen komennon docker system prune --volumes kanssa: se poistaa myös anonyymit (nimettömät) volumet, jotka eivät sillä hetkellä kuulu mihinkään konttiin, ja docker volume prune -a poistaa jopa nimetyt volumet. Niissä voi olla tietojasi. Anna siksi volumeille aina nimi tai käytä bind mountia (oppitunti 9.1), ja tarkista ensin komennolla docker volume ls.

Myös konttien lokit voivat kasvaa. Docker tallentaa ne oletuksena JSON-tiedostoihin ilman kokorajaa. Rajan asetat tiedostossa /etc/docker/daemon.json:

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

Sen jälkeen sudo systemctl restart docker. Asetus koskee vain uusia kontteja; olemassa olevat kontit luot uudelleen.

Käytännössä

Docker toimii WebOkén VPS:llä samalla tavalla kuin minkä tahansa muun palveluntarjoajan palvelimella: se on ohjelmistoa omalla palvelimellasi, ja asennat ja päivität sen itse. Seuraa pienellä VPS:llä levytilaa säännöllisesti komennoilla docker system df ja df -h (oppitunti 1.4).

Yhteenveto

  • Asenna Docker Engine Dockerin pakettilähteestä (omalla avaimella ja Signed-By-tiedostolla) tai jakelun docker.io, älä molempia.
  • docker-ryhmä vastaa rootia; sudo docker jättää jäljen sudo-lokiin. Rootless mode on turvallisempi mutta rajoitetumpi vaihtoehto.
  • docker run -d --name ... -p 127.0.0.1:host:container image:tag käynnistää kontin, joka on tavoitettavissa vain paikallisesti; tarkista komennolla ss.
  • docker ps, logs, exec, stop ja rm ovat päivittäisiä työkalujasi.
  • Siivoa imaget komennolla docker image prune, rajaa konttien lokit (oletuksena rajattomat) ja käytä komentoa --volumes säästeliäästi.

Tietovisa (quiz)

1. Miksi docker-ryhmän jäsenyys antaa käytännössä root-oikeudet?



2. Komennon docker run -d -p 8080:80 nginx jälkeen ss -tlnp näyttää rivin 0.0.0.0:8080. Mitä olisi pitänyt kirjoittaa, jotta portti julkaistaan vain paikallisesti?



3. Kontti käynnistyy, mutta sen sisällä oleva verkkosivusto ei toimi. Mitä katsot ensimmäisenä?



4. Miksi valitset Dockerille yhden lähteen etkä asenna paketteja docker.io ja docker-ce sekaisin?



5. Mitä docker system prune --volumes tekee, mikä sinun on hyvä tietää?



Tehtävä

Tehtävä O9.2: Ensimmäinen konttisi. Asenna Docker Engine palvelimellesi oppitunnin ohjeiden mukaan (tai testikoneelle). Käynnistä nginx-kontti, joka kuuntelee vain osoitteessa 127.0.0.1:8080, tarkista komennoilla docker ps, curl -I ja ss -tlnp, katso lokit ja siivoa kontti lopuksi pois. Vastaa kysymyksiin: mistä lähteestä asensit Dockerin, mitä ss näytti portin 8080 kohdalla, ja lisäsitkö itsesi docker-ryhmään (miksi tai miksi et)?

Tehtävä O9.2: Ensimmäinen konttisi

Tämän tehtävän teet itse, kukaan ei tarkista sitä. Merkitse tekemäsi kohdat ja merkitse tehtävä tehdyksi.




Merkintäsi ja muistiinpanosi pysyvät vain tässä selaimessa, emme lähetä niitä minnekään. Jos olet kirjautunut sisään, tallennamme kohtaan Omat kurssit vain sen, että olet tehnyt tehtävän.

Lue lisää

Hetkinen…

Määritä verkkotunnuksesi

Määritä kullekin verkkotunnukselle nimipalvelimet, liitos webhotelliin ja se, kuka tulee omistajaksi.

Ladataan verkkotunnuksia…