はじめに
CentOS8を動かしてみたらdockerが未サポートで代替として用意されているPodmanを使用してdocker-compose的なことをしたかったのだが、podman-composeは問題が多く開発も止まっている。podman公式でサポートされているkubernetesの設定ファイルを使用してPodを作成する方法があるのだが、いかんせんドキュメントも貧弱で情報が少なすぎた、、、。
ストレージの永続化に結構手間取ったのでその方法をまとめてみました。
何か問題があれば指摘してください。
環境
$ podman -v
podman version 2.0.5
$ cat /etc/redhat-release
CentOS Linux release 8.2.2004 (Core)
今回動かすもの
podman play kube
コマンドでWordpress+MariaDBを動かし、MariaDBのファイルを永続化してコンテナ再起動後も同じデータが使用できるようなPodの作成を目指します。
結論
kubernetesのvolumeのhostPathを使用する。
Referenceはこちら
$ podman play kube wp-pod.yml
apiVersion: v1
kind: Pod
metadata:
creationTimestamp: "2020-07-01T20:17:42Z"
labels:
app: wp-pod
name: wp-pod
spec:
containers:
- name: wptest-web
env:
- name: WORDPRESS_DB_NAME
value: wp
- name: WORDPRESS_DB_HOST
value: 127.0.0.1
- name: WORDPRESS_DB_USER
value: wordpress
- name: WORDPRESS_DB_PASSWORD
value: w0rdpr3ss
image: docker.io/library/wordpress:latest
ports:
- containerPort: 80
hostPort: 8080
protocol: TCP
resources: {}
securityContext:
allowPrivilegeEscalation: true
capabilities: {}
privileged: false
readOnlyRootFilesystem: false
seLinuxOptions: {}
workingDir: /var/www/html
- name: wptest-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
resources: {}
volumeMounts:
- mountPath: /var/lib/mysql
name: db-volume
securityContext:
allowPrivilegeEscalation: true
capabilities: {}
privileged: false
readOnlyRootFilesystem: false
seLinuxOptions: {}
workingDir: /
volumes:
- name: db-volume
hostPath:
path: /tmp/mariadb_data
type: Directory
status: {}
- 注意点
フォルダを予め作成しておく必要がある
今回ならば/tmp/mariadb_data
説明
肝となる設定が以下の2つです
volumes:
- name: db-volume
hostPath:
path: /tmp/mariadb_data
type: Directory
こちらのvolumesでVolume名と、パスを設定し、
volumeMounts:
- mountPath: /var/lib/mysql
name: db-volume
コンテナの設定のvolumeMountのところで先ほど作成したVolume名と、コンテナ内の永続化を行いたいパスの指定を行います。
確かめてみよう
http://localhost:8080
でWordpressの初期設定画面が出てくるので初期設定を済ませ、記事を1本適当に作ってみましょう
その後、
$ podman pod stop wp-pod
$ podman pod rm wp-pod
を行ってpodの削除を行いましょう。
その後、
$ podman play kube wp-pod.yml
でもう一度Podの作成を行い
http://localhost:8080
にアクセスして前と同じ記事が出てくるか確認してみましょう
最後に
一度わかるとDocker-composeとそこまで差がなくて大したことがないんですけど、この情報にたどり着くのが現状すごい大変でした。
まだまだバグも多い感じでpodmanのアップデート推奨です