Podmanイン・アクション

書籍情報

発売日 : 2023年09月16日

著者/編集 : Daniel Walsh/磯田雄輝/井上貴博/岡田裕輝/織学/田中司恩

出版社 : 秀和システム

発行形態 : 単行本

ページ数 : 376p

書籍説明

内容紹介

 デーモンレス・Docker互換のコンテナエンジンPodmanで、コンテナを構築、管理、実行する方法を、Red HatでPodmanチームを率いる著者が詳細に説明しています。PodmanにはDockerで学んだスキルを簡単に応用できますが、コンテナエンジンの使用経験がなくても、Podmanは簡単に使用できます。本書では、その両方が満足できる内容となることを目指しました。また、Podなどの高度な機能の使用方法についても説明し、Kubernetesのエッジや内部ですぐに実行できるアプリケーションを構築する手順を紹介します。さらに、システムや他のコンテナからコンテナを分離するために使用されるLinuxカーネルの全てのセキュリティ機能について説明しています。 本書は、4つの部と6つの付録に分かれています。 「第1部 基礎」では、Podmanの概要を説明します。第1章では、Podmanの機能、Podmanが開発された経緯、Podmanが重要である理由について説明します。第2章と第3章では、コマンドラインインターフェイスと、コンテナ内でボリュームを使用する方法を解説します。第4章では、Podの概念と、PodmanとPodがどのように連携するかを紹介します。 「第2部 設計」では、Podmanの設計について詳しく説明します。ルートレスコンテナとその仕組みを学び、ユーザー名前空間とルートレスコンテナのセキュリティについての理解を深めることができます。また、Podman環境の設定をカスタマイズする方法も紹介します。 「第3部 高度なトピック」では、Podmanの基礎を超える内容を取り上げます。第7章では、Podmanがsystemdとの統合を通じて、実稼働環境でどのように機能するかを説明します。また、コンテナ内でのsystemdの実行方法、systemdをコンテナマネージャとして使用する方法、Podmanコンテナを使用してエッジサーバをセットアップし、systemdでコンテナのライフサイクルを管理する方法を解説します。第8章では、Podmanを使用してコンテナをKubernetesに移行する方法を説明します。第9章では、Podmanをサービスとして実行し、Podmanコンテナへのリモートアクセスを可能にする方法を紹介します。 「第4部 コンテナのセキュリティ」では、セキュリティに関する重要な考慮事項を解説します。第10章では、コンテナの確実な分離に使用する機能を説明します。また、SELinux、seccomp、Linuxケイパビリティ、カーネルファイルシステム、名前空間など、Linuxのセキュリティサブシステムについても説明します。第11章では、コンテナを可能な限りセキュアな方法で実行するために考慮すべきセキュリティ事項やベストプラクティスを紹介します。 また、Podmanに関連するテーマを扱う6つの付録があります。

目次

はじめに
本書についてなど
著者紹介など
日本語版に寄せて
Part 1 基礎
Chapter 1 次世代のコンテナエンジンPodman
1.1 用語について
1.2 コンテナの概要
1.2.1 コンテナイメージ:ソフトウェアを配布するための新たな方法
1.2.2 コンテナイメージとマイクロサービス
1.2.3 コンテナイメージのフォーマット
1.2.4 コンテナ標準の策定
1.3 なぜDockerではなくPodmanなのか
1.3.1 なぜコンテナの実行手段は1つしかないのか
1.3.2 ルートレスコンテナ
1.3.3 fork/execモデル
1.3.4 デーモンレス
1.3.5 ユーザーフレンドリーなコマンドライン
1.3.6 REST APIのサポート
1.3.7 systemdの統合
1.3.8 Pod
1.3.9 カスタマイズ可能なレジストリ設定
1.3.10 マルチトランスポート
1.3.11 完全なカスタマイズ性
1.3.12 ユーザー名前空間のサポート
1.4 Podmanを使用しない場合
まとめ
Chapter 2 コマンドライン
2.1コンテナの操作
2.1.1 コンテナの探索
2.1.2 コンテナ化したアプリケーションの実行
2.1.3 コンテナの停止
2.1.4 コンテナの起動
2.1.5 コンテナのリスト表示
2.1.6 コンテナの調査
2.1.7 コンテナの削除
2.1.8 コンテナへの実行
2.1.9 コンテナからイメージを作成
2.2 コンテナイメージの操作
2.2.1 コンテナとイメージの違い
2.2.2 イメージのリスト表示
2.2.3 イメージの調査
2.2.4 イメージのプッシュ
2.2.5 podman login:コンテナレジストリへのログイン
2.2.6 イメージのタグ付け
2.2.7 イメージの削除
2.2.8 イメージのプル
2.2.9 イメージの検索
2.2.10 イメージのマウント
2.3 イメージの構築
2.3.1 ContainerfileまたはDockerfileのフォーマット
2.3.2 アプリケーションのビルドの自動化
まとめ
Chapter 3 ボリューム
3.1コンテナでのボリュームの使用
3.1.1 名前付きボリューム
3.1.2 ボリュームのマウントオプション
3.1.3 podman run --mountコマンドオプション
まとめ
Chapter 4 Pod
4.1 Podの実行
4.2 Podの作成
4.3 Podへのコンテナ追加
4.4 Podの起動
4.5 Podの停止
4.6 Podの表示
4.7 Podの削除
まとめ
Part 2 設計
Chapter 5 カスタマイズと設定ファイル
5.1 ストレージの設定ファイル
5.1.1 ストレージの場所
5.1.2 ストレージドライバ
5.2 レジストリの設定ファイル
5.2.1 registries.conf
5.3 エンジンの設定ファイル
5.4 システム設定ファイル
まとめ
Chapter 6 ルートレスコンテナ
6.1 ルートレスPodmanの仕組み
6.1.1 複数のユーザー識別子(UID)によって所有されるコンテンツが含まれるコンテナイメージ
6.2 ルートレスPodmanの内部構造
6.2.1 イメージのプル
6.2.2 コンテナの作成
6.2.3 ネットワークの設定
6.2.4 コンテナモニタの起動:conmon
6.2.5 OCIランタイムの起動
6.2.6 コンテナ化されたアプリケーションの実行が完了するまで
まとめ
Part 3 高度なトピック
Chapter 7 systemdとの統合
7.1 コンテナ内でsystemdを実行する
7.1.1 コンテナ化されたsystemdの要件
7.1.2 systemdモードのPodmanコンテナ
7.1.3 systemdコンテナ内でのApacheサービスの実行
7.2 journaldによるログとイベントの管理
7.2.1 ログの管理
7.2.2 イベントの管理
7.3 起動時におけるコンテナの自動起動
7.3.1 コンテナの再起動
7.3.2 systemdサービスとしてのPodmanコンテナ
7.3.3 Podmanコンテナの管理に使用するsystemdユニットファイルの配布
7.3.4 Podmanコンテナの自動更新
7.4 notifyユニットファイルでコンテナを実行する
7.5 更新に失敗したコンテナのロールバック
7.6 Podmanコンテナとソケットアクティベーション
まとめ
Chapter 8 Kubernetesとの連携
8.1 Kubernetes YAMLファイル
8.2 PodmanでKubernetes YAMLファイルを生成する
8.3 Kubernetes YAMLからPodmanのPodとコンテナを作成する
8.3.1 Kubernetes YAMLファイルに基づいてPodとコンテナをシャットダウンする
8.3.2 PodmanとKubernetes YAMLファイルを使用してイメージをビルドする
8.4 コンテナ内でPodmanを動かす
8.4.1 Podmanコンテナ内でPodmanを実行する
8.4.2 Kubernetes Pod内でPodmanを実行する
まとめ
Chapter 9 サービスとしてのPodman
9.1 Podmanサービスの紹介
9.1.1 systemdサービス
9.2 PodmanがサポートするAPI
9.3 Podmanとやり取りするためのPythonライブラリ
9.3.1 Podman APIでのdocker-pyの使用
9.3.2 podman-pyとPodman APIの使用
9.3.3 使用するPythonライブラリの選択
9.4 Podmanサービスでdocker-composeを使用する
9.5 podman --remote
9.5.1 ローカル接続
9.5.2 リモート接続
9.5.3 クライアントマシンにSSHを設定する
9.5.4 接続を設定する
まとめ
Part 4 コンテナのセキュリティ
Chapter 10 コンテナ隔離におけるセキュリティ
10.1 読み取り専用のLinux カーネル擬似ファイルシステム
10.1.1 マスクされたパスの解除
10.1.2 マスクされるパスの追加
10.2 Linuxケイパビリティ
10.2.1 Linuxケイパビリティの削除
10.2.2 CAP_SYS_ADMINの削除
10.2.3 ケイパビリティの削除
10.2.4 ケイパビリティの追加
10.2.5 新たな特権の追加防止
10.2.6 ケイパビリティのないrootでも危険な理由
10.3 ユーザー名前空間によるUIDの分離
10.3.1 --userns=autoフラグを利用したコンテナの隔離
10.3.2 ユーザー名前空間内のLinuxのケイパビリティ
10.3.3 ルートレスPodmanにおける--userns=autoフラグ
10.3.4 ユーザーボリュームにおける--userns=autoフラグ
10.4 PID名前空間によるプロセスの分離
10.5 ネットワーク名前空間によるネットワークの分離
10.6 IPC名前空間によるIPCの分離
10.7 マウント名前空間によるファイルシステムの分離
10.8 SELinuxによるファイルシステムの分離
10.8.1 SELinux type enforcement
10.8.2 SELinuxのMulti-Category Securityによる分離
10.9 seccompによるシステムコールの分離
10.10 仮想マシンの分離
まとめ
Chapter 11 その他のセキュリティに関する考慮事項
11.1 デーモンとfork/execモデルとの比較
11.1.1 docker.sockへのアクセス
11.1.2 監査とロギング
11.2 Podmanによる機密情報の取り扱い
11.3 Podmanによるイメージの信頼
11.3.1 Podmanによるイメージの署名
11.4 Podmanによるイメージスキャン
11.4.1 読み取り専用コンテナ
11.5 多層防御
11.5.1 Podmanは全てのセキュリティ機構を同時に使用する
11.5.2 どこでコンテナを実行するべきか
まとめ
Appendix 付録
Appendix A Podman関連のコンテナツール
A.1 Skopeo
A.2 Buildah
A.2.1 ベースイメージから作業用コンテナを作成する
A.2.2 作業用コンテナにデータを追加する
A.2.3 作業コンテナの中でコマンドを実行する
A.2.4 作業コンテナにホストから直接コンテンツを追加する
A.2.5 作業用コンテナを設定する
A.2.6 作業コンテナからイメージを作成する
A.2.7 コンテナレジストリにイメージをプッシュする
A.2.8 Containerfileからイメージをビルドする
A.2.9 ライブラリとしてのBuildah
A.3 CRI-O:OCIコンテナのコンテナランタイムインターフェイス
Appendix B OCIランタイム
B.1 runc
B.2 crun
B.3 Kata
B.4 gVisor
Appendix C Podmanの入手
C.1 Podmanのインストール
C.1.1 macOS
C.1.2 Windows
C.1.3 Arch LinuxとManjaro Linux
C.1.4 CentOS
C.1.5 Debian
C.1.6 Fedora
C.1.7 Fedora CoreOS/Fedora Silverblue
C.1.8 Gentoo
C.1.9 OpenEmbedded
C.1.10 openSUSE
C.1.11 openSUSE Kubic
C.1.12 Raspberry Pi OS arm64
C.1.13 Red Hat Enterprise Linux
C.2 ソースコードからのビルド
C.3 Podman Desktop
まとめ
Appendix D Podmanへの貢献
D.1 コミュニティへの参加
D.2 github.com上のPodman
Appendix E macOSでPodmanを使用する
E.1 podman machineの使用
E.1.1 podman machine init
E.1.2 Podman machineのSSH設定
E.1.3 仮想マシンの起動
E.1.4 仮想マシンの停止
まとめ
Appendix F WindowsでPodmanを使用する
F.1 ファーストステップ
F.1.1 前提条件
F.1.2 Podmanのインストール
F.2 podman machineの使用
F.2.1 podman machine init
F.2.2 PodmanマシンのSSH設定
F.2.3 WSL 2 インスタンスの起動
F.2.4 podman machineコマンドの使用
まとめ
訳者あとがき
『Podman in Action』翻訳チームメンバープロフィール

著者情報

Daniel Walsh
磯田雄輝
井上貴博
岡田裕輝
織学
田中司恩
德留幸子
長嶺精彦
西村拓也
野間亮志
燃脇綾子
八木澤健人