Podmanのポッドとコンテナ作成手順の覚書

以前作成しました、Podman用のKubernetes yamlファイルですが。

アップデートを行ったところ、ポッドが起動しなくなってしまいました。

原因はおそらく、Podmanのバージョンアップの影響かと思います。

というわけで、起動しなくなった場合、yamlファイルを生成し直す必要があります。

WordPressやNextcloud等、各種dockerイメージについて、新たにポッドとコンテナを作成し、yamlファイルを生成する手順を記録しておこうと思います。


作成前の準備

稼働しているポッドの確認

sudo podman pod ls
sudo podman ps
# ポッドを全て終了する場合
sudo podman pod stop --all
# ポッドを全て削除する場合
sudo podman pod rm --all

稼働しているポッドとコンテナを確認します。

イメージごと入れ替えるため、全てのポッドを終了し、ポッド本体とポッドに紐づくコンテナを削除しました。

古いイメージの削除

ポッドを作成し直す前に、ダウンロード済みのイメージを削除しました。古いバージョンのイメージが残っていたりしますので、ポッドを作り直す前に掃除する感じです。

sudo podman images
# --allオプションはイメージ全て削除
sudo podman rmi --all
# 個別に削除する場合、コンテナIDを並べて記述

コンテナを作り直す際、イメージは自動的にダウンロードされます。


Podmanポッドとコンテナの作成手順

WordPress

まずはMariadbを使用したWordPressのポッドの作成手順です。

実行用のディレクトリ(wp)を作成、その中にhtml,log,mysqlディレクトリを作成しておきます。

mkdir wp
cd wp
mkdir html mysql log

最初にポッドを作成します。ポート番号はWordPressの80番を、ホスト側は8080番にマップしました。(何となく

ポッド作成後、ポッドに紐づくようにコンテナを作成します。コンテナはMariadbとWordPressになります。注意点が何点かあります。

  • データベース名やパスワードは適宜変更して下さい。
  • 永続化のため、ボリュームのマウント(-v)オプションを使用しましたが、環境に合わせて変更してください。データをコンテナに格納する場合は-vオプションは不要になり、別途データ用のコンテナを作成する形になります。
# WordPress用ポッド作成
sudo podman pod create --name wp-pod -p 8080:80
# Mariadbコンテナ作成
sudo podman run \
-d --restart=always --pod=wp-pod \
-e MYSQL_ROOT_PASSWORD="myrootpass" \
-e MYSQL_DATABASE="wp" \
-e MYSQL_USER="wordpress" \
-e MYSQL_PASSWORD="w0rdpr3ss" \
-v ./wp/mysql:/var/lib/mysql:Z \
--name=wp-db docker.io/library/mariadb:latest
# WordPressコンテナ作成
sudo podman run \
-d --restart=always --pod=wp-pod \
-e WORDPRESS_DB_NAME="wp" \
-e WORDPRESS_DB_USER="wordpress" \
-e WORDPRESS_DB_PASSWORD="w0rdpr3ss" \
-e WORDPRESS_DB_HOST="127.0.0.1" \
-v ./wp/html:/var/www/html:Z \
-v ./wp/log:/var/log/html:Z \
--name=wp-web docker.io/library/wordpress:latest

正常に起動しましたでしょうか?

Webブラウザで動作を確認します。-vオプションを使用してホスト側のボリュームをマウントした場合、ポッド削除後もデータが永続的に残るかどうか確認します。動作やデータの保存に問題が無ければ、次回からポッドとしてすぐに起動できるように、Kubernetesのyamlファイルを出力しておきます。

sudo podman generate kube wp-pod > wp-pod.yaml

以下、WordPressポッド向けの各種コマンドの覚書です。

# ポッドの停止・削除
sudo podman pod stop wp-pod
sudo podman pod rm wp-pod
# ポッドの起動
sudo podman play kube ./wp-pod.yaml
# コンテナの中でbash起動
sudo podman exec -it wp-web bash
sudo podman exec -it wp-db bash
# playで実行した場合
sudo podman exec -it nc-pod-wp-web bash
sudo podman exec -it nc-pod-wp--db bash

Nextcloud

Nextcloudのポッドは、WordPress同様にMariadbを使用しました。WordPressのweb部分を入れ替えたかたちになります。

mkdir nc
cd nc
mkdir html mysql log

WordPressと重複しないように、ポートは8081にしてみました。

# Nextcloud用ポッド作成
sudo podman pod create --name nc-pod -p 8081:80
# Mariadbコンテナ作成
sudo podman run \
-d --restart=always --pod=nc-pod \
-e MYSQL_ROOT_PASSWORD="myrootpass" \
-e MYSQL_DATABASE="nextcloud" \
-e MYSQL_USER="nextcloud" \
-e MYSQL_PASSWORD="n3xtcl0ud" \
-v ./mysql:/var/lib/mysql:Z \
--name=nc-db docker.io/library/mariadb:latest
# Nextcloudコンテナ作成
sudo podman run \
-d --restart=always --pod=nc-pod \
-e MYSQL_DATABASE="nextcloud" \
-e MYSQL_USER="nextcloud" \
-e MYSQL_PASSWORD="n3xtcl0ud" \
-e MYSQL_HOST="127.0.0.1" \
-v ./html:/var/www/html:Z \
-v ./log:/var/log/html:Z \
--name=nc-web docker.io/library/nextcloud:latest

ブラウザで動作を確認しました。画像ではポート番号8080になっていますが、上述のスクリプトを使用する場合8081に接続して下さい。

問題なければ、yamlファイルを生成します。

sudo podman generate kube nc-pod > nc-pod.yaml

以下、Nextcloudポッド向けの各種コマンドの覚書です。

# ポッドの停止・削除
sudo podman pod stop nc-pod
sudo podman pod rm nc-pod
# ポッドの起動
sudo podman play kube ./nc-pod.yaml
# コンテナの中でbash起動
sudo podman exec -it nc-web bash
sudo podman exec -it nc-db bash
# playで実行した場合
sudo podman exec -it nc-pod-nc-web bash
sudo podman exec -it nc-pod-nc--db bash

Redmine

チケット管理システムのRedmineも同じパターンで起動できそうです。

mkdir redmine
cd redmine
mkdir mysql files

RedmineはTCPポート3000番で動作しています。ホスト側ポートは8082にしてみました。

# Redmine用ポッド作成
sudo podman pod create --name redmine-pod -p 8082:3000
# Mariadbコンテナ作成
sudo podman run \
-d --restart=always --pod=redmine-pod \
-e MYSQL_ROOT_PASSWORD="myrootpass" \
-e MYSQL_DATABASE="redmine" \
-e MYSQL_USER="redmine" \
-e MYSQL_PASSWORD="r3dmin3" \
-v ./mysql:/var/lib/mysql:Z \
--name=redmine-db docker.io/library/mariadb:latest
# Redmineコンテナ作成
sudo podman run \
-d --restart=always --pod=redmine-pod \
-e REDMINE_DB_DATABASE="redmine" \
-e REDMINE_DB_USERNAME="redmine" \
-e REDMINE_DB_PASSWORD="r3dmin3" \
-e REDMINE_DB_MYSQL="127.0.0.1" \
-v ./files:/usr/src/redmine/files:Z \
--name=redmine-web docker.io/library/redmine:latest

管理ユーザの初期パスワードは、admin/adminのようです。
問題なければ、yamlファイルを生成します。

sudo podman generate kube redmine-pod > redmine-pod.yaml

以下、Redmineポッド向けの各種コマンドの覚書です。

# ポッドの停止・削除
sudo podman pod stop redmine-pod
sudo podman pod rm redmine-pod
# ポッドの起動
sudo podman play kube ./redmine-pod.yaml
# コンテナの中でbash起動
sudo podman exec -it redmine-web bash
sudo podman exec -it redmine-db bash
# playで実行した場合
sudo podman exec -it redmine-pod-redmine-web bash
sudo podman exec -it redmine-pod-redmine-db bash

Readymedia (miniDLNA)

DLNAサーバとしてReadymediaを起動してみました。イメージを1つ起動するかたちです。

mkdir readymedia
cd readymedia
# mediaはここでは新たにディレクトリを作成しましたが、コンテンツの置き場所を指定します。
mkdir cache media

8200/tcpと1900/udpをマップしました。/mediaのマウント先は、DLNAで配信するコンテンツを置いたディレクトリを指定します。ここでは./mediaを指定してあります。

# Readymedia用ポッド作成
sudo podman pod create --name readymedia-pod -p 8200:8200/tcp,1900:1900/udp
# Readymediaコンテナ作成
sudo podman run \
-d --restart=always --pod=readymedia-pod \
-e FRIENDLY_NAME="DLNA Server" \
-e TCP_PORT="8200" \
-e SERIAL="987654333" \
-e VIDEO_DIR1="/media" \
-v ./media:/media:Z \
-v ./cache:/cache:Z \
--name=readymedia-web docker.io/ypopovych/readymedia:latest

管理ページにアクセスできましたでしょうか?問題なければ、yamlファイルを生成します。

sudo podman generate kube readymedia-pod > readymedia-pod.yaml

以下、Readymediaポッド向けの各種コマンドの覚書です。

# ポッドの停止・削除
sudo podman pod stop readymedia-pod
sudo podman pod rm readymedia-pod
# ポッドの起動
sudo podman play kube ./readymedia-pod.yaml
# コンテナの中でbash起動
sudo podman exec -it readymedia-web bash
# playで実行した場合
sudo podman exec -it readymedia-pod-readymedia-web bash

Emby

ストリーミングサーバのEmbyもイメージ1つ起動するかたちになります。

mkdir emby
cd emby
# tvshowsはここでは新たにディレクトリを作成しましたが、コンテンツの置き場所を指定します。 mkdir config tvshows

8096/tcpと8920/tcpをマップしました。/tvshowsのマウント先は、embyで配信するコンテンツを置いたディレクトリを指定します。ここでは./tvshowsを指定してあります。

# Emby用ポッド作成
sudo podman pod create --name emby-pod -p 8096:8096/tcp,8920:8920/tcp
# Embyコンテナ作成
sudo podman run \
-d --restart=always --pod=emby-pod \
-e PGID="1000" \
-e PUID="1000" \
-e LANG="ja_JP.UTF-8" \
-e LANGUAGE="ja_JP.UTF-8" \
-e TZ="Asia/Tokyo" \
-v ./config:/config:Z \
-v ./tvshows:/data/tvshows:Z \
--name=emby-web docker.io/linuxserver/emby:latest
# yamlファイル生成
sudo podman generate kube emby-pod > emby-pod.yaml

WebブラウザでTCPポート番号8096にアクセスすると、初期設定画面が表示されます。先程指定した/data/tvshowsは、Embyの設定でライブラリに登録する必要があります。以下ポッドの管理コマンドになります。

# ポッドの停止・削除
sudo podman pod stop emby-pod
sudo podman pod rm emby-pod
# ポッドの起動
sudo podman play kube ./emby-pod.yaml
# コンテナの中でbash起動
sudo podman exec -it emby-web bash
# playで実行した場合
sudo podman exec -it emby-pod-emby-web bash

Mongodb

最後にMongodbとMongo Expressを起動したいと思います。

mkdir mongodb
cd mongodb

Mongo ExpressはTCPポート番号8081です。上述の他のサービスと同時に起動する場合、重複しないようにご注意下さい。

# Mongodb用ポッド作成
sudo podman pod create --name mongo-pod -p 27017:27017/tcp,28017:28017/tcp,8081:8081/tcp
# Mongodbコンテナ作成
sudo podman run \
-d --restart=always --pod=mongo-pod \
-e MONGO_INITDB_ROOT_USERNAME="root" \
-e MONGO_INITDB_ROOT_PASSWORD="humongous" \
-v ./db:/data/db:Z \
--name=mongo-db docker.io/library/mongo:latest
# Mongo Expressコンテナ作成
sudo podman run \
-d --restart=always --pod=mongo-pod \
-e ME_CONFIG_MONGODB_SERVER="127.0.0.1" \
-e ME_CONFIG_MONGODB_ADMINUSERNAME="root" \
-e ME_CONFIG_MONGODB_ADMINPASSWORD="humongous" \
--name=mongo-exp docker.io/library/mongo-express:latest
# yamlファイル生成
sudo podman generate kube emby-pod > emby-pod.yaml

このような感じで、Mongo Expressの動作を確認しました。

最後にMongoポッド用のコマンド覚書です。

# ポッドの停止・削除
sudo podman pod stop mongo-pod
sudo podman pod rm mongo-pod
# ポッドの起動
sudo podman play kube ./mongo-pod.yaml
# コンテナの中でbash起動
sudo podman exec -it mongo-db bash
sudo podman exec -it mongo-exp bash
# playで実行した場合
sudo podman exec -it mongo-pod-mongo-db bash
sudo podman exec -it mongo-pod-mongo-exp bash

以上のように、WordPressやNextcloud等、いくつかポッドを作成してみましたが。

生成されたyamlファイルを確認しますと。Podmanのバージョンは2.2.1のようです。(21.1.31現在)

バージョンアップでyamlファイルの仕様が変わって、うまく動作しない場合があるかと思いますが、ポッドとコンテナを作成する手順は、バージョンアップに関わらず同じかと思います。

yamlファイルが起動しなくなったら、ポッドを作り直して、yamlファイルを作り直す、という方法が確実かと思います。

追々、他のイメージについても、起動手順をこの記事に追記したいと思います。

スポンサーリンク

フォローする

スポンサーリンク