手当たり次第に書くんだ

飽きっぽいのは本能

Ubuntu 22.04 Podman の基本操作 – Docker との違いを意識して使う

Podman は Docker と似た CLI で image と container を操作できます。ただし daemonless、rootless、pod の扱いなど、Docker と同じ感覚で読み替えると見落としやすい違いがあります。

この記事では、Ubuntu 22.04 に Podman を導入済みの前提で、image の取得、container の起動、exec、停止、削除、pod の作成、rootless 実行時の確認ポイントを確認します。

関連する記事

この記事で確認すること

  • Podman の image と container の基本操作
  • podman run / podman exec / podman rm の流れ
  • rootless 実行時の確認ポイント
  • pod の作成とコンテナ追加
  • Docker コマンドと読み替えるときの注意点
参考書籍
参考書籍
Kubernetes 完全ガイド 第 2 版
コンテナ、Pod、Kubernetes 周辺を体系的に確認したい場合の参考書籍です。価格や在庫はリンク先で確認してください。
Amazon で見る
このリンクは Amazon アソシエイトリンクです。

Podman 操作の前提

Podman は Docker と同じ OCI image を扱えます。コマンド名は podman ですが、pullrunpsexec など、基本操作は Docker と近い形です。

操作DockerPodman
image 取得docker pullpodman pull
container 起動docker runpodman run
container 確認docker pspodman ps
container 内実行docker execpodman exec

実行環境を確認する

まず Podman の実行環境を確認します。rootless で動かしている場合は、storage や user namespace の状態も確認します。

podman --version
podman info
podman system df

image を取得する

registry から image を取得します。Docker Hub の公式 image を使う場合は、docker.io/library/ を明示すると取得元を読み取りやすくなります。

podman pull docker.io/library/ubuntu:22.04
podman images
podman image inspect docker.io/library/ubuntu:22.04

一度だけコマンドを実行する

--rm を付けると、コマンド終了後に container が削除されます。短い検証や確認に向いています。

podman run --rm docker.io/library/ubuntu:22.04 cat /etc/os-release
podman ps -a

名前付き container を起動する

後から exec、停止、削除を試すため、名前を付けて container を起動します。

podman run -itd --name ubuntu-podman docker.io/library/ubuntu:22.04 bash
podman ps
podman ps -a

container 内でコマンドを実行する

起動中の container 内でコマンドを実行するには podman exec を使います。対話 shell だけでなく、単発の確認にも使えます。

podman exec ubuntu-podman hostname
podman exec ubuntu-podman cat /etc/os-release
podman exec -it ubuntu-podman bash

container を停止する

podman stop は container を停止します。停止した container は podman ps -a で確認できます。

podman stop ubuntu-podman
podman ps -a

container を再起動する

停止済み container は podman start で再起動できます。検証用 container は削除して作り直す方が分かりやすい場合もあります。

podman start ubuntu-podman
podman ps
podman exec ubuntu-podman hostname

container を削除する

不要になった container は停止してから削除します。検証環境では、対象名を確認してから削除します。

podman stop ubuntu-podman
podman rm ubuntu-podman
podman ps -a

pod を作成する

Podman では Kubernetes の pod に近い単位をローカルで扱えます。複数 container をまとめる前提がある場合は、pod を使うと関係を表現しやすくなります。

podman pod create --name web-pod -p 8080:80
podman run -d --pod web-pod --name web-nginx docker.io/library/nginx:latest
podman pod ps
podman ps --pod
curl -I http://127.0.0.1:8080/

pod を削除する

pod に含まれる container をまとめて削除する場合は podman pod rm -f を使います。

podman pod rm -f web-pod
podman pod ps
podman ps -a

rootless 実行時に見るポイント

rootless Podman では、低いポート番号、storage、network の扱いが rootful 実行と異なる場合があります。Docker と同じ結果になる前提で進めず、実行ユーザーの状態を確認します。

  • podman info で rootless 状態を確認する
  • /etc/subuid/etc/subgid を確認する
  • 低いポート番号を公開する場合は権限を確認する
  • storage の場所を Docker と混同しない
  • systemd 連携が必要な場合は別途 unit 化を確認する
podman info --format '{{.Host.Security.Rootless}}'
grep "^$USER:" /etc/subuid
grep "^$USER:" /etc/subgid
podman info --format '{{.Store.GraphRoot}}'

不要な image を削除する

不要になった image は、利用中の container が残っていないことを確認してから削除します。

podman images
podman image rm docker.io/library/ubuntu:22.04
podman images

まとめ

Podman の基本操作は Docker と似ていますが、daemonless、rootless、pod の扱いに違いがあります。image と container の基本操作は近くても、network、storage、systemd 連携まで含めると同じではありません。

Ubuntu 22.04 の既存環境では、まず podman pullpodman runpodman execpodman pspodman rm の流れを確認し、必要に応じて pod や systemd 連携へ進みます。

Ubuntu 22.04 Podman の基本操作 – Docker との違いを意識して使う

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

トップへ戻る