Podman - oomichi/try-kubernetes GitHub Wiki

背景

プロジェクトの初期段階にシングルノードでの開発・テスト・PoCを行い、その後スケーラビリティ確保のためにKubernetesへ移行する、というシナリオが多くあった。 このシングルノードでのアプリデプロイを行うため、docker-compose、もしくはシングルノードのKubernetesクラスタを構築するのが多かったが、Podmanを使えばKubernetes的なアプリデプロイを軽量に行うことができるため、Kubernetesを知っている人には学習コストが低く、またKubernetesへの移行も容易なのではないかと考えた。 そこでここではKubernetes移行を前提にしつつ、podmanについて整理したいと思う。

Podman概要

Red Hatが中心となって開発している。 しかし、Red HatだけでなくUbuntuでもパッケージ提供されているため、幅広く使われている。 dockerdのようなデーモンはなく、podmanコマンド実行で全ての処理が行われる。

Podman実行

podman run コマンド実行

$ podman run -dt python
Resolved "python" as an alias (/etc/containers/registries.conf.d/shortnames.conf)
Trying to pull docker.io/library/python:latest...
Getting image source signatures
Copying blob 7c45daddd450 done
Copying blob f9a1922eee8a done
Copying blob 0a9573503463 done
Copying blob 7c632e57ea62 done
Copying blob 1ccc26d841b4 done
Copying blob 800d84653581 done
Copying blob 0952bd8ba4ec done
Copying blob f0f1ba982665 done
Copying config 3c055746a2 done
Writing manifest to image destination
Storing signatures
55c9a36ebd4490ae45128a78b5e1451e62f5ec5c455f76527ab31d6e2c95600d
$
$ podman ps
CONTAINER ID  IMAGE                            COMMAND     CREATED        STATUS            PORTS       NAMES
55c9a36ebd44  docker.io/library/python:latest  python3     8 seconds ago  Up 8 seconds ago              laughing_kowalevski
$

コンテナのストップ

$ podman stop 55c9a36ebd44
55c9a36ebd44
$
$ podman ps
CONTAINER ID  IMAGE       COMMAND     CREATED     STATUS      PORTS       NAMES
$
$ podman ps -a
CONTAINER ID  IMAGE                                    COMMAND               CREATED         STATUS
  PORTS                   NAMES
1cdfa20f0dbc  k8s.gcr.io/pause:3.5                                           4 days ago      Created
  0.0.0.0:8080->8443/tcp  4058843aef63-infra
42e4f2549bf2  quay.io/centos7/httpd-24-centos7:latest  /usr/bin/run-http...  4 days ago      Created
  0.0.0.0:8080->8443/tcp  httpd_in_pod
55c9a36ebd44  docker.io/library/python:latest          python3               18 minutes ago  Exited (137) 48 seconds ago                          laughing_kowalevski
$

マニフェストの書き方

$ cat podman-nginx.yaml
apiVersion: v1
kind: Pod
metadata:
  name: nginx-podman
spec:
  containers:
  - name: nginx
    image: docker.io/library/nginx:1.25.2
    ports:
    - containerPort: 80
  restartPolicy: Never
$

マニフェストを使ったPodのデプロイ

$ podman play kube podman-nginx.yaml
Trying to pull docker.io/library/nginx:1.25.2...
Getting image source signatures
Copying blob 4dfff0708538 done
Copying blob 2135e49ace4b done
Copying blob 6f35ab6f1400 done
Copying blob a378f10b3218 done
Copying blob 6c538b49fa4a done
Copying blob c843f6b280ce done
Copying blob d57731fb9008 done
Copying config bc649bab30 done
Writing manifest to image destination
Storing signatures
Pod:
b7c82351bcb9565be1ffd5c759ee804ceec796567db33be76f1d832816775419
Container:
64eed0519d992c956523b51ccd707228d73350bfe1f577edd59459c30805e04d
$

Podの削除

$ podman play kube --down podman-nginx.yaml
Pods stopped:
b7c82351bcb9565be1ffd5c759ee804ceec796567db33be76f1d832816775419
Pods removed:
b7c82351bcb9565be1ffd5c759ee804ceec796567db33be76f1d832816775419

Podの確認

$ podman pod ps
POD ID        NAME          STATUS      CREATED             INFRA ID      # OF CONTAINERS
135b2c790ddb  nginx-podman  Running     About a minute ago  7e3553441f26  2
$

Podの削除 其2

$ podman pod ps
POD ID        NAME          STATUS      CREATED         INFRA ID      # OF CONTAINERS
135b2c790ddb  nginx-podman  Running     10 minutes ago  7e3553441f26  2
4058843aef63  pod-sample    Created     4 days ago      1cdfa20f0dbc  2
$
$ podman pod rm pod-sample
4058843aef63a7da4cc87ee7ebbe0b920f1615ad886b356610f1ff17157443c1
$
$ podman pod ps
POD ID        NAME          STATUS      CREATED         INFRA ID      # OF CONTAINERS
135b2c790ddb  nginx-podman  Running     10 minutes ago  7e3553441f26  2
$