Podman チートシート


インストール

macOS

$ brew install podman
  • Windows
> winget add RedHat.Podman

確認

$ podman --version
$ podman info

ヘルプ

$ podman --help  
$ podman <subcommand> --help


Podman machine

macOS の場合はQEMU上、Windows の場合は WSL 上に仮想(Linux)マシンを起動

$ podman machine init   // 作成(初回のみ)
$ podman machine start  // 起動
$ podman machine list   // 一覧
$ podman machine stop   // 停止


イメージ

$ podman pull <image_name>  // 取得
$ podman images             // 一覧
$ podman image inspect <image_id> // 詳細
$ podman rmi <image_id>     // 削除


コンテナ

docker と同じ

$ podman run -d -p 8000:80 --name nginx nginx
$ podman ps
$ podman ps -a
$ podman stop <container_id>
$ podman rm <container_id>


Volume

$ podman volume create <volume_name>
$ podman volume ls
$ podman volume inspect <volume_name>
$ podman volume rm <volume_name>


Pod

Pod 作成(nginxを例)

$ podman pod create -p 8080:80 --name nginx-pod
$ podman pod ps

Pod へコンテナ追加

$ podman run -dt --pod nginx-pod --name nginx nginx
$ podman ps -a --pod
$ podman pod logs -c nginx nginx-pod // ログ確認

Kubernetes YAMLファイル生成

$ podman generate kube nginx-pod >> nginx-pod.yaml

YAMLファイルからPod起動

$ podman play kube nginx-pod.yaml
$ podman play kube --down nginx-pod.yaml // 停止 & 削除


確認

ログ

$ podman logs <container_name>
$ podman pod logs -c <container_name> <pod_name>

コンテナ接続

$ podman exec -it <container_name> bash

Podman のディスク使用量

$ podman system df


No connection could be made because the target machine actively refused it エラー

以下のようなエラーでコンテナにアクセスできなくなる場合がある。

Error: failed to connect: dial tcp 127.0.0.1:52066: connectex: No connection could be made because the target machine actively refused it.

Windows の場合は、一旦 podman machine stop でストップし、管理者権限で Powershell から以下のコマンドを実行する。

> net stop winnat
> net start winnat

これでたいてい解決する。

改善しない場合は 以下で Podman machine を再作成する。

$ podman machine stop
$ podman machine rm
$ podman machine init


Example

postgresql

$ podman machine start

$ podman pod create -p 5432:5432 --name postgres-pod
$ podman volume create pgdata_volume
$ podman run -d --name postgres --pod postgres-pod -e POSTGRES_PASSWORD=mysecretpassword -v pgdata_volume:/var/lib/postgresql/data postgres

$ podman generate kube postgres-pod >> postgres-pod.yaml
$ podman pod stop postgres-pod
$ podman pod rm postgres-pod

$ podman play kube postgres-pod.yaml

$ podman exec -it postgres-pod-postgres bash
# psql -U postgres
postgres=# \dt
...

$ podman play kube --down postgres-pod.yaml

Oracle Database 23c free

イメージは10G程あります・

$ podman pull container-registry.oracle.com/database/free:latest

$ podman pod create -p 1521:1521 --name oracle-pod
$ podman volume create oradata_volume
$ podman run -d --name oracle23c --pod oracle-pod -e ORACLE_PWD=mysecretpassw0rd -v oradata_volume:/opt/oracle/oradata container-registry.oracle.com/database/free

$ podman generate kube oracle-pod >> oracle-pod.yaml
$ podman pod stop oracle-pod
$ podman pod rm oracle-pod

$ podman play kube oracle-pod.yaml

$ podman exec -it oracle-pod-oracle23c bash
$ sqlplus sys/mysecretpassw0rd@//localhost:1521/FREE as sysdba
SQL> show pdbs
...

$ podman play kube --down oracle-pod.yaml