先日、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: {}
問題なく起動しています。
正しく動作しているか?
それでは、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月現在)
アーキテクチャとコンテナ管理システムを整理
話がややこしくなりそうですので、アーキテクチャとコンテナ管理システムを整理しておこうと思います。
アーキテクチャ
- ARM64
- Raspberry Piの64ビット版OSを起動した場合
- Aarch64もARM64に含まれるのでしょうか?
- x86-64
- Intel系のCPU
- AMD64と記述される場合も
- ARM(無印)
- Raspberry Piで32ビット版OSを起動した場合
コンテナ管理システム
- Docker
- docker-composeで複数のコンテナを起動可能
- 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以外なら別ポートで色々起動できる感じもしますので、いろいろ試すのも面白そうですね