変奏現実

パソコンやMMORPGのことなどを思いつくまま・・・記載されている会社名・製品名・システム名などは、各社の商標、または登録商標です。

この画面は、簡易表示です

podman

[podman]AlmaLinux9+mariaDB

podmanでAlmaLinux9のイメージに

普通にmariaDBをインストする手順でDockerfileを作ってみる。

起動コマンドはsystemctlを使う都合上systemdが起動しないといけないので、”/sbin/init”になる。

どういう訳かコンテナ作成時に”/sbin/init”を指定してもダメなので、Dockerfileで指定する。

FROM  almalinux:latest
RUN   dnf -y update
RUN   dnf -y install mariadb mariadb-server
COPY  carset.cnf /etc/my.cnf.d/charset.cnf
RUN   systemctl enable mariadb
RUN   dnf clean all;
# 
EXPOSE 3306
CMD [ "/sbin/init" ]

How to run systemd in a containerでググってみると

–systemd=trueオプションで/sbin/initが使えるハズだけど、今はデフォになっていて、

DocerfileのCMDが systemd または init の場合に ※コンテナのCMDの場合は除外っぽい

  • /run
  • /run/lock
  • /tmp
  • /sys/fs/cgroup/systemd
  • /var/lib/journal

にtmpfs マウント ポイントを設定し、デフォルトの停止信号も SIGRTMIN+3 に変える様でSELinuxが有効な場合はホスト側でcgroupアクセス許可が必須になるから、ホスト側とコンテナ側で同じサービスが動いてる場合はマルチインスタンス風に設定した方がいいかもしれない。

# setsebool -P container_manage_cgroup true

コピー元のデータベースのキャラセットの設定ファイルを作る

[mysqld]
character-set-server = utf8mb4

[client]
default-character-set = utf8mb4

でイメージを作ってみる。

# podman build -t almalinux9_mariadb .
STEP 1/8: FROM almalinux:latest
STEP 2/8: RUN   dnf -y update
AlmaLinux 9 - AppStream                         5.4 MB/s |  15 MB     00:02    
AlmaLinux 9 - BaseOS                            2.8 MB/s |  17 MB     00:06    
AlmaLinux 9 - Extras                             12 kB/s |  13 kB     00:01    
Dependencies resolved.
・・・
Upgraded:
  glibc-2.34-125.el9_5.3.alma.1.x86_64                                          
  glibc-common-2.34-125.el9_5.3.alma.1.x86_64                                   
  glibc-minimal-langpack-2.34-125.el9_5.3.alma.1.x86_64                         
  libxml2-2.9.13-6.el9_5.2.x86_64                                               
  systemd-252-46.el9_5.3.alma.1.x86_64                                          
  systemd-libs-252-46.el9_5.3.alma.1.x86_64                                     
  systemd-pam-252-46.el9_5.3.alma.1.x86_64                                      
  systemd-rpm-macros-252-46.el9_5.3.alma.1.noarch                               
  tzdata-2025b-1.el9.noarch                                                     

Complete!
--> a2b577abfca6
STEP 3/8: RUN   dnf -y install mariadb mariadb-server
Last metadata expiration check: 0:00:19 ago on Wed Apr  2 17:57:08 2025.
Dependencies resolved.
・・・
Installed:
・・・
  mariadb-3:10.5.27-1.el9_5.x86_64                                              
  mariadb-backup-3:10.5.27-1.el9_5.x86_64                                       
  mariadb-common-3:10.5.27-1.el9_5.x86_64                                       
  mariadb-connector-c-3.2.6-1.el9_0.x86_64                                      
  mariadb-connector-c-config-3.2.6-1.el9_0.noarch                               
  mariadb-errmsg-3:10.5.27-1.el9_5.x86_64                                       
  mariadb-gssapi-server-3:10.5.27-1.el9_5.x86_64                                
  mariadb-server-3:10.5.27-1.el9_5.x86_64                                       
  mariadb-server-utils-3:10.5.27-1.el9_5.x86_64                                 
  mysql-selinux-1.0.13-1.el9_5.noarch                                           
・・・
Complete!
--> daf71bdc14ab
STEP 4/8: COPY  carset.cnf /etc/my.cnf.d/charset.cnf
--> a96ac4f1bfb3
STEP 5/8: RUN   systemctl enable mariadb
Created symlink /etc/systemd/system/mysql.service → /usr/lib/systemd/system/mariadb.service.
Created symlink /etc/systemd/system/mysqld.service → /usr/lib/systemd/system/mariadb.service.
Created symlink /etc/systemd/system/multi-user.target.wants/mariadb.service → /usr/lib/systemd/system/mariadb.service.
--> 50f6b0d16b83
STEP 6/8: RUN   dnf clean all;
26 files removed
--> 4aa9969087df
STEP 7/8: EXPOSE 3306
--> ac9094cd3dad
STEP 8/8: CMD [ "/sbin/init" ]
COMMIT almalinux9_mariadb
--> 7a06b67a56a2
Successfully tagged localhost/almalinux9_mariadb:latest
7a06b67a56a2ff8c30a436a53a64735ff9f04780b1c4649c06584f5d99327929
# STEP 1/8: FROM almalinux:latest
STEP 2/8: RUN   dnf -y update
AlmaLinux 9 - AppStream                         5.4 MB/s |  15 MB     00:02    
AlmaLinux 9 - BaseOS                            2.8 MB/s |  17 MB     00:06    
AlmaLinux 9 - Extras                             12 kB/s |  13 kB     00:01    
Dependencies resolved.
・・・
Upgraded:
  glibc-2.34-125.el9_5.3.alma.1.x86_64                                          
  glibc-common-2.34-125.el9_5.3.alma.1.x86_64                                   
  glibc-minimal-langpack-2.34-125.el9_5.3.alma.1.x86_64                         
  libxml2-2.9.13-6.el9_5.2.x86_64                                               
  systemd-252-46.el9_5.3.alma.1.x86_64                                          
  systemd-libs-252-46.el9_5.3.alma.1.x86_64                                     
  systemd-pam-252-46.el9_5.3.alma.1.x86_64                                      
  systemd-rpm-macros-252-46.el9_5.3.alma.1.noarch                               
  tzdata-2025b-1.el9.noarch                                                     

Complete!
--> a2b577abfca6
STEP 3/8: RUN   dnf -y install mariadb mariadb-server
Last metadata expiration check: 0:00:19 ago on Wed Apr  2 17:57:08 2025.
Dependencies resolved.
・・・
Installed:
・・・
  mariadb-3:10.5.27-1.el9_5.x86_64                                              
  mariadb-backup-3:10.5.27-1.el9_5.x86_64                                       
  mariadb-common-3:10.5.27-1.el9_5.x86_64                                       
  mariadb-connector-c-3.2.6-1.el9_0.x86_64                                      
  mariadb-connector-c-config-3.2.6-1.el9_0.noarch                               
  mariadb-errmsg-3:10.5.27-1.el9_5.x86_64                                       
  mariadb-gssapi-server-3:10.5.27-1.el9_5.x86_64                                
  mariadb-server-3:10.5.27-1.el9_5.x86_64                                       
  mariadb-server-utils-3:10.5.27-1.el9_5.x86_64                                 
  mysql-selinux-1.0.13-1.el9_5.noarch                                           
・・・
Complete!
--> daf71bdc14ab
STEP 4/8: COPY  carset.cnf /etc/my.cnf.d/charset.cnf
--> a96ac4f1bfb3
STEP 5/8: RUN   systemctl enable mariadb
Created symlink /etc/systemd/system/mysql.service → /usr/lib/systemd/system/mariadb.service.
Created symlink /etc/systemd/system/mysqld.service → /usr/lib/systemd/system/mariadb.service.
Created symlink /etc/systemd/system/multi-user.target.wants/mariadb.service → /usr/lib/systemd/system/mariadb.service.
--> 50f6b0d16b83
STEP 6/8: RUN   dnf clean all;
26 files removed
--> 4aa9969087df
STEP 7/8: EXPOSE 3306
--> ac9094cd3dad
STEP 8/8: CMD [ "/sbin/init" ]
COMMIT almalinux9_mariadb
--> 7a06b67a56a2
Successfully tagged localhost/almalinux9_mariadb:latest
7a06b67a56a2ff8c30a436a53a64735ff9f04780b1c4649c06584f5d99327929

無事出来上がったのでコンテナを作って起動してみる

# podman run -d -it --name almalinux9_mariadb_contener \
 -p 3306:3306 \
 -e MARIADB_ALLOW_EMPTY_ROOT_PASSWORD=1 \
 -v '{データベース保存ディレクトリィ※事前作成済}:/var/lib/mysql' \
 almalinux9_mariadb
900c3b58d5e7147e888f03674392df4fd6293de21d8c45a36e9ccda7c89fa50a

ログを見ると ※動作環境に依存

[FAILED] Failed to start MariaDB 10.5 database server.

See 'systemctl status mariadb.service' for details.

不穏な雰囲気が・・・

# podman exec almalinux9_mariadb_contener systemctl status mariadb.service
# mariadb.service - MariaDB 10.5 database server
     Loaded: loaded (/usr/lib/systemd/system/mariadb.service; enabled; preset: disabled)
     Active: failed (Result: exit-code) since Wed 2025-04-02 16:46:32 UTC; 2min 7s ago
       Docs: man:mariadbd(8)
             https://mariadb.com/kb/en/library/systemd/
    Process: 23 ExecStartPre=/usr/libexec/mariadb-check-socket (code=exited, status=0/SUCCESS)
    Process: 46 ExecStartPre=/usr/libexec/mariadb-prepare-db-dir mariadb.service (code=exited, status=1/FAILURE)
        CPU: 349ms

Apr 02 16:46:32 90b2f5aeb4b0 mariadb-prepare-db-dir[112]: chown: changing ownership of '/var/lib/mysql': Operation not permitted
Apr 02 16:46:32 90b2f5aeb4b0 mariadb-prepare-db-dir[87]: Cannot change ownership of the database directories to the 'mysql'
Apr 02 16:46:32 90b2f5aeb4b0 mariadb-prepare-db-dir[87]: user.  Check that you have the necessary permissions and try again.
Apr 02 16:46:32 90b2f5aeb4b0 mariadb-prepare-db-dir[46]: Initialization of MariaDB database failed.
Apr 02 16:46:32 90b2f5aeb4b0 mariadb-prepare-db-dir[46]: Perhaps /etc/my.cnf is misconfigured or there is some problem with permissions of /var/lib/mysql.
Apr 02 16:46:32 90b2f5aeb4b0 mariadb-prepare-db-dir[46]: Initialization of MariaDB database was not finished successfully.
Apr 02 16:46:32 90b2f5aeb4b0 mariadb-prepare-db-dir[46]: Files created so far will be removed.
Apr 02 16:46:32 90b2f5aeb4b0 systemd[1]: mariadb.service: Control process exited, code=exited, status=1/FAILURE
Apr 02 16:46:32 90b2f5aeb4b0 systemd[1]: mariadb.service: Failed with result 'exit-code'.
Apr 02 16:46:32 90b2f5aeb4b0 systemd[1]: Failed to start MariaDB 10.5 database server.

MariaDB が起動しない場合の対処方法 でググってみると、

ディレクトリィのオーナが気に入らないダケみたいなのでchown -R mysql:mysqlで丸ごと更新。

# podman exec almalinux9_mariadb_contener chown -R mysql:mysql /var/lib/mysql
# podman exec almalinux9_mariadb_contener systemctl start mariadb
# podman exec almalinux9_mariadb_contener systemctl status mariadb.service
● mariadb.service - MariaDB 10.5 database server
     Loaded: loaded (/usr/lib/systemd/system/mariadb.service; enabled; preset: disabled)
     Active: active (running) since Wed 2025-04-02 16:51:09 UTC; 18s ago
       Docs: man:mariadbd(8)
             https://mariadb.com/kb/en/library/systemd/
    Process: 120 ExecStartPre=/usr/libexec/mariadb-check-socket (code=exited, status=0/SUCCESS)
    Process: 142 ExecStartPre=/usr/libexec/mariadb-prepare-db-dir mariadb.service (code=exited, status=0/SUCCESS)
    Process: 251 ExecStartPost=/usr/libexec/mariadb-check-upgrade (code=exited, status=0/SUCCESS)
   Main PID: 230 (mariadbd)
     Status: "Taking your SQL requests now..."
      Tasks: 20 (limit: 1638)
     Memory: 75.5M
        CPU: 1.081s
     CGroup: /system.slice/mariadb.service
             └─230 /usr/libexec/mariadbd --basedir=/usr

Apr 02 16:51:08 90b2f5aeb4b0 mariadb-prepare-db-dir[181]: The second is mysql@localhost, it has no password either, but
Apr 02 16:51:08 90b2f5aeb4b0 mariadb-prepare-db-dir[181]: you need to be the system 'mysql' user to connect.
Apr 02 16:51:08 90b2f5aeb4b0 mariadb-prepare-db-dir[181]: After connecting you can set the password, if you would need to be
Apr 02 16:51:08 90b2f5aeb4b0 mariadb-prepare-db-dir[181]: able to connect as any of these users with a password and without sudo
Apr 02 16:51:08 90b2f5aeb4b0 mariadb-prepare-db-dir[181]: See the MariaDB Knowledgebase at https://mariadb.com/kb
Apr 02 16:51:08 90b2f5aeb4b0 mariadb-prepare-db-dir[181]: Please report any problems at https://mariadb.org/jira
Apr 02 16:51:08 90b2f5aeb4b0 mariadb-prepare-db-dir[181]: The latest information about MariaDB is available at https://mariadb.org/.
Apr 02 16:51:08 90b2f5aeb4b0 mariadb-prepare-db-dir[181]: Consider joining MariaDB's strong and vibrant community:
Apr 02 16:51:08 90b2f5aeb4b0 mariadb-prepare-db-dir[181]: https://mariadb.org/get-involved/
Apr 02 16:51:09 90b2f5aeb4b0 systemd[1]: Started MariaDB 10.5 database server.

無事起動できたらしい。

# ls -l mysql
total 122920
-rw-rw---- 1 100026 100026     24576 Apr  3 01:51 aria_log.00000001
-rw-rw---- 1 100026 100026        52 Apr  3 01:51 aria_log_control
-rw-rw---- 1 100026 100026       972 Apr  3 01:51 ib_buffer_pool
-rw-rw---- 1 100026 100026 100663296 Apr  3 01:51 ib_logfile0
-rw-rw---- 1 100026 100026  12582912 Apr  3 01:51 ibdata1
-rw-rw---- 1 100026 100026  12582912 Apr  3 01:51 ibtmp1
-rw-rw---- 1 100026 100026         0 Apr  3 01:51 multi-master.info
drwx------ 2 100026 100026      4096 Apr  3 01:51 mysql
srwxrwxrwx 1 100026 100026         0 Apr  3 01:51 mysql.sock
-rw-rw---- 1 100026 100026        16 Apr  3 01:51 mysql_upgrade_info
drwx------ 2 100026 100026        20 Apr  3 01:51 performance_schema

mysql.sockが0バイトなのが気になるが、mariadbコマンドが使えるかな?

# podman exec -it almalinux9_mariadb_contener mariadb
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 5
Server version: 10.5.27-MariaDB MariaDB Server

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
+--------------------+
3 rows in set (0.001 sec)

MariaDB [(none)]> show variables like 'port';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| port          | 3306  |
+---------------+-------+
1 row in set (0.003 sec)

MariaDB [(none)]> exit
Bye
# 

なので多分OK。

でも【停止】させた表示が少し気になるので コンテナに-it は付けない方がいいかも。

         Unmounting /etc/hostname...
         Unmounting /etc/hosts...
         Unmounting /etc/resolv.conf...
         Unmounting /run/.containerenv...
         Unmounting /run/lock...
         Unmounting /run/secrets...
         Unmounting Temporary Directory /tmp...
         Unmounting /var/lib/mysql...
         Unmounting var-log-journal.mount...
[FAILED] Failed unmounting /etc/hostname.
[FAILED] Failed unmounting /etc/hosts.
[FAILED] Failed unmounting /etc/resolv.conf.
[FAILED] Failed unmounting /run/.containerenv.
[FAILED] Failed unmounting /run/lock.
[FAILED] Failed unmounting /run/secrets.
[FAILED] Failed unmounting Temporary Directory /tmp.
[FAILED] Failed unmounting /var/lib/mysql.
[FAILED] Failed unmounting var-log-journal.mount.
[  OK  ] Stopped target Swaps.
[  OK  ] Reached target System Shutdown.
[  OK  ] Reached target Unmount All Filesystems.
[  OK  ] Reached target Late Shutdown Services.
         Starting System Halt...
Sending SIGTERM to remaining processes...
Sending SIGKILL to remaining processes...
All filesystems, swaps, loop devices, MD devices and DM devices detached.
Halting system.
Exiting container.
 disconnected 


[podman]AlmaLinux:lastest

1.起動しないコンテナ?

# podman search almalinux:latest
NAME                                   DESCRIPTION
docker.io/almalinux/almalinux          DEPRECATION NOTICE: This image is deprecated...
docker.io/library/almalinux            The official build of AlmaLinux OS.
docker.io/almalinux/9-base             AlmaLinux 9 Base container image
docker.io/almalinux/8-base             AlmaLinux OS 8 official base image
docker.io/almalinux/9-minimal          AlmaLinux 9 minimal container image
docker.io/almalinux/9-init             AlmaLinux 9 Init container image
docker.io/almalinux/9-micro            AlmaLinux 9 Micro container image

docker.io/library/almalinuxが良さそうな気がしたので、イメージをダウンロードして以前やった様に・・・

# podman pull docker.io/library/almalinux:latest
# podman run -d \
    --name almalinux9 \
    almalinux:latest    ※The official build of AlmaLinux OS.

とやってみると、コンテナが終了してて【起動】ボタンを押しても起動しない。

ググってみると、

# podman run -d \
    --name almalinux9 \
    -it \               ※ --interactive(-i) + --tty(-t) => -it
    almalinux:latest    ※The official build of AlmaLinux OS.

と–interactive(-i)「対話式プロセス」と–tty(-t)「疑似端末割当」のオプションを付けると起動してくれる。Debian系では無くても起動してたけどRedHat系では付けておいた方が良さそう。

2.アタッチして抜けるとコンテナが【終了】※どのコンテナでも

アタッチしてバージョンを確認してexitするとコンテナが止まってしまうので

【Ctrl】+【p】と【Ctrl】+【q】を続けて押して、そっと抜ける方がいい。

# podman attach almalinux9
# cat /etc/redhat-release 
AlmaLinux release 9.5 (Teal Serval)
※Ctrl-p & Ctrl-q で抜けるとコンテナは「実行中」のままになる

3.とりあえず中を覗きたいだけの場合

# podman run -a \
    --name almalinux9a \
    -it \
    --rm \
    docker.io/almalinux/9-minimal
✔ docker.io/library/almalinux9a:latest
Trying to pull docker.io/library/almalinux9a:latest...
Error: initializing source docker://almalinux9a:latest: reading manifest latest in docker.io/library/almalinux9a: requested access to the resource is denied

と終了後にコンテナを削除するオプションを付けるといいかもとやってみると毎回イメージをダウンロードで失敗するので、 -aは現状使えない。ググってみると-aのオプションを説明してる記事も無かった。

# podman run -d \
    --name almalinux9a \
    -it \
    --rm \
    almalinux:latest
# podman attach almalinux9a
# exit

とちょっと面倒になってる。

–rmについては1行コマンドを実行する分にはそれなりに使える

$ podman run --rm almalinux:latest ls -alF /etc
total 884
drwxr-xr-x 46 root root   4096 Mar  7 07:53 ./
dr-xr-xr-x  1 root root     17 Apr  1 23:00 ../
-rw-------  1 root root      0 Mar  7 07:53 .pwd.lock
-rw-r--r--  1 root root     14 Mar  7 07:53 BUILDTIME
-rw-r--r--  1 root root     94 Jan 31  2022 GREP_COLORS
drwxr-xr-x  5 root root     51 Mar  7 07:52 X11/
・・・

でも非同期でコマンドを実行してるらしく、シェルは期待したようには動かない。

# podman run --rm almalinux:latest /bin/bash
# ※即終了&コンテナ削除


[WordPress]podmanでサイトを作る

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://hub.docker.com/_/mariadb でmariadbコンテナで設定する環境変数等を調べ、コンテナを作成し実行する。

"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://hub.docker.com/_/wordpress でwordpressコンテナで設定する環境変数等を調べ、コンテナを作成し実行する

"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/

しかないので、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に増えた。



[WordPress]cockpit-podmanでサイトを作る

まず、色々ぐぐってみると

podmanのCLIで組んでる方が多く、

cockpit-podmanアプリでwordpressサーバを作ってるとこは少なかった。

しかもコンテナのイメージのバージョンの差異のせいか?

環境変数の設定が微妙にうまくいかなかったりするので、

ココの記事の内容も当てにできないと思います。

地道にDockerの各コンテナイメージの説明をよく読んだ方が良さそうです。

そんな訳で・・・

  • データベースはMariaDBが良いかな
  • WordPress自体がPHPで出来ている

ということで2つのイメージで組み立てることにする。

  1. Podを作る
    • コンテナ同士の通信をしやすくする為
      • IPアドレスを共有するのでコンテナ毎にポート開放する手間が不要
      • Pod内のコンテナ同士の識別はIPアドレスではなくコンテナ名を使用
      • pod起動終了で中のコンテナが一斉に起動終了するのは便利
      • 最重要:pod作成時に必要なポート開放をする必要がある
        • 最初はpod無しで試した方が絶対安全(だと思う
          • ポート開放等の設定ミスや漏れがあれば全部やり直し
            • Configureファイルを作り
              • podmamのコマンドでエラー&リトライが近道
  2. MariaDBのコンテナを作る
    • 他のDBでもいいけどAlmaLinuxにリポジトリィにある
    • 初期設定は環境変数設定のみ
      • コンテナのコンソールでシェルが動いてない
        • podman exec mysql で設定不可
  3. WordPressのコンテナを作る
    • 初期設定は環境変数設定のみ
      • コンテナのコンソールでシェルが動いてない
        • WordPressの展開も困難
        • PHPインストとini調整
        • Apache設定不可

の手順で作成する。

1.Podを作る

cockpitのPodmanアプリのコンテナーの右端の【Podの作成】ボタンからこんな風に作る。

とりあえずホスト側でポートマッピングしたホストポートを解放。

# firewall-cmd --add-port=20080/tcp --permanent
# firewall-cmd --add-port=20443/tcp --permanent
# firewall-cmd --reload

2.MariaDBのコンテナを作る

イメージのとこの【新規イメージのダウンロード】ボタンでイメージをダウンロードしておく。

podのとこの【podでのコンテナーの作成】ボタンで・・・

wordpressコンテナからmariadbコンテナ名で接続先を指定するので、コンテナ名は「mariadb」とか判りやすいものにしておく。

DockerのMariaDBのページに環境変数の設定がある。

ここで

  1. MARIADB_ROOT_PASSWORD={ルートのパスワード}
  2. MARIADB_ALLOW_EMPTY_ROOT_PASSWORD=1
  3. MARIADB_RANDOM_ROOT_PASSWORD=1

のいづれかが必要と書いてあるけど、試した感じでは1.のrootパスワード指定ではWordPressからデータベースにアクセスできなかった。

とりあえず、環境変数で初期設定

MARIADB_RANDOM_ROOT_PASSWORD=1
MARIADB_USER={WordPressで使うユーザ名}
MARIADB_PASSWORD={WordPressで使うユーザのパスワード}
MARIADB_DATABASE={WordPressで使うデータベース名}
TZ=Asia/Tokyo ※日本の場合

コンテナの画面では「変数の追加」ボタンを押すと「一括インポート・・・」の説明が出るので、上の環境変数設定を丸ごとペーストすると楽。

コンテナを作り直す度にデータベースが空になると面倒なので、ボリュームを指定してホストに残るようにする。

ホストパス             コンテナーパス 
{ホスト側のディレクトリィ}  /var/lib/mysql

改めてmariadbコンテナを作る時は初期設定済みなのでボリュームだけ指定すればいい。(ハズ

3.WordPressのコンテナを作る

イメージのとこの【新規イメージのダウンロード】ボタンでイメージをダウンロードしておく。

podのとこの【podでのコンテナーの作成】ボタンで・・・

wordpressもdockerのページを見ると

環境変数がいっぱい必要らしい

WORDPRESS_DB_NAME={WordPressで使うデータベース名}
WORDPRESS_DB_USER={WordPressで使うユーザ名}
WORDPRESS_DB_PASSWORD={WordPressで使うユーザのパスワード}
WORDPRESS_DB_HOST={mariaDBのコンテナ名}

毎回htmlも空になると面倒なので、ボリュームを指定しホストに残す。

ホストパス               コンテナーパス 
{ホスト側のディレクトリィ}  /var/www/html 

改めてwordpressコンテナを作る時は初期設定済みなのでボリュームだけ指定すればいい。(ハズ

注意点としては・・・

/var/www/htmlの下にwp-config.phpが作成されるまで待つこと。

さっさとコンテナを止めたり削除すると作成されないので、環境変数の設定が必要になる。

とりあえず、ここまで無事2個のコンテナが起動できていれば

さーて、ここまでは無事成功したけど・・・

ボリューム指定でホストからwp-config.phpが見れるので再設定できるかな?と思いきや

暗号化されているので再設定するよりコンテナを作り直した方が安心できそう。

ブログの移行をするつもりなら

移行プラグインを使うしかない。

ここまでやってやっと気が付く。

podmanのCLIでpodやコンテナを作って

cockpit-podmanでやることはpodの起動と終了だけにした方が

絶対楽だ(合掌

イメージだけで1Gバイトあるけど

CPUの使用率やメモリ消費量は低いのは

助かる。

ブラウザで記事をちょっと書いた感じでは異様に遅いとかないので、

podmanにブログを移行するのも悪くないかもしれない。



[Almalinux]Cockpit-Podman

コンテナと云えばDockerなんだろうけどRedhatのコマンドから削除され、代わりにPodmanが入ったらしい。

cockpitのアプリケーションの画面にPodmanがあるので【インストール】ボタンを押してみる。

# podman --version
podman version 5.2.2

イメージをダウンロードしてみる。

docker.ioからAlmaLinux9のminimalを選んでダウンロードしてみる

暫くすると

イメージは落とせたらしいので【コンテナーの作成】ボタンを押してコンテナを作る。

で動いてるっぽい。

ここまではいいけど、どう繋げばいいんだろう?

と思ったら「コンソール」タグがあった。

これで何かを付け足せば良いのだろうけど

dnfもtopも何も入ってないのでどうすればいいのかな?

インスト済みのコマンドならホストから実行できる。

# podman exec {コンテナ名} {コマンド} な感じで

# podman exec suspicious_morse ls -l
total 0
dr-xr-xr-x   2 root root   6 Oct  2 21:00 afs
lrwxrwxrwx   1 root root   7 Oct  2 21:00 bin -> usr/bin
drwxr-xr-x   5 root root 360 Mar 26 14:31 dev
drwxr-xr-x   1 root root  18 Mar 26 14:31 etc
drwxr-xr-x   2 root root   6 Oct  2 21:00 home
lrwxrwxrwx   1 root root   7 Oct  2 21:00 lib -> usr/lib
lrwxrwxrwx   1 root root   9 Oct  2 21:00 lib64 -> usr/lib64
drwxr-xr-x   2 root root   6 Oct  2 21:00 media
drwxr-xr-x   2 root root   6 Oct  2 21:00 mnt
drwxr-xr-x   2 root root   6 Oct  2 21:00 opt
dr-xr-xr-x 254 root root   0 Mar 26 14:31 proc
dr-xr-x---   2 root root  91 Mar  7 07:52 root
drwxr-xr-x   1 root root  42 Mar 26 14:31 run
lrwxrwxrwx   1 root root   8 Oct  2 21:00 sbin -> usr/sbin
drwxr-xr-x   2 root root   6 Oct  2 21:00 srv
dr-xr-xr-x  13 root root   0 Mar 26 14:31 sys
drwxrwxrwt   2 root root   6 Oct  2 21:00 tmp
drwxr-xr-x  12 root root 144 Mar  7 07:52 usr
drwxr-xr-x  18 root root 235 Mar  7 07:52 var

できるけどviすら無いから・・・

ただ rpm コマンドは入ってたので・・・

ホストからファイル転送すれば何とかなるかな???????

# podman cp {ホストファイルパス} {コンテナー名} : {コンテナーファイルパス}

外にファイル転送するには

# podman cp {コンテナー名} : {コンテナーファイルパス} {ホストファイルパス}

で使えるらしい。:の有無でホストとコンテナを区別してるっぽいので

# podman cp {コンテナー1} : {コンテナーファイルパス}  {コンテナー2} : {コンテナーファイルパス}

もできそう。

首尾よく何かが出来上がったら、コンテナを停止してイメージを作ればいいのかな。

# podman stop {コンテナー名}  か cockpitのpodmanのコンテナのメニューの【停止】

# podman commit {コンテナー名} {イメージ名} か コンテナのメニューの【コミット】

※「なんたらかんたら」はエラった




top