Slide 1

Slide 1 text

Podmanと PmRails Docker互換コンテナ管理ツールと その応用例 1 2025/02/06 Omotesando.rb #106

Slide 2

Slide 2 text

若色 譲二 ⚫ SNSアカウント ⚫ Bluesky: @picolab.bsky.social ⚫ 旧Twitter: @PICOLABofficial ⚫ ソフト関連の技術クチコミサイト TechTipsを開発・運営しています。 ⚫ https://techtips.page/ ⚫ このサイトの開発でRuby on Railsを 使っています。 2 自己紹介

Slide 3

Slide 3 text

目次 3 ⚫Podman ⚫Podmanとは ⚫特長 ⚫特色:Pod ⚫Podの利用例 ⚫PmRails ⚫PmRailsとは ⚫概要 ⚫利用例 ⚫サポート

Slide 4

Slide 4 text

⚫オプションなどの引数はDockerとほぼ共通 ⚫ alias docker=podmanしてもほぼ行ける ⚫composeにも対応しているとのこと ⚫2023年9月のv4.7.0でcomposeサブコマンドの追加 ⚫ https://github.com/containers/podman/releases/tag/v4.7.0 ⚫Podman Desktopもある ⚫Podman本体と同じくオープンソース Dockerとほぼ互換性のあるコンテナ管理ツール 4 Podmanとは

Slide 5

Slide 5 text

⚫デーモンレス ⚫さらば「Docker daemonエラー」 ⚫ルートレス動作がデフォルト ⚫サクッと、ルート権限なし実行、かつ、出力ファイ ルの所有者がユーザ(ルートでない) ⚫インストールが簡単 ⚫多くの環境でコマンド一発でインストール。 Ubuntuの例:sudo apt-get -y install podman Dockerと比べて優れているところがある 5 Podmanの特長 ⇒Dockerの困り事がPodmanで解決することがある

Slide 6

Slide 6 text

⚫ Pod とは、まとまって稼働し同じリソースを共有するコンテナ のグループのこと ⚫ コマンドでPodを作り、Podにコンテナを追加したり、また、 Pod単位でコンテナをまとめて削除したりできる ⚫ Podの構成をKubernetes YAML形式で保存したり、逆に、この YAMLからPodを構成したりも可能 Podを使って便利な操作が可能 6 Podmanの特色:Podという概念と機能

Slide 7

Slide 7 text

Podの利用例:Podを構成する 7 ⚫ Podを作る ⚫ podman pod create --name tmppg ⚫ PodにPostgreSQLサーバのコンテナを追加 ⚫ podman run --name server --pod tmppg -e POSTGRES_PASSWORD=postgres -d postgres:17.2 ⚫ PodにPostgreSQLクライアントのコンテナを追加 ⚫ podman run --name client --pod tmppg -it -v "$PWD":/x -w /x postgres:17.2 psql -h localhost -U postgres -d postgres 同じPod内のコンテナ同士は localhostで通信が可能

Slide 8

Slide 8 text

Podの利用例:Podから情報を出力する 8 ⚫ Podの構成をKubernetes YAML形式で保存 ⚫ podman generate kube tmppg -f=tmppg.yml ⚫ PostgreSQLサーバのデータをファイルにダンプ ⚫ podman run --name rm-dump --pod tmppg --rm -v "$PWD":/x -w /x postgres:17.2 pg_dump -Fc -h localhost -U postgres -d postgres -f backup.dump rmオプションで1コマンド の間だけコンテナをPodに 参加させられる

Slide 9

Slide 9 text

Podの利用例:Podを停止する、削除する 9 ⚫ Podを停止(Podに含まれる全てのコンテナも停止) ⚫ podman pod stop tmppg ⚫ Podを削除(Podに含まれる全てのコンテナも削除) ⚫ podman pod rm tmppg

Slide 10

Slide 10 text

Podの利用例:Podへ情報を入力する 10 ⚫ Podの構成をKubernetes YAMLから再構成 ⚫ podman play kube tmppg.yml ⚫ PostgreSQLサーバのデータをファイルからリストア ⚫ podman run --name rm-restore --pod tmppg --rm -v "$PWD":/x -w /x postgres:17.2 pg_restore --clean -h localhost -U postgres -d postgres backup.dump

Slide 11

Slide 11 text

PmRailsとは 11 Podmanを活用してローカル環境を汚さずに Railsのアプリのテストや開発をするための ツールセット • GitHub: https://github.com/wakairo/pmrails • 日本語README: https://github.com/wakairo/pmrails/blob/main/README.ja.md Podmanのルートレスの動作と運用の容易さを活用

Slide 12

Slide 12 text

⚫ pmrails: bin/railsのラッパーとして、Railsコマンドを実行 使用方法: pmrails COMMAND [OPTIONS] ⚫ pmrails-new: bin/rails newのラッパーとして、新しいRailsアプ リを作成 使用方法: pmrails-new RAILS_VERSION APP_PATH [OPTIONS] ⚫ pmrailsenvexec: コンテナ環境内で任意のコマンドを実行 使用方法: pmrailsenvexec COMMAND [OPTIONS] ⚫ pmbundle: bundleのラッパーとして、Gemを管理 使用方法: pmbundle [BUNDLE_ARGS] 4つのコマンドでrails開発を広くカバー 12 PmRailsの概要

Slide 13

Slide 13 text

⚫Railsバージョン8.0で新しいRailsアプリを作成 pmrails-new 8.0 sample_app --skip-bundle ⚫作成したアプリケーションのディレクトリに移動 cd sample_app ⚫Bundlerを実行してGemをインストール pmbundle install ⚫サーバーを起動 pmrails server -b 0.0.0.0 ⚫ウェブブラウザでhttp://localhost:3000/にアクセス Railsアプリの作成からサーバ起動まで 13 PmRailsの利用例

Slide 14

Slide 14 text

⚫ 「バグっぽい」や 「使いづらい」と いった ちょっとした こともお気軽にお寄 せくだい。 ⚫ https://www.techtips. page/ja/items/514 ⚫ 新しいTopicを立てて お伝えいただいて問題 ありません ご意見・ご要望などはTechTipsまで 14 PmRailsのサポート

Slide 15

Slide 15 text

PmRailsの現在のバージョン(1.0.0)に関して 15 ⚫ pmrails-newには、rails newのあらゆるコマンドを渡せる ⚫ newに関しては、DBの指定などもご自由に ⚫ DBがSQLiteならば、大部分がPmRailsでサクッと可能 ⚫ SQLite以外のDBには、今後ご要望が多ければ対応します

Slide 16

Slide 16 text

(参考)イメージが見つからないとエラーになったら 16 ⚫ 以下のようなエラーが発生した場合には、設定の追加が必要 Error: short-name "ruby:latest" did not resolve to an alias and no unqualified-search registries are defined in "/etc/containers/registries.conf" ⚫ 具体的には、エラーメッセージ内で示されている /etc/containers/registries.confに、以下の1行を追加すればOK unqualified-search-registries = ["docker.io"]