Podman, Dockerfile ja Ubuntu: Kaasaegne konteinerite haldus ja turvalisus Linuxis

目次

1. Sissejuhatus

Konteinertehnoloogia areng ja selle populaarsuse taust

Viimastel aastatel on konteinertehnoloogia tähtsus rakenduste arenduse ja halduse valdkonnas kiiresti kasvanud. Eriti hinnatakse võimalust tagada ühtne käitumine arendus- ja tootmiskeskkonnas, mis suurendab töökindlust ning on pälvinud paljude inseneride toetuse.

Suurimaks näiteks on Docker, kuid viimasel ajal kogub tähelepanu ka Podman, mis pakub alternatiivi. Podman kasutab peaaegu sama CLI-d (käsurealiidest) kui Docker, kuid on demonita, kergekaaluline ja ei vaja root-õigusi (rootless), mis teeb selle eriliseks.

Miks just “Podman + Dockerfile + Ubuntu”?

Selles artiklis selgitatakse, kuidas kombineerida Podmanit, Dockerfile’i ja Ubuntu’t ning rakendada kaasaegset konteinerihaldust Linuxi keskkonnas.

  • Ubuntu on populaarne Linuxi distributsioon nii algajate kui ka edasijõudnute seas,
  • Dockerfile toimib konteineripildi “joonisena”,
  • Podman on järgmise põlvkonna tööriist, mis võimaldab paindlikku ja turvalist haldust.

Eriti kasvava turvateadlikkuse taustal on Podmani kasutamine Ubuntu’l koos Dockerfile’iga muutumas levinuks nii iseseisvate arendajate kui ka ettevõtete seas.

Artikli eesmärk ja sihtrühm

Selle artikli eesmärk on juhendada samm-sammult, kuidas luua praktiline konteiner Podmani ja Dockerfile’i abil Ubuntu keskkonnas.

Ootame, et sihtrühma kuuluvad:

  • Inimesed, kellel on Dockeriga kogemus, kuid huvituvad Podmanist
  • Ubuntu kasutajad, kes soovivad turvaliselt konteineritega töötada
  • Insenerid, kes soovivad tuua konteinertehnoloogia oma tööprotsessidesse
  • Algajad, kes tahavad proovida Dockerfile’i kirjutamist ja Podmani kasutamist

Artikkel hõlmab põhikasutust, probleemide vältimise näpunäiteid ning erinevusi ja üleminekumeetodeid Dockerilt Podmanile.

2. Mis on Podman?

Podmani põhiülevaade

Podman (Pod Manager) on järgmise põlvkonna konteinerihaldustööriist, mida arendab Red Hat’i eestvedamisel kogukond. Sarnaselt Dockerile saab Podmaniga ehitada, käitada ja hallata OCI (Open Container Initiative) standardile vastavaid konteinereid, kuid sellel on teistsugune arhitektuur ja filosoofia.

Podmani suurim erinevus on see, et see ei vaja demoni (taustaprotsessi) olemasolu. Tänu sellele saab seda kasutada kergekaaluliselt ja turvaliselt. Lisaks toetab Podman rootless-režiimi, mis võimaldab tavakasutajal käivitada ja hallata konteinereid ilma täisõigusteta. CLI on väga sarnane Dockerile ning põhikäsklused on peaaegu identsed.

Podmani peamised omadused

Allpool on toodud Podmani peamised eelised.

Demonita arhitektuur

Podman ei kasuta konteinerite haldamiseks daemon’it (alalist protsessi). See võimaldab vältida tarbetuid taustaprotsesse ning saavutada ressursisäästliku keskkonna.

Rootless-tugi (tavakasutajatele)

Podman võimaldab tavakasutajatel käivitada ja hallata konteinereid. See on eriti kasulik mitmekasutajaga süsteemides ja serverites ning vähendab oluliselt turvariske.

Dockeri CLI ühilduvus

Podman kasutab peaaegu samu käske kui Docker. Näiteks alltoodud Docker-käsud töötavad analoogselt Podmaniga:

podman build -t myimage .
podman run -it myimage bash

Seega saavad Dockeriga harjunud kasutajad lihtsalt üle minna.

Pod-funktsioon

Podman sisaldab Kubernetesest tuntud “Pod” kontseptsiooni, võimaldades hallata mitut konteinerit ühe loogilise üksusena. See suurendab ühilduvust Kubernetesega ning võimaldab sujuvat üleminekut lokaalsest pilvekeskkonda.

Kooskõla Ubuntu’ga

Podman on aktiivselt kasutusel Fedora ja RHEL-põhistes distributsioonides, kuid töötab stabiilselt ka Ubuntu’s. Ametlikust repositooriumist saab selle hõlpsalt paigaldada ning seadistamine on lihtne, eriti Ubuntu 20.04 LTS ja uuemates versioonides.

3. Podmani paigaldamine Ubuntu’sse

Enne alustamist: kontrolli tingimusi

Enne Podmani paigaldamist Ubuntu’sse kontrolli, mis Ubuntu versiooni kasutad. Soovitatav on kasutada Ubuntu 20.04 LTS või uuemat. Vanemates versioonides ei pruugi vajalikud paketid ametlikus repositooriumis saadaval olla.

Versiooni kontrollimiseks kasuta järgmist käsku:

lsb_release -a

Podmani paigaldamiseks on vajalikud sudo õigused. Isegi kui kavatsed kasutada rootless-režiimi, peab paigaldamise ajal olema administraatoriõigused.

Podmani paigaldamine (Ubuntu ametlik repositoorium)

Ubuntu 20.04 või 22.04 puhul saab Podmani hõlpsalt paigaldada APT-i kaudu:

sudo apt update
sudo apt install -y podman

Pärast paigaldamist kontrolli versiooni järgmiselt:

podman --version

Uusima versiooni paigaldamine (ametliku PPA kaudu)

Ametlikus Ubuntu repositooriumis võib Podmani versioon olla pisut vanem, seega uusimate funktsioonide jaoks lisa ametlik PPA (Personal Package Archive):

. /etc/os-release
echo "deb https://download.opensuse.org/repositories/devel:/kubic:/libcontainers:/stable/xUbuntu_${VERSION_ID}/ /" | sudo tee /etc/apt/sources.list.d/devel:kubic:libcontainers:stable.list
curl -L https://download.opensuse.org/repositories/devel:kubic:libcontainers:stable/xUbuntu_${VERSION_ID}/Release.key | sudo apt-key add -
sudo apt update
sudo apt install -y podman

Selle meetodiga saab kasutada Podmani uusimat versiooni, mis on võrdväärne Red Hat’i või Fedora omadega.

Podmani baastest

Pärast paigaldamist tee lihtne toimivustest:

podman info

See käsk kuvab Podmani versiooni, seadistused ja toetatud funktsioonid (sh rootless).

Samuti saad testida ametliku Alpine Linuxi konteineri käivitamist:

podman run --rm -it alpine sh

Kui shell käivitub, on Podman edukalt töökorras.

4. Dockerfile’i põhitõed ja kasutamine Podmaniga

Mis on Dockerfile?

Dockerfile on “joonis”, mille järgi ehitatakse konteineripilt. Selles tekstifailis on käsud selle kohta, millist baaspilti kasutada, millised paketid paigaldada, millised failid kopeerida jms.

Podman või Docker loovad selle faili põhjal ühtlase keskkonna automaatselt.

Levinud käskude näited:

FROM ubuntu:22.04
RUN apt update && apt install -y curl
COPY ./app.sh /usr/local/bin/app.sh
CMD ["bash", "/usr/local/bin/app.sh"]

Nii paigaldatakse baasil Ubuntu-pilt, vajalikud paketid, kopeeritakse skript ja määratakse käivitatav fail.

Kuidas kasutada Dockerfile’i Podmaniga

Podman võimaldab ehitada konteineripilte Dockerfile’i abil täpselt nagu Docker.

1. Kataloogi ettevalmistamine

Loo järgmine failistruktuur:

project/
├── Dockerfile
└── app.sh

app.sh võiks sisaldada näiteks:

#!/bin/bash
echo "Tere tulemast Podman konteinerisse!"

Lisa failile käivitusõigus:

chmod +x app.sh

2. Pildi ehitamine Podmaniga

Ole veendunud, et oled kataloogis, kus Dockerfile asub, ning ehita pilt:

podman build -t mypodmanapp .

See loob konteineripildi nimega mypodmanapp.

3. Pildi kontroll

Kontrolli loodud pilte:

podman images

4. Konteineri käivitamine

Käivita konteiner ehitatud pildist:

podman run --rm mypodmanapp

Kui seadistus on õige, näed skripti väljundit: Tere tulemast Podman konteinerisse!

Erinevus Containerfile ja Dockerfile vahel

Podmanis võib kasutada Dockerfile’iga sama süntaksit omavat faili nimega Containerfile. See on lihtsalt neutraalsem nimetus, kuid sisu ja tööpõhimõte on sama.

Võid määrata failinime käsuga -f:

podman build -f Containerfile -t myimage .

Nii toimib see nii Dockerfile kui ka Containerfile nime korral.

5. Praktiline näide: Ubuntu põhine konteiner

Ubuntu baasil Dockerfile loomine

Siin on praktiline näide Ubuntu baasil Dockerfile’i loomisest ja selle põhjal konteineripildi ehitamisest Podmaniga.

Valmista ette järgmine lihtne Dockerfile:

FROM ubuntu:22.04

RUN apt update &&     apt install -y curl &&     apt clean

COPY hello.sh /usr/local/bin/hello.sh
RUN chmod +x /usr/local/bin/hello.sh

CMD ["/usr/local/bin/hello.sh"]

Selles Dockerfile’s:

  • Kasutatakse ametlikku Ubuntu 22.04 pilti
  • Paigaldatakse curl pakett
  • Kopeeritakse hello.sh konteinerisse
  • Määratakse hello.sh vaikimisi käivitatavaks skriptiks

Seejärel loo lihtne hello.sh:

#!/bin/bash
echo "Tere tulemast Podman konteinerist!"

Anna skriptile käivitusõigus:

chmod +x hello.sh

Podmaniga pildi ehitamine

Kui failid on valmis, ehita pilt käsuga:

podman build -t ubuntu-hello .

-t ubuntu-hello annab loodavale pildile nime. Punkt (.) viitab käesolevale kataloogile.

Pärast edukat ehitamist on pilt saadaval lokaalselt:

podman images

Ehitatud pildi käivitamine ja kontroll

Käivita konteiner järgmiselt:

podman run --rm ubuntu-hello

Väljund:

Tere tulemast Podman konteinerist!

--rm kustutab konteineri automaatselt pärast käivitamist – mugav testimiseks.

Lisa: Interaktiivne konteineri käivitamine

Kui soovid töötada otse konteineris, kasuta -it valikut ja käivita bash:

podman run -it ubuntu-hello bash

Nii saab kasutada Ubuntu baasil arenduskeskkonda.

6. Podmani kasulikud funktsioonid ja näpunäited

Podmani tugevused: paindlikkus ja turvalisus

Podman pakub Dockeri ühilduvust, kuid võimaldab paindlikumat ja turvalisemat konteinerihaldust. Siin on mõned praktilised nõuanded ja funktsioonid igapäevaseks kasutamiseks.

Turvaline kasutus rootless-režiimis

Üks Podmani suurimaid eeliseid on rootless-režiim, mis tähendab, et tavakasutaja saab käivitada ja hallata konteinereid ilma sudo’ta:

podman run -it ubuntu bash

Konteinerite käivitamine piirdub kasutaja kodukataloogiga, minimeerides süsteemi mõjutamise võimalust. See on eriti kasulik jagatud serverites ja arenduskeskkondades.

Automaatkäivitus systemd-iga

Podman integreerub loomulikult systemd-iga, võimaldades konteineri automaatset käivitamist teenusena.

Teenuseühiku genereerimine:

podman generate systemd --name mycontainer --files --restart-policy=always

Failid luuakse ~/.config/systemd/user/ alla. Aktiveeri ja käivita teenus:

systemctl --user daemon-reexec
systemctl --user enable --now container-mycontainer.service

Nii käivitatakse konteiner automaatselt ka pärast serveri taaskäivitust.

Mitme konteineri haldus podman-compose’iga

Lisaks üksikkonteineritele saab podman-compose’iga hallata mitut konteinerit korraga. Töötab väga sarnaselt Docker Compose’ile.

Paigaldamiseks kasuta pip’i:

pip install podman-compose

YAML-failid on enamasti ühilduvad Docker Compose’iga.

Käivita kõik teenused taustal:

podman-compose up -d

Nii saad kiiresti taasluua arendus- või testkeskkonna.

Muud kasulikud käsud ja nõuanded

Piltide puhastamine

podman system prune -a

Kustutab kasutamata pildid ja konteinerid – vabastab salvestusruumi.

Käsu automaatne lõpetamine (bash/zsh)

Podmani käsulõpetusskripti saab paigaldada:

sudo apt install podman-docker

See võimaldab kasutada käsulõpetust nagu Dockeril, parandades töövoogu.

7. Dockerilt Podmanile ülemineku juhend

Miks Dockerilt Podmanile üle minna?

Docker on olnud aastaid konteineritehnoloogia sünonüüm, kuid viimastel aastatel on paljud kolinud Podmani juurde tänu selle kergusele ja turvalisusele. Red Hat Enterprise Linux (RHEL) ja Fedora on Dockerist loobunud ning kasuks võtnud Podmani, mis omakorda kiirendab üleminekut.

Selles peatükis selgitatakse kuidas sujuvalt üle minna Dockerilt Podmanile.

Käsurea ühilduvus Dockeriga

Podman on kõrge käsurea ühilduvusega, võimaldades enamiku Docker-käskudest otse üle kanda:

DockerPodman
docker build -t myapp .podman build -t myapp .
docker run -it myapppodman run -it myapp
docker imagespodman images
docker pspodman ps

CLI kasutuskogemus jääb samaks, mis teeb ülemineku lihtsaks.

Täielik ühilduvus podman-docker paketiga

Kui olemasolevad skriptid või CI/CD töövood kasutavad “docker” käsku, saab podman-docker paketiga kasutada Podmani Docker-käskudega:

sudo apt install podman-docker

See loob sümboolse lingi “docker” käsule, mis tegelikult kutsub Podmani:

which docker
# → /usr/bin/docker → podman sümboolne link

Nii saab olemasolevad Docker-skriptid kasutada Podmaniga ilma muudatusteta.

docker-compose alternatiiv: podman-compose

Mitme konteineri teenuste jaoks saab kasutada podman-compose. See tõlgendab docker-compose.yml faile Podmani jaoks.

Kuigi ühilduvus on kõrge, võivad mõned Compose-valikud või käitumised veidi erineda:

  • Mõned depends_on tüüpi valikud võivad olla piiratud või erinevalt käituda
  • Sündmuslogide ja health check’i käitumine võib olla erinev

Lihtsamate projektide korral on üleminek üldjuhul probleemivaba.

Piltide ja mahuandmete üleviimine

Kui soovid kasutada Dockeris loodud pilte Podmaniga, ei pääse Podman automaatselt Dockeriga jagatud lokaalsetele piltidele ligi. Tee üks järgmistest:

Variant 1: Tõmba pilt uuesti Podmanis

podman pull ubuntu:22.04

Variant 2: Ekspordi Dockerist, impordi Podmanisse

# Dockerist eksport
docker save myimage > myimage.tar

# Podmaniga import
podman load < myimage.tar

See võimaldab kasutada Dockeris loodud pilte ka Podmanis.

Muud tähelepanekud

  • Rootless toe erinevus: Docker vajab tavaliselt root’i, Podmanil on rootless standardis
  • Demonistruktuuri erinevus: Podman on demonita, seega erineb taustaprotsesside haldus
  • Logide ja andmete salvestamise koht võib olla erinev – kontrolli seadeid üleminekul

8. Korduma kippuvad küsimused (KKK)

K1. Mis vahe on Podmanil ja Dockeril?

V1. Peamine erinevus on see, et Podman töötab demonita (ei vaja taustaprotsessi). Tänu sellele on see kergem ja turvalisem. Lisaks toetab Podman rootless-režiimi, mis lubab tavakasutajal konteinereid hallata. CLI on väga sarnane Dockeriga.

K2. Kas Dockerfile ja Containerfile erinevad?

V2. Funktsionaalselt ei ole vahet. Mõlemad kirjeldavad, kuidas konteineripilt ehitatakse, ning süntaks on sama. Podmani ja OCI projektides kasutatakse tihti neutraalsemat nime “Containerfile”, kuid tegelikult võib kasutada mõlemat.

K3. Kas Podman toetab Docker Compose’i?

V3. Otsest tuge pole, kuid podman-compose võimaldab kasutada Docker Compose YAML-faile Podmani keskkonnas. Osadel valikutel võib olla piiranguid, seega keerukate projektide puhul testi eelnevalt.

K4. Kas Podman töötab stabiilselt Ubuntu’s?

V4. Jah, Ubuntu 20.04 LTS ja uuemates versioonides töötab Podman hästi. Paigaldus on lihtne läbi ametliku repositooriumi või vajadusel PPA kaudu uusima versiooni jaoks.

K5. Kas rootless-režiimis on piiranguid?

V5. Rootless-režiimis on mõned piirangud, näiteks privilegeeritud toimingud ja pordid alla 1024. Neid saab enamasti lahendada portide edasi suunamisega ning igapäevaste vajaduste jaoks on rootless-režiim piisav.

K6. Kas Podmaniga saab tõmmata samu pilte mis Docker Hubis?

V6. Jah, Podman kasutab vaikimisi Docker Hub’i. Mõnel juhul tuleb pildi nimi ja nimetus (namespace) täpselt määrata:

podman pull docker.io/library/ubuntu

Podman toetab ka Quay.io, GitHub Container Registry jms repositooriume.

K7. Kas Podman sobib tootmiskeskkonda?

V7. Jah, Podmanil on Kubernetes ühilduvad Pod-funktsioonid ja systemd tugi. See sobib eriti hästi kõrgete turvanõuetega keskkondadesse. Red Hat Enterprise Linux ja Fedora kasutavad Podmani vaikimisi ning kogemusi suurte projektidega on rohkelt.

Viited