cockpitのpodmanアプリケーションを使うと毎回画面でチョコマカと手入力が必要なので今回はpodmanをコマンドラインから使ってサイトを作ってみる。
1.podの作成
podを作る際に、ホストのポートからコンテナのポートへの転送も指定する。
ついでに外部へのポート開放もする。
# podman pod create -p 20080:80 -p 20443:443 -p 20090:8090 --name wordpress_pod
cee956541b051b84e15e7ac5e347a6aeb572b0aef16084954818e725f038cb1b
# firewall-cmd --add-port=20080/tcp --permanent ※永続的解放
# firewall-cmd --add-port=20443/tcp --permanent ※永続的解放
# firewall-cmd --add-port=20090/tcp --permanent ※永続的解放 phpMyAdmin用
# firewall-cmd --reload
# firewall-cmd --list-all ※設定を確認
※2025/4/1 phpMyAdminの設定を追記
2.イメージのダウンロード
mariaDBとwordpressのイメージをダウンロードする
# podman pull docker.io/mariadb:latest
Trying to pull docker.io/library/mariadb:latest...
Getting image source signatures
Copying blob 597f7afe50fe done |
Copying blob 5a7813e071bf done |
Copying blob 5db80086e4da done |
Copying blob bdecd990c29c done |
Copying blob 901fe9394c00 done |
Copying blob 43eb19e1b102 done |
Copying blob e1dede558384 done |
Copying blob 5c3a22df929b done |
Copying config a914eff5d2 done |
Writing manifest to image destination
a914eff5d2eb4c650a4e787e453d52a4ffba977632bd624cc6e63d0c9c4c2d65
# podman pull docker.io/wordpress:latest
Trying to pull docker.io/library/wordpress:latest...
Getting image source signatures
Copying blob e4ca7ebe0914 done |
Copying blob 6e909acdb790 done |
Copying blob dacb60b59038 done |
Copying blob 5db2c4b6137b done |
Copying blob 64450047668b done |
Copying blob 4d6386e035f7 done |
Copying blob 3dc5d9089396 done |
Copying blob 1778f52baa09 done |
Copying blob a5d9cb1c80ec done |
Copying blob b116c8459f57 done |
Copying blob 8f8ddda3587a done |
Copying blob f432ea27fc70 done |
Copying blob 6a5a37a900f3 done |
Copying blob 4f4fb700ef54 done |
Copying blob 57c6ea19af98 done |
Copying blob ae777a0ca433 done |
Copying blob 5f19650adea9 done |
Copying blob 177323f85a94 done |
Copying blob fe638a1d1db7 done |
Copying blob f4abcace8187 done |
Copying blob 729bf49a9314 done |
Copying blob cac8b814902b done |
Copying config 52bb3e7315 done |
Writing manifest to image destination
52bb3e73152ae8a92ef5a7d0589d923aa3c46538c8494b644b8cf2f5ceba2d37
# podman pull docker.io/phpmyadmin:latest
Trying to pull docker.io/library/phpmyadmin:latest...
Getting image source signatures
Copying blob 6e909acdb790 skipped: already exists
Copying blob 64450047668b skipped: already exists
Copying blob 4d6386e035f7 skipped: already exists
Copying blob e4ca7ebe0914 skipped: already exists
Copying blob dacb60b59038 skipped: already exists
Copying blob a5d9cb1c80ec skipped: already exists
Copying blob 1778f52baa09 skipped: already exists
Copying blob 3dc5d9089396 skipped: already exists
Copying blob b116c8459f57 skipped: already exists
Copying blob 8f8ddda3587a skipped: already exists
Copying blob 6a5a37a900f3 skipped: already exists
Copying blob 4f4fb700ef54 skipped: already exists
Copying blob f432ea27fc70 skipped: already exists
Copying blob 2356864ac4b9 done |
Copying blob 28fa232eddfc done |
Copying blob a084403b2fe2 done |
Copying blob 69286ddc9ea5 done |
Copying blob 21d6bc6af9fd done |
Copying blob 5db2c4b6137b skipped: already exists
Copying blob 5fb8db322bbb done |
Copying config 052506f2de done |
Writing manifest to image destination
052506f2de4d5532efb7c1b24b9a4311d6b5ccef006e344449f8fe633d3bbacc
※2025/4/1 phpMyAdminの設定を追記
podman diff イメージ名 で1つ1つファイル構成を見るものいいけど、
podman inspect イメージ名 の方が楽な気がする。
# podman inspect mariadb:latest
# podman inspect wordpress:latest
# podman inspect phpmyadmin:latest
※2025/4/1 phpMyAdminの設定を追記
3.コンテナの設定
https:/
"Volumes": {
"/var/lib/mysql": {}
},
# podman run -d \
--pod wordpress_pod \
--name mariadb \
--restart=unless-stopped \
-e MARIADB_RANDOM_ROOT_PASSWORD=1 \
-e MARIADB_USER={WordPressで使うユーザ名} \
-e MARIADB_PASSWORD={WordPressで使うユーザのパスワード} \
-e MARIADB_DATABASE={WordPressで使うデータベース名} \
-e TZ=Asia/Tokyo \
-v {データベースを保存する作成済みの空ディレクトリィ}:/var/lib/mysql \
wordpress:latest
とりあえずwordpressイメージにcerbotをインストしたイメージを作成 ※追記 2025/4/1
FROM wordpress:latest
RUN apt update -y
RUN apt install -y certbot python3-certbot-apache
RUN apt clean ※キャッシュ消去
RUN rm -rf /var/lib/apt/lists/* ※ログ消去
podman build -t wordpress_certbot .
https:/
"WorkingDir": "/var/www/html",
# podman run -d \
--pod wordpress_pod \
--name wordpress \
--restart=unless-stopped \
-e WORDPRESS_DB_NAME={WordPressで使うデータベース名} \
-e WORDPRESS_DB_USER={WordPressで使うユーザ名} \
-e WORDPRESS_DB_PASSWORD={WordPressで使うユーザのパスワード} \
-e WORDPRESS_DB_HOST={mariaDBのコンテナ名} \
-v {wordpressのhtmlを保存する作成済みの空ディレクトリィ}:/var/www/html \
wordpress_certbot
ブラウザで、http://{podmanをインストしたホストのIPアドレス}:20080 を開くと

が見れる(ハズ。
さらに必須情報を行い、

【WordPressをインストール】ボタンを押し

となれば、後はログインでジャンプして

先のユーザ名とパスワードを入力して【ログイン】ボタンを押すと

が見れる(ハズ
cockpit-podmanで出来上がりを見ると

※既にpod終了済
ここでworspress_podの右端の縦点なメニューで起動とか終了で簡単に運用。
バックアップするディレクトリィは、上の -v オプションで指定したディレクトリィの2つ。
-v {データベースを保存する作成済みの空ディレクトリィ}: ※コンテナ上のパスは/var/lib/mysql
-v {wordpressのhtmlを保存する作成済みの空ディレクトリィ}: ※コンテナ上のパスは/var/www/html
ps.2025/3/31
SSLについて
コンテナのOSを調べたら
# podman exec -ti wordpress /bin/bash
# cat /etc/os-release
PRETTY_NAME="Debian GNU/Linux 12 (bookworm)"
NAME="Debian GNU/Linux"
VERSION_ID="12"
VERSION="12 (bookworm)"
VERSION_CODENAME=bookworm
ID=debian
HOME_URL="https://www.debian.org/"
Debian 12らしい、ググってみると
# apt install -y certbot python3-certbot-apache
でうまくいくらしいのでwordpress_cerbotイメージを作った。
コンテナを作る度にcerbotのインストを繰り返さずに済むらしい。
この時点ではまだcerbotの初期設定は行っていないので、WANから接続できる状況にした上で初期設定を行い、
# podman exec -ti wordpress /bin/bash
# certbot run
成功したら、いつもの様にコンテナを再起動して本当に大丈夫なのか?(要確認
ps.2025/4/1
phpMyAdminを忘れていた。残念だが、wordpressのaptリポジトリィを調べてみると
- cat /etc/apt/sources.list.d/debian.sources
- http:/
/ snapshot.debian.org/ archive/ debian/ - http:/
/ snapshot.debian.org/ archive/ debian-security/
- http:/
しかないので、wordpressイメージにphpMyAdmin付きのDockerfileでbuildしてもエラってしまうので
# podman pull docker.io/phpmyadmin:latest
Trying to pull docker.io/library/phpmyadmin:latest...
Getting image source signatures
Copying blob 6e909acdb790 skipped: already exists
Copying blob 64450047668b skipped: already exists
Copying blob 4d6386e035f7 skipped: already exists
Copying blob e4ca7ebe0914 skipped: already exists
Copying blob dacb60b59038 skipped: already exists
Copying blob a5d9cb1c80ec skipped: already exists
Copying blob 1778f52baa09 skipped: already exists
Copying blob 3dc5d9089396 skipped: already exists
Copying blob b116c8459f57 skipped: already exists
Copying blob 8f8ddda3587a skipped: already exists
Copying blob 6a5a37a900f3 skipped: already exists
Copying blob 4f4fb700ef54 skipped: already exists
Copying blob f432ea27fc70 skipped: already exists
Copying blob 2356864ac4b9 done |
Copying blob 28fa232eddfc done |
Copying blob a084403b2fe2 done |
Copying blob 69286ddc9ea5 done |
Copying blob 21d6bc6af9fd done |
Copying blob 5db2c4b6137b skipped: already exists
Copying blob 5fb8db322bbb done |
Copying config 052506f2de done |
Writing manifest to image destination
052506f2de4d5532efb7c1b24b9a4311d6b5ccef006e344449f8fe633d3bbacc
# podman run -d \
--pod ssiscirine_pod \
--name phpmyadmin \
--restart=unless-stopped \
-e PMA_ARBITRARY=1 \
-e PMA_HOSTS={mariadbコンテナ名} \
-e PMA_USER={root} \
-e PMA_PASSWORD={rootのパスワード} \ ※mariadbでrootパスワードをランダム生成した場合は毎回ログからコピペになる。
-e APACHE_PORT=8090 \
-v {phpMyAdminのsessionsを保存する作成済みの空ディレクトリィ}:/sessions:rw \
phpmyadmin:latest
3dbb9be21d3b146a2430079b3e2158c5b267a751062198d400dc6594cb3dd128
※他のボリュームオプションに指定したディレクトリィはオーナが書き換わるが、このsessionsのボリュームオプションを指定した場合のディレクトリのオーナが書き換わらないので最初は888にしないとエラる。セッションファイルが作られた後は755に戻しても大丈夫っぽい。
※APACHE_PORTを付け忘れるとコンテナ同士で80ポートがコンフリクトしてしまう。
厄介なのがpodのポート変換を後付けする方法が見つからなかったので全部再生成しないといけない。
# {podの作成}
# {ポート開放}
# {mariadbコンテナの作成} ※ログにrootのパスワード生成が載ってるか要チェック
# {wordpressコンテナの作成}
# {phpmyadminコンテナの作成} ※rootのパスワードを修正が必要な場合もある
それは嫌な場合は、wordpressコンテナからphpmyadminコンテナに転送するといいかもしれない。
# a2enmod proxy
# a2enmod proxy_http
# service apache2 restart
ProxyRequests Off
ProxyPass /phpMyAdmin/ http://phpMyAdmin:8090
ProxyPassReverse /phpMyAdmin/ http://phpMyAdmin:8090
でもLAN内でしか使わないからpodから作りなおすけどね。(笑

となると

残念ながらイメージが2.43GBに増えコンテナも315MBに増えた。