Raspberry Pi 4のPodmanで複数のWordPressを起動しようとしたものの

先日、Raspberry PiのAarch64版Podman環境を構築しました。

Dockerと同様に、ARM 64版のコンテナ・イメージが公開されていれば、そのままpullでダウンロードして実行することができます。

Podmanはデーモンが不要で軽量・ルート不要で高セキュリティな反面、Dockerと動きが異なります。

具体的には、たとえば複数の異なるTCPポート、たとえば8080, 8081, 8082番でWordPressを3つ動かしたい場合。Dockerではdocker-compose.yamlファイルを3つ作成すれば起動することができました。

Podmanでも同じことができるのでしょうか?試してみました。


Raspberry Pi 4の中で複数のWordPressをPodmanで起動してみる

別のTCPポートを使用するpod.yamlを作成

先日作成した、WordPress起動用のKubernetesのpod.yamlファイルですが。

複数の異なるTCPポートで起動する事を考慮して、少し手直ししてみました。

mkdir wp8081
cd wp8081
vi wp8081-pod.yaml

Docker Hubの公式イメージの場合、WordPressはTCPポート80番が既定かと思います。Mariadbは3306番になります。

WordPressを1つだけ動かす場合の動作は、既に確認済みです。問題ありませんでした。

複数同時に動かしたいということで、2つ目のWordPressをTCPポート8081番、MariadbをTCPポート3307で動かす設定を作成します。

このような内容のKubernetesのpod用YAMLファイルを作ってみました。

# Generation of Kubernetes YAML is still under development!
#
# Save the output of this file and use kubectl create -f to import
# it into Kubernetes.
#
# Created with podman-1.9.3
apiVersion: v1
kind: Pod
metadata:
  creationTimestamp: "2020-09-19T23:15:42Z"
  labels:
    app: wp8081-pod
  name: wp8081-pod
spec:
  containers:
  - name: wp8081-web
    env:
    - name: WORDPRESS_DB_NAME
      value: wp
    - name: WORDPRESS_DB_HOST
      value: 127.0.0.1:3307
    - name: WORDPRESS_DB_USER
      value: wordpress
    - name: WORDPRESS_DB_PASSWORD
      value: w0rdpr3ss
    image: docker.io/library/wordpress:latest
    ports:
    - containerPort: 80
      hostPort: 8081
      protocol: TCP
    resources: {}
    securityContext:
      allowPrivilegeEscalation: true
      capabilities: {}
      privileged: false
      readOnlyRootFilesystem: false
      seLinuxOptions: {}
    workingDir: /var/www/html
    volumeMounts:
    - mountPath: /var/www/html
      name: wp-volume
  - name: wp8081-db
    env:
    - name: MYSQL_ROOT_PASSWORD
      value: myrootpass
    - name: MYSQL_USER
      value: wordpress
    - name: MYSQL_PASSWORD
      value: w0rdpr3ss
    - name: MYSQL_DATABASE
      value: wp
    image: docker.io/library/mariadb:latest
    ports:
    - containerPort: 3306
      hostPort: 3307
      protocol: TCP
    resources: {}
    securityContext:
      allowPrivilegeEscalation: true
      capabilities: {}
      privileged: false
      readOnlyRootFilesystem: false
      seLinuxOptions: {}
    workingDir: /
    volumeMounts:
    - mountPath: /var/lib/mysql
      name: db-volume
  volumes:
  - name: wp-volume
    hostPath:
      path: /home/ubuntu/wp8081/html
      type: Directory
  - name: db-volume
    hostPath:
      path: /home/ubuntu/wp8081/mysql
      type: Directory
status: {}

永続化用のディレクトリを作成後、podを起動します。

問題なく起動しています。

正しく動作しているか?

それでは、2つ目を想定したポート番号8081のWordPressにアクセスしてみます。ふむふむ。

Webブラウザへのレスポンスがあるということで、WordPressのコンテナは正常に動いている感じです。

データベース・コネクションでエラーが出ているということで、Mariadbのコンテナの動きが怪しいです。

TCPのリスニングポートを調べてみますと。

ss -l -n

ポート番号3307と8081で待ち受け(リスニング)していますので、上述のYAMLファイルは間違っておらず、実行したポッドのコンテナもそのような動き(指定したTCPポートで待ち受ける)をしている感じです。


Podmanの問題?Mariadbのコンテナイメージの問題?

どうやらこのあたりの情報が関係しているようです。

Podmanのissueですが、MariadbがTCPポート3309番でうまく動かない内容のようです。

問題(issue)は終了(close)しているようですが、アーキテクチャはRaspberry Piではなくamd64版(x86-64)のようです。

Mariadb側でポートを何度も開き直す動作の影響のようですが、最終的にMariadbのコンテナイメージ側で対応した感じでしょうか。

私の勝手な推測ですが、同じ問題がARM 64版のMariadbイメージで発生している感じもします。

ではデータベースをMariadbではなくMysqlに変更すれば?と思うかもしれませんが、Mysqlの公式イメージはARM 64に対応していないと思います。(2020年9月現在)


アーキテクチャとコンテナ管理システムを整理

話がややこしくなりそうですので、アーキテクチャとコンテナ管理システムを整理しておこうと思います。

アーキテクチャ

  1. ARM64
    • Raspberry Piの64ビット版OSを起動した場合
    • Aarch64もARM64に含まれるのでしょうか?
  2. x86-64
    • Intel系のCPU
    • AMD64と記述される場合も
  3. ARM(無印)
    • Raspberry Piで32ビット版OSを起動した場合

コンテナ管理システム

  1. Docker
    • docker-composeで複数のコンテナを起動可能
  2. Podman
    • ポッド(pod)で複数のコンテナを管理

今のところ様子を見る感じです

上述の理由から、いまのところ、Raspberry Pi 4のARM64環境で、Podmanで複数のWordPressを動かすことはできていません。

少なくとも、x86-64版のdocker-composeでは、私は複数のWordPressを動かしたことがあります。

ARM64版のdocker-composeなら、複数のMariadbを同時に動かせるのかもしれませんが、こちらは試しておりません。

x86-64版のPodmanのissueを見ると、おそらくMariadbイメージ側の不具合(バグ)の可能性が高く、イメージ側での対応が必要な感じでした。

追々、ARM64版のPodmanの完成度が上がってくれば、対応される気もしますので、しばらく様子を見て、いまのところRaspberry PiでWordPressを複数動かすのは保留しておこうと思います。

逆に考えると、Mariadb以外なら別ポートで色々起動できる感じもしますので、いろいろ試すのも面白そうですね

スポンサーリンク

フォローする

スポンサーリンク