Podman doplňuje Buildah a Skopeo tím, že nabízí prostředí podobné příkazovému řádku Docker:umožňuje uživatelům spouštět samostatné (neorganizované) kontejnery. A Podman nepotřebuje démona ke spuštění kontejnerů a podů, takže se můžeme snadno rozloučit s velkými tlustými démony. Na pozadí nic nedělají žádní démoni, což znamená, že Podman lze integrovat do systémových služeb prostřednictvím systemd
.
V této příručce se naučíme, jak nainstalovat Podman v OpenSUSE Leap.
Související příspěvky
- Jak nainstalovat a používat Podman v Debianu 11
- Jak nainstalovat a používat Podman v Rocky Linux/Alma Linux/Centos 8
- Jak nainstalovat a používat Podman ve Fedoře 34/35
- Jak nainstalovat a nakonfigurovat docker v Rocky Linux/Centos 8
- Začínáme s Docker Compose with Example
- Docker jako sestavovací agent – Spusťte Jenkins staví na Dockeru
Předpoklady
Chcete-li pokračovat, ujistěte se, že máte následující:
- Aktualizovaný server/pracovní stanice OpenSUSE LEAP
- Přístup uživatele root nebo uživatel s přístupem sudo
- Přístup k internetu
Obsah
- Zajištění aktuálnosti serveru
- Instalace podman
- Příklady příkazového řádku
- Runa postgres persistent container
- Správa kontejnerů jako systémových služeb prostřednictvím systemd a Podman
1. Zajištění aktuálnosti serveru
Pomocí tohoto příkazu zajistíte aktualizaci našich serverových balíčků
sudo zypper ref
sudo zypper update -y
Ujistěte se, že jsou nainstalovány běžné balíčky
sudo zypper install -y vim
2. Instalace Podman
Podman je k dispozici ve výchozích úložištích pro OpenSUSE. Nainstalujte jej pomocí tohoto příkazu:
sudo zypper install -y podman
Tento příkaz nainstaluje Podman a také jeho závislosti.
To je vše. Nyní můžeme hrát s Podmanem.
3. Příklady příkazového řádku
Pojďme prozkoumat spuštění OpenSUSE Leap Container pomocí podman.
Na dockeru bychom tento příkaz použili ke spuštění kontejneru OpenSUSE Leap:
docker run -it opensuse/leap:15.3 sh
Toto se nezdaří, protože neexistuje žádný docker
příkaz na mém počítači OpenSUSE. Docker můžeme nahradit podmanem:
podman run -it opensuse/leap:15.3 sh
Spusťte několik příkazů, abychom potvrdili, že funguje podle očekávání:
~> podman run -it opensuse/leap:15.3 sh
Trying to pull registry.opensuse.org/opensuse/leap:15.3...
Getting image source signatures
Copying blob 7bc46307c67f done
Copying config 09d5e2cf44 done
Writing manifest to image destination
Storing signatures
sh-4.4# whoami
root
sh-4.4# cat /etc/os-release
NAME="openSUSE Leap"
VERSION="15.3"
ID="opensuse-leap"
ID_LIKE="suse opensuse"
VERSION_ID="15.3"
PRETTY_NAME="openSUSE Leap 15.3"
ANSI_COLOR="0;32"
CPE_NAME="cpe:/o:opensuse:leap:15.3"
BUG_REPORT_URL="https://bugs.opensuse.org"
HOME_URL="https://www.opensuse.org/"
sh-4.4#
Chcete-li zkontrolovat stav kontejneru, použijte podman ps
příkaz
~> podman ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
eaa09408b382 registry.opensuse.org/opensuse/leap:15.3 sh 53 seconds ago Exited (0) 13 seconds ago priceless_curran
Chcete-li kontejner smazat, použijte podman rm
:
~> podman rm eaa09408b382
eaa09408b382ceb33a4696fed282e76df5130abf556b085ddc199eb30af54c8c
Seznam obrázků:
~> podman images
REPOSITORY TAG IMAGE ID CREATED SIZE
registry.opensuse.org/opensuse/leap 15.3 09d5e2cf44af 2 weeks ago 111 MB
Obrázek můžeme smazat pomocí obrázku podman image rm
příkaz:
~> podman image rm opensuse/leap:15.3
Untagged: registry.opensuse.org/opensuse/leap:15.3
Deleted: 09d5e2cf44af39c62b803e65991d700d8300dc34d82ff03c9cf359b9e092177a
Z výše uvedeného můžeme potvrdit, že příkaz podman používá stejnou syntaxi jako docker
4. Spusťte perzistentní kontejner Postgres
Dále se podívejme, jak můžeme spustit trvalý kontejner. V tomto příkladu spustíme kontejner Postgres 14 a připojíme data postgres k místnímu svazku, aby mohl přetrvávat restarty. Vzhledem k tomu, že kontejnery jsou pomíjivé, data budou ztracena, pokud je neuložíme do místního svazku.
Vytáhněte docker.io/library/postgres:14.0-alpine
obrázek
~> podman image rm opensuse/leap:15.3
Untagged: registry.opensuse.org/opensuse/leap:15.3
Deleted: 09d5e2cf44af39c62b803e65991d700d8300dc34d82ff03c9cf359b9e092177a
[email protected]:~> podman pull docker.io/library/postgres:14.0-alpine
Trying to pull docker.io/library/postgres:14.0-alpine...
Getting image source signatures
Copying blob 82e9eb77798b done
Copying blob 5034a66b99e6 done
Copying blob 3da258773353 done
Copying blob c6b2245b2f36 done
Copying blob a0d0a0d46f8b done
Copying blob ccd761727716 done
Copying blob 028554d3b6cc done
Copying blob 2c7ee7bc69e8 done
Copying config 87440f4e7f done
Writing manifest to image destination
Storing signatures
87440f4e7f9e60607dc11a4f0590a1c69b3a1c075211df478e22b0c27fb263e6
Potvrďte obrázky
~> podman images
REPOSITORY TAG IMAGE ID CREATED SIZE
docker.io/library/postgres 14.0-alpine 87440f4e7f9e 2 weeks ago 198 MB
Zkontrolujte obrázek pomocí
$ podman inspect 87440f4e7f9e
Pojďme nastavit složku, která bude zpracovávat data Postgres, jakmile spustíme náš kontejner:
$ mkdir -p ~/apps/postgres/data
Spusťte to
podman run -d \
-p 5432:5432 \
-v ~/apps/postgres/data:/var/lib/postgresql/data \
-e POSTGRES_PASSWORD=Sup3rSecre7 \
-e POSTGRES_USER=citizix_user \
-e POSTGRES_DB=citizix_db \
docker.io/library/postgres:14.0-alpine
Toto je můj výstup
~> podman run -d \
> -p 5432:5432 \
> -v ~/apps/postgres/data:/var/lib/postgresql/data \
> -e POSTGRES_PASSWORD=Sup3rSecre7 \
> -e POSTGRES_USER=citizix_user \
> -e POSTGRES_DB=citizix_db \
> docker.io/library/postgres:14.0-alpine
1607081ed241073e20e6186543c1882e977f2a91c9c061ccdd36a3e357051a44
Zkontrolujte procesy:
~> podman ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1607081ed241 docker.io/library/postgres:14.0-alpine postgres 11 seconds ago Up 10 seconds ago 0.0.0.0:5432->5432/tcp happy_jang
Tímto potvrďte protokoly kontejneru. Můžete vidět, že se inicializuje db
~> podman logs 1607081ed241 | head The files belonging to this database system will be owned by user "postgres". This user must also own the server process. The database cluster will be initialized with locale "en_US.utf8". The default database encoding has accordingly been set to "UTF8". The default text search configuration will be set to "english". Data page checksums are disabled. fixing permissions on existing directory /var/lib/postgresql/data ... ok
Pojďme se připojit k databázi a provést nějaké operace
$ podman exec -it 1607081ed241 /bin/bash
bash-5.1# psql -U citizix_user -d citizix_db;
psql (14.0)
Type "help" for help.
citizix_db=# select version();
version
--------------------------------------------------------------------------------------------------------------
PostgreSQL 14.0 on x86_64-pc-linux-musl, compiled by gcc (Alpine 10.3.1_git20210424) 10.3.1 20210424, 64-bit
(1 row)
citizix_db=#
Dále prozkoumáme zabíjení a odstraňování kontejneru. Můžeme použít podman kill
k zastavení nádoby. Tím se kontejner zastaví, ale stále tam bude. Použijte podman ps -a
vypsat. Chcete-li jej zcela odstranit, podman rm -f
.
~> podman kill 1607081ed241
1607081ed241073e20e6186543c1882e977f2a91c9c061ccdd36a3e357051a44
~> podman ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
1607081ed241 docker.io/library/postgres:14.0-alpine postgres About a minute ago Exited (137) 15 seconds ago 0.0.0.0:5432->5432/tcp happy_jang
~> podman rm -f 1607081ed241
1607081ed241073e20e6186543c1882e977f2a91c9c061ccdd36a3e357051a44
5. Správa kontejnerů jako systémových služeb prostřednictvím systemd a Podman
Můžeme spravovat kontejnery podman prostřednictvím systemd. Pojďme vytvořit systemd
zdrojový soubor pro manipulaci s kontejnerem postgres, který jsme právě vytvořili výše.
Vytvořte soubor postgres podman:
sudo vim /etc/systemd/system/postgres-podman.service
Přidat tento obsah
[Unit]
Description=Custom Postgres Podman Container
After=network.target
[Service]
Type=simple
TimeoutStartSec=5m
ExecStartPre=-/usr/bin/podman rm -f postgrespodman
ExecStart=/usr/bin/podman run \
-p 5432:5432 \
-v /home/ec2-user/apps/postgres/data:/var/lib/postgresql/data \
-e POSTGRES_PASSWORD=Sup3rSecre7 \
-e POSTGRES_USER=citizix_user \
-e POSTGRES_DB=citizix_db \
docker.io/library/postgres:14.0-alpine
ExecReload=-/usr/bin/podman stop postgrespodman
ExecReload=-/usr/bin/podman rm postgrespodman
ExecStop=-/usr/bin/podman stop postgrespodman
Restart=always
RestartSec=30
[Install]
Poté můžeme znovu načíst systemd
katalog a spusťte službu:
sudo systemctl daemon-reload
sudo systemctl start postgres-podman
Potvrďte stav služby
~> sudo systemctl status postgres-podman
● postgres-podman.service - Custom Postgres Podman Container
Loaded: loaded (/etc/systemd/system/postgres-podman.service; static)
Active: active (running) since Mon 2021-11-15 05:40:34 UTC; 12s ago
Process: 23658 ExecStartPre=/usr/bin/podman rm -f postgrespodman (code=exited, status=1/FAILURE)
Main PID: 23687 (podman)
Tasks: 12 (limit: 4587)
CGroup: /system.slice/postgres-podman.service
├─23687 /usr/bin/podman run -p 5432:5432 -v /home/ec2-user/apps/postgres/data:/var/lib/postgresql/data -e POSTGRES_PASSWORD=Sup3rSecre7 -e POSTG>
└─23828 /usr/bin/conmon --api-version 1 -c 8a18a63727ecd19d03710544e3e7ee9241e886d9fed45c1f25e29547ab61d600 -u 8a18a63727ecd19d03710544e3e7ee924>
Nov 15 05:40:35 ip-10-2-40-188 podman[23687]: 2021-11-15 05:40:35.477 UTC [1] LOG: starting PostgreSQL 14.0 on x86_64-pc-linux-musl, compiled by gcc (Alpine>
Nov 15 05:40:35 ip-10-2-40-188 podman[23687]: 2021-11-15 05:40:35.478 UTC [1] LOG: listening on IPv4 address "0.0.0.0", port 5432
Nov 15 05:40:35 ip-10-2-40-188 podman[23687]: 2021-11-15 05:40:35.478 UTC [1] LOG: listening on IPv6 address "::", port 5432
Nov 15 05:40:35 ip-10-2-40-188 podman[23687]: 2021-11-15 05:40:35.482 UTC [1] LOG: listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
Nov 15 05:40:35 ip-10-2-40-188 podman[23687]: 2021-11-15 05:40:35.486 UTC [22] LOG: database system was interrupted; last known up at 2021-11-15 05:35:02 UTC
Nov 15 05:40:35 ip-10-2-40-188 podman[23687]: 2021-11-15 05:40:35.497 UTC [22] LOG: database system was not properly shut down; automatic recovery in progre>
Nov 15 05:40:35 ip-10-2-40-188 podman[23687]: 2021-11-15 05:40:35.499 UTC [22] LOG: redo starts at 0/16FAD98
Nov 15 05:40:35 ip-10-2-40-188 podman[23687]: 2021-11-15 05:40:35.499 UTC [22] LOG: invalid record length at 0/16FADD0: wanted 24, got 0
Nov 15 05:40:35 ip-10-2-40-188 podman[23687]: 2021-11-15 05:40:35.499 UTC [22] LOG: redo done at 0/16FAD98 system usage: CPU: user: 0.00 s, system: 0.00 s, >
Nov 15 05:40:35 ip-10-2-40-188 podman[23687]: 2021-11-15 05:40:35.509 UTC [1] LOG: database system is ready to accept connections
Právě jsme nastavili vlastní systémovou službu založenou na kontejneru spravovaném přes Podman!
Závěr
V této příručce se nám podařilo prozkoumat, jak nainstalovat Podman na náš server OpenSUSE Leap.