Pereiti prie turinio

Slapukų nustatymai

Pasirinkite, kokių rūšių slapukus leidžiate. Pasirinkimą bet kada galite pakeisti per „Slapukų nustatymai“ kiekvieno puslapio apačioje. Privatumo pareiškimas

Būtinieji

Visada įjungti

Reikalingi prisijungti, išsaugoti krepšelį ir įsiminti Jūsų pasirinkimus. Jie visada įjungti.

Kokie slapukai?
  • weboke_sessie, weboke_klant, weboke_remember: Jūsų sesija ir prisijungimo išlaikymas
  • weboke_basket: Jūsų krepšelis
  • wkBtwIncl: kainų rodymas su PVM arba be PVM
  • wok_cookies: Jūsų slapukų pasirinkimas, 12 mėnesių

Matuoja, kuri reklama atveda prie apsilankymo ar užsakymo, kad nemokėtume už neveiksmingas reklamas.

Kokie slapukai?
  • Google Ads per Google Tag Manager (_gcl_au, _gcl_aw), iki 90 dienų
  • OpenAI Ads, reklamos ChatGPT
  • wok_aff: per kurį partnerį atėjote pas mus (partnerių programa), 60 dienų

4,6

Šalis ir kalba

Kiekviena šalis turi savo svetainę su tos šalies kainomis ir PVM.

Peržiūrėti

Docker diegimas ir Jūsų pirmasis konteineris

9 modulis: Docker ir docker compose · Skaitymo laikas: 11 min.

Mokymosi tikslas: Po šios pamokos galėsite įdiegti Docker Engine iš oficialaus paketų šaltinio, paleisti, peržiūrėti, apžiūrėti iš vidaus ir pašalinti konteinerius, taip pat žinosite, kodėl grupė docker prilygsta root.

Pagrindinės sąvokos: Docker Engine, Docker Desktop, oficialus apt šaltinis, Debian paketas docker.io, grupė docker, rootless mode, docker run, -d, -p, -v, --name, docker ps, docker logs, docker exec, docker stop, docker rm, docker image prune, docker system df

Kuris Docker?

Serveryje diegiamas Docker Engine: foninė paslauga (dockerd) ir komanda docker. Docker Desktop yra kas kita: programa su langais, skirta Windows, macOS ir Linux darbalaukiams. Serveryje jai ne vieta.

Yra du tvarkingi Docker Engine šaltiniai:

  1. Paties Docker paketų šaltinis (download.docker.com). Visada naujausia versija, įskaitant papildinį docker compose, kurį naudosite 9.3 pamokoje. Būtent tai aprašo Docker dokumentacija ir tai naudojama šiame kurse.
  2. Debian arba Ubuntu paketas docker.io. Senesnis, bet distribucija jį atnaujina per įprastus saugumo atnaujinimus (4.2 pamoka). Puikiai tinka, jei nenorite nieko iš už distribucijos ribų; tačiau tada patikrinkite, ar yra docker compose (su tarpu).

Pasirinkite vieną. Diegiant abu kartu kyla konfliktų, todėl Docker dokumentacija nurodo pirmiausia pašalinti neoficialius paketus, tokius kaip docker.io, docker-compose ir podman-docker.

Diegimas iš Docker paketų šaltinio

Tai žingsniai iš Docker dokumentacijos, skirtos Debian, su atskiru raktu ir atskiru Signed-By (4.1 pamoka). Jei norite, pirmiausia sukurkite momentinę kopiją (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

Tada šaltinio failas /etc/apt/sources.list.d/docker.sources (deb822 formatu):

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

Prie Suites rašomas Jūsų leidimo kodinis pavadinimas (cat /etc/os-release, 4.3 pamoka), o prie Architectures komandos dpkg --print-architecture išvestis. Ubuntu sistemoje URL yra https://download.docker.com/linux/ubuntu, o suite, pavyzdžiui, noble.

Tada diegiame:

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.

Debian ir Ubuntu sistemose Docker po įdiegimo pasileidžia savaime, taip pat po kiekvieno perkrovimo (systemctl status docker, 6.1 pamoka).

Atkreipkite dėmesį: unattended-upgrades (4.2 pamoka) pagal numatytuosius nustatymus neatnaujina šio šaltinio paketų automatiškai. Įtraukite sudo apt update && sudo apt upgrade Docker paketams į savo priežiūros ritmą (10.4 pamoka) arba sąmoningai pridėkite šį šaltinį prie automatinių atnaujinimų.

Grupė docker yra root

Internete visur rašoma, kad save reikia įtraukti į grupę docker, kad nebereikėtų rašyti sudo:

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

Darykite tai tik tada, jei suprantate, ką tai reiškia. Docker dokumentacija čia aiški: grupė docker suteikia root lygio teises. Kas gali valdyti Docker paslaugą, gali paleisti konteinerį su prijungtu visu pagrindinio kompiuterio (host) disku:

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

ir taip tampa root Jūsų serveryje, be slaptažodžio ir be įrašo sudo žurnale. Docker dokumentacija sako taip: Docker paslaugą turėtų galėti valdyti tik patikimi naudotojai.

Serveriui, kurį administruojate tik Jūs, tai yra pasirinkimas: patogumas prieš papildomą kelią į root. Saugiau tiesiog toliau rašyti sudo docker ...; tada kiekviena komanda patenka į sudo žurnalą (3.2 pamoka). Bet kuriuo atveju niekada neįtraukite į šią grupę naudotojo, kuris neturi būti root, pavyzdžiui, svetainės paslaugos naudotojo.

Rootless mode

Docker gali veikti ir be root: tada paslauga ir konteineriai veikia įprasto naudotojo teisėmis, su atskira user namespace. Jį įdiegiate kaip tas naudotojas komanda dockerd-rootless-setuptool.sh install (iš paketo docker-ce-rootless-extras; prieš tai reikia paketo uidmap). Tada spraga konteineryje nesuteikia root teisių pagrindiniame kompiuteryje. Yra apribojimų ir sąranka sudėtingesnė; šiame kurse naudojame įprastą diegimą, o saugumą užtikriname šio modulio taisyklėmis.

Pirmasis tikras konteineris

Paleidžiame nginx žiniatinklio serverį konteineryje, pasiekiamą tik iš paties serverio:

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

Sudedamosios dalys:

DalisReikšmė
-dVeikti fone (detached)
--name proefPavadinimas, kad nereikėtų dirbti su ilgais ID
-p 127.0.0.1:8080:80Konteinerio prievadas 80 tampa pagrindinio kompiuterio prievadu 8080, tik loopback sąsajoje
nginx:stableOficialus nginx image, žyma (tag) stable

Patikrinimas:

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 (5.1 pamoka) patvirtina: tik 127.0.0.1. Jei būtumėte įvedę -p 8080:80, būtų rodoma 0.0.0.0:8080 ir [::]:8080, o Jūsų konteineris būtų pasiekiamas iš interneto, net jei ufw neleidžia prievado 8080 (9.3 pamoka). Versija antraštėje Server Jūsų atveju gali skirtis.

Apžvalga ir įsikišimas

anna@web1:~$ sudo docker logs proef            # ką programa išvedė (stdout ir stderr)
anna@web1:~$ sudo docker logs -f --tail 20 proef   # paskutinės 20 eilučių ir toliau sekti
anna@web1:~$ sudo docker exec -it proef sh     # apvalkalas veikiančiame konteineryje
# cat /etc/os-release
# exit
anna@web1:~$ sudo docker stop proef
anna@web1:~$ sudo docker start proef
anna@web1:~$ sudo docker rm -f proef           # sustabdyti ir pašalinti

docker logs yra pirmoji vieta, kur žiūrite, kai konteineris veikia ne taip, kaip tikitės, lygiai kaip journalctl įprastoms paslaugoms (6.2 pamoka). Su docker exec galite pažiūrėti į vidų, bet geriau ten nieko nekeiskite: pakeitimai konteineryje dingsta per kitą atnaujinimą (9.1 pamoka).

Valymas

Images ir sustabdyti konteineriai lieka, kol jų nepašalinate. VPS su mažu disku tai nepastebimai kaupiasi.

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 pašalina images be pavadinimo, kurie niekam nebepriklauso; su -a taip pat visus images, kurių nenaudoja nė vienas konteineris. Būkite atsargūs su docker system prune --volumes: ji taip pat pašalina anoniminius volumes (be pavadinimo), kurie tuo metu nepriklauso jokiam konteineriui, o docker volume prune -a net volumes su pavadinimu. Juose gali būti Jūsų duomenys. Todėl visada suteikite volumes pavadinimą arba naudokite bind mount (9.1 pamoka) ir pirmiausia pasitikrinkite su docker volume ls.

Konteinerių žurnalai taip pat gali augti. Pagal numatytuosius nustatymus Docker juos saugo JSON failuose be dydžio ribos. Ribą nustatote faile /etc/docker/daemon.json:

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

Tada sudo systemctl restart docker; nustatymas galioja tik naujai sukurtiems konteineriams, esamus konteinerius sukurkite iš naujo.

Praktikoje

Docker WebOké VPS veikia taip pat, kaip pas bet kurį kitą teikėją: tai programinė įranga Jūsų pačių serveryje, kurią patys įdiegiate ir atnaujinate. Mažame VPS reguliariai tikrinkite disko vietą su docker system df ir df -h (1.4 pamoka).

Santrauka

  • Įdiekite Docker Engine iš Docker paketų šaltinio (su atskiru raktu ir Signed-By) arba docker.io iš distribucijos, bet ne abu.
  • Grupė docker prilygsta root; sudo docker palieka pėdsaką sudo žurnale. Rootless mode yra saugesnė, bet ribotesnė alternatyva.
  • docker run -d --name ... -p 127.0.0.1:host:container image:tag paleidžia konteinerį, pasiekiamą tik lokaliai; patikrinkite su ss.
  • docker ps, logs, exec, stop, rm yra Jūsų kasdieniai įrankiai.
  • Valykite images su docker image prune, apribokite konteinerių žurnalus (pagal numatytuosius nustatymus neriboti) ir saikingai naudokite --volumes.

Testas (quiz)

1. Kodėl narystė grupėje docker iš esmės suteikia root teises?



2. Po docker run -d -p 8080:80 nginx komanda ss -tlnp rodo eilutę 0.0.0.0:8080. Ką turėjote įvesti, kad prievadas būtų publikuotas tik lokaliai?



3. Konteineris pasileidžia, bet jame esanti svetainė neveikia. Ką tikrinate pirmiausia?



4. Kodėl renkatės vieną Docker šaltinį ir nediegiate docker.io ir docker-ce kartu?



5. Ką daro docker system prune --volumes, ką būtina gerai žinoti?



Užduotis

Užduotis O9.2: Jūsų pirmasis konteineris. Įdiekite Docker Engine savo serveryje pagal pamoką (arba bandomajame kompiuteryje). Paleiskite nginx konteinerį, kuris klauso tik 127.0.0.1:8080, patikrinkite su docker ps, curl -I ir ss -tlnp, peržiūrėkite žurnalus ir tada jį pašalinkite. Atsakykite į klausimus: iš kokio šaltinio įdiegėte Docker, ką ss parodė prie prievado 8080 ir ar įtraukėte save į grupę docker (kodėl taip arba ne)?

Užduotis O9.2: Jūsų pirmasis konteineris

Šią užduotį atliekate patys; niekas jos netikrina. Pažymėkite, ką atlikote, ir pažymėkite užduotį kaip atliktą.




Jūsų pažymėti varneliai ir pastabos lieka tik šioje naršyklėje; niekur jų nesiunčiame. Jei esate prisijungę, skiltyje Mano kursai išsaugome tik tai, kad užduotį atlikote.

Skaitykite daugiau

Akimirką…

Nustatykite domenus

Kiekvienam domenui nustatykite vardų serverius, susiejimą su talpinimu ir tai, kas taps valdytoju.

Įkeliami Jūsų domenai…