Red Hatでソリューションアーキテクトをしている田中司恩(@tnk4on)です。
Red Hat Developerから無償で入手できる電子書籍「Podman in Action」(以下、本書)についてご紹介します。 本書はコンテナの基礎からPodmanを利用した高度な使い方、またコンテナセキュリティまで網羅的に解説されています。 コンテナに興味のある人全員に必読の内容なのですが、英語であることとその思想的背景について理解が無いと少し分かりづらい部分があります。 そこで、本記事では書籍冒頭にあるロードマップをベースに少し解説を加えて、読み進めるためのガイドとなることを目指します。 (注意:本記事の内容は独自に解説したもので、公式なものではない点ご了承下さい)
本書は下記URLより入手が可能です(PDFのダウンロードにはRed Hatアカウントの作成が必要です)。
なお、本書の著者でありPodman開発の主要メンバーであるDaniel Walsh と 同じく主要開発メンバーのBrent Baudeの2名によるポッドキャストを日本語翻訳した記事があります。Dockerとのセキュリティにおける思想的違いやPodmanが生まれた背景などが語られています。是非こちらも合わせて参考にしてください。
-目次-
全体構成
本文は4部構成で全10章あります。加えて6つの付録があります。
- 第1部「基礎編」
- 第1章:Podman:次世代コンテナエンジン
- 第2章:コマンドライン
- 第3章:ボリューム
- 第4章:ポッド
- 第2部「デザイン」
- 第5章:カスタマイズと構成ファイル
- 第6章:ルートレスコンテナ
- 第3部「高度なトピック」
- 第7章:systemdとの連携
- 第8章:Kubernetesとの連携
- 第9章:Podmanサービス
- 第4部「コンテナセキュリティ」
- 第10章:コンテナを分離するセキュリティ
- 第11章:セキュリティに関するその他の留意点
- 付録
- 付録A:Podman関連コンテナツール
- 付録B:OCIランタイム
- 付録C:Podmanの始め方
- 付録D:Podmanへの貢献
- 付録E:macOSのPodman
- 付録F:WindowsのPodman
これらに加えて冒頭に「序章」と「本書について」があります。この冒頭部分に本書の目指す内容がまとまっているので、まずは冒頭部分に目を通してみるのをお勧めします。 それ以外は次の各章の解説を参考に、読み進めたい部分を選んで読んでみるのをお勧めします。参考までに各部の難易度を低中高の3段階で分類してみました。
各章解説
第1部「基礎編」(難易度:低)
章 | タイトル | 内容 |
---|---|---|
第1章 | Podman:次世代コンテナエンジン | コンテナランタイム、コンテナエンジン、コンテナオーケストレーションについての概要。コンテナとLinuxのプロセス分離機能。コンテナイメージの解説、PodmanとDockerの比較。ポッドキャストで語っていた内容をより詳細に解説している。 |
第2章 | コマンドライン | Podmanのコマンドの基本機能の紹介。よくあるコンテナ解説とほぼ同じ流れ。すでにDockerに慣れていれば読み飛ばしても問題無し。PodmanではContainerfileが標準の名前に使用(Dockerfileと構文は同じ)。 |
第3章 | ボリューム | データを永続化するボリュームの使用、マウントオプションの解説、SELinuxマウントオプションの解説。第6章でも出てくるpodman unshare については第2章のコマンド紹介と合わせて確認すること。 |
第4章 | ポッド | Podman podsの概要、Podman podsのコマンド紹介。Podmanの特徴であるPodについて知りたい場合はここを読む。 |
第2部「デザイン」(難易度:中)
章 | タイトル | 内容 |
---|---|---|
第5章 | カスタマイズと構成ファイル | Podmanを構成する複数のライブラリの中から、ストレージ(storage.conf)、イメージ(registries.conf)、エンジン(contaiers.conf)の各構成ファイルの解説。UID/GIDの使用については後段の6章と合わせて確認する。 |
第6章 | ルートレスコンテナ | Podmanにおけるルートレスコンテナの動作の解説。UID/GIDのマッピングの挙動を事例と共に解説。ルートレスコンテナ実行時のネットワーク、conmonの動きのアーキテクチャーの解説。 |
第3部「高度なトピック」(難易度:中)
章 | タイトル | 内容 |
---|---|---|
第7章 | systemdとの連携 | コンテナとsystemdを組みあせてどう実装するかの解説。コンテナ内でinitを実行するubi-initの紹介。Podmanのコンテナをsystemdのサービスとして登録する方法。ロギングやイベントの確認方法などPodmanでコンテナを常時稼働するために必要な内容を知ることができる。 |
第8章 | Kubernetesとの連携 | PodmanでKubernetes YAMLファイルを使ってPodを実行する解説。podman generate kube で出力したYAMLファイルの構文の解説、podman play kube でYAMLファイルからPodman podsを実行する方法。Kubernetes上でのPodmanの動作を行う「Podman in Podman」の解説。 |
第9章 | Podmanサービス | ここでいうサービスとは第7章のsystemdサービスではなく、PodmanでREST APIを受け付けるサーバーとして見立てた時の挙動を表す表現。デーモンレスなPodmanにおけるpodman.socketのアーキテクチャ解説。Docker互換のAPIの提供、Pythonやdocker-composeとの連携。Podmanリモートクライアントpodman --remote の解説 |
第4部「コンテナセキュリティ」(難易度:高)
章 | タイトル | 内容 |
---|---|---|
第10章 | コンテナを分離するセキュリティ | コンテナを分離するためのLinuxのセキュリティ機能が詳細に解説されています。本書で最も力が入っている部分、最重要ポイント。コンテナに携わる上で必ず行き着く部分。必読。 |
第11章 | セキュリティに関するその他の留意点 | デーモン構成のDockerとforc/execモデルのPodmanを詳細に比較解説。Podmanにおけるシークレットの取り扱い(podman secret 解説)。Podmanにおけるイメージの信頼、署名、スキャンの解説。 |
付録(難易度:低)
章 | タイトル | 内容 |
---|---|---|
付録A | Podman関連コンテナツール | Skopeo、Buildah、CRI-Oの紹介。Buildahはコマンドラインでのコンテナビルドのサンプル解説あり。Buildah名の命名の逸話は要チェック。 |
付録B | OCIランタイム | runc、crun、Kata、gVisorの解説。 |
付録C | Podmanの始め方 | macOS、Windows、Linux各ディストリビューションごとのPodmanの導入方法。ソースからのビルド方法。Podman Desktopの紹介。 |
付録D | Podmanへの貢献 | Podmanコミュニティのサイトと開発GitHubリポジトリの紹介。 |
付録E | macOSのPodman | macOS環境でのPodmanの導入とPodman machineの実行方法。 |
付録F | WindowsのPodman | Windows環境でのPodmanの導入と、WSL2を使ったPodman machineの実行方法。 |
まとめ
「Podman in Action」は無料の電子書籍でありながら300ページ近くあり、とても濃い内容となっています。コンテナ初学者からDockerに使い慣れた方でも隅々まで目を通すべき内容が多くあります。 すでにコンテナの普及期には入ったといえ、正しい情報ソースで基本から学ぶ機会はそれほど多くないと思います。本書を通じてあらためてコンテナについて学習することをお勧めします。
本記事が読書の参考になれば幸いです。