# Podman

# 1 概要

Podman はデーモンレス・rootless で動作するオープンソースのコンテナエンジンです。Docker 互換のコマンドラインインターフェースを持ちながら、root 権限なしでコンテナを実行できるため、CI サーバーや共有環境でのセキュアなコンテナ利用に適しています。

このリポジトリの Jenkins ベースの CI では、Podman を使って Oracle Linux 開発コンテナイメージを pull・実行し、GitHub Actions と同じビルド環境を再現しています。コンテナイメージは GitHub Container Registry (ghcr.io) と Docker Hub の両方から取得できます。

# 2 習得目標

- Podman をインストールし、rootless で動作することを確認できる
- `podman pull` / `podman run` / `podman images` の基本操作ができる
- GitHub Container Registry (ghcr.io) と Docker Hub からイメージを取得できる
- rootless Podman に必要な subordinate UID/GID の設定を行える
- `--entrypoint` や `-v` (ボリュームマウント) などの実行オプションを理解できる

# 3 学習マテリアル

## 3.1 公式ドキュメント

- Podman ドキュメント (英語) - rootless Podman の仕組みと設定
  - rootless モード - root なしでコンテナを動かす設定
  - podman pull - イメージ取得コマンドリファレンス
  - podman run - コンテナ実行コマンドリファレンス
- GitHub Container Registry (GHCR) ドキュメント (英語) - ghcr.io の使い方
- Docker Hub ドキュメント (英語) - Docker Hub へのイメージ公開と取得

# 4 利用可能な Oracle Linux 開発コンテナ

このリポジトリのビルドに使用する Oracle Linux 開発コンテナは、GitHub Container Registry と Docker Hub の両方で公開されています。

## 4.1 GitHub Container Registry (ghcr.io)

認証なしで pull できます（公開イメージ）。

イメージ | タグ | リンク
--- | --- | ---
`ghcr.io/hondarer/oracle-linux-container/oracle-linux-8-dev` | `latest` / `main` / `vYYYYMMDD.x.x` | pkgs
`ghcr.io/hondarer/oracle-linux-container/oracle-linux-10-dev` | `latest` / `main` / `vYYYYMMDD.x.x` | pkgs

    podman pull ghcr.io/hondarer/oracle-linux-container/oracle-linux-8-dev:latest
    podman pull ghcr.io/hondarer/oracle-linux-container/oracle-linux-10-dev:latest

## 4.2 Docker Hub

GitHub Secrets (`DOCKERHUB_USERNAME` / `DOCKERHUB_TOKEN`) が設定されている場合に ghcr.io と同一タグで push されます。公開されているため、認証なしで pull できます。

イメージ | タグ | リンク
--- | --- | ---
`hondarer/oracle-linux-8-dev` | `latest` / `main` / `vYYYYMMDD.x.x` | Docker Hub
`hondarer/oracle-linux-10-dev` | `latest` / `main` / `vYYYYMMDD.x.x` | Docker Hub

    podman pull hondarer/oracle-linux-8-dev:latest
    podman pull hondarer/oracle-linux-10-dev:latest

## 4.3 レジストリの選択指針

条件 | 推奨レジストリ
--- | ---
制約なし | ghcr.io (推奨)
ghcr.io への接続が困難な環境 | Docker Hub
プライベートイメージへのアクセスが必要 | Jenkins Credentials で認証情報を管理

# 5 このリポジトリとの関連

## 5.1 Jenkins ビルドジョブでの使用

Jenkins の Execute shell スクリプト内で `podman pull` と `podman run` を使い、コンテナ内で `make` / `make test` を実行します。詳細な手順は Jenkins スキルガイド を参照してください。

概念図:

    Jenkins ジョブ (Execute shell)
      |
      +-- podman pull <IMAGE>               # レジストリからイメージ取得
      |
      +-- git clone --recurse-submodules    # ワークスペースにリポジトリを展開
      |
      +-- podman run --rm -i \              # コンテナ内でビルド実行
              --entrypoint /bin/bash \
              -v "$WORKDIR:/workspace:Z" \
              <IMAGE> ...
                  |
                  +-- devcontainer-entrypoint.sh  # ユーザー初期化
                  +-- make                         # ビルド
                  +-- make test                    # テスト

## 5.2 GitHub Actions との関係

GitHub Actions の Linux CI でも同じイメージを使用しています (`.github/workflows/ci.yml`)。Jenkins でも同一イメージを使うことで、ローカル環境・CI の差異を最小化できます。

# 6 関連ドキュメント

- Jenkins (スキルガイド) - Podman を使った Jenkins ビルドジョブの構成
- GitHub Actions (スキルガイド) - GitHub Actions での同イメージ利用
- Oracle Linux 開発コンテナ - イメージのソースリポジトリ