背景
redmineを立ち上げる時に他のサーバーのコンテナがたくさんあって判別が大変だったのでpodmanの機能であるpodを用いてコンテナをまとめてみたのがきっかけとなります。
環境
OS
OS:CentOS Stream8
podman
podman:podman version 4.8.3
コンテナ
redmine:5.1.1(記事執筆時 最新)
mysql:5.7
構築
以下の順で構築しました。
- redmine用のpodを作成:redmine-pod
- mysqlのコンテナを redmine-pod 内に作成
- redmineのコンテナを redmine-pod 内に作成
※ コマンド投入はすべてroot権限で投入しています。
redmine用のpodを作成
まずは redmine 用の pod を作成します。
pod 作成時に pod へアクセスする際のポートを必要であれば指定します。
[root@centos8 ~]# podman pod create --name redmine-pod -p 8081:3000
redmine のデフォルトはポート3000番ですが、今回は例としてpod外からポート8081番を指定することで3000番にアクセスするように移行させます。
- podman pod create:pod作成
- --name redmine-pod:pod名を redmine-pod に指定
- -p 8081:3000:pod内の3000番ポートを8081ポートに移行
以下のように「podman pod ls」を投入することで作成したpodを参照できます。
[root@centos8 ~]# podman pod ls
POD ID NAME STATUS CREATED INFRA ID # OF CONTAINERS
xxxxxxxxxxxx redmine-pod Created 15 minutes ago yyyyyyyyyyyy 1
mysqlのコンテナを redmine-pod 内に作成
redmine 内のデータを保存するために、mysql を先に作成した redmine-pod 内へ立てます。
コマンドは以下を投入します。
podman run -d --name redmine-db \
--pod redmine-pod \
-e MYSQL_ROOT_PASSWORD=redminepass \
-e MYSQL_DATABASE=redmine \
mysql:5.7
- podman run -d:コンテナ起動
- --name redmine-db:コンテナの名前指定(redmine-db)
- --pod redmine-pod:コンテナの起動先のpod指定
- -e:環境変数指定
- mysql:5.7:mysqlのバージョン指定
pod を確認すると「# OF CONTAINERS」が2つになっています。
[root@centos8 ~]# podman pod ls
POD ID NAME STATUS CREATED INFRA ID # OF CONTAINERS
xxxxxxxxxxxx redmine-pod Running 18 minutes ago yyyyyyyyyyyy 2
「podman container ls」を投入するとコンテナが参照できます。
mysql:5.7 の redmine-db が作成されているのがわかります。
(yyyyyyyyyyyy-infra は pod を作成した際のコンテナ)
[root@centos8 ~]# podman container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
xxxxxxxxxxxx localhost/podman-pause:4.8.3-zzzzzzzzzz 19 minutes ago Up 9 seconds 0.0.0.0:8081->3000/tcp yyyyyyyyyyyy-infra
xxxxxxxxxxxx docker.io/library/mysql:5.7 mysqld 9 seconds ago Up 8 seconds 0.0.0.0:8081->3000/tcp redmine-db
redmineのコンテナを redmine-pod 内に作成
では、いよいよ redmine 本体を先に作成した redmine-pod 内へ立てます。
コマンドは以下を投入します。
podman run -d \
--name redmine \
--pod redmine-pod \
-e REDMINE_DB_MYSQL=redmine-db \
-e REDMINE_DB_PASSWORD=redminepass \
-e REDMINE_PLUGINS_MIGRATE=true \
redmine
※ 同じ設定箇所については説明省略
「-e REDMINE_DB_MYSQL=redmine-db」
上記環境変数に先ほど立てたmysqlの「redmine-db」を指定することで redmine が mysql を見に行きます。
(pod 内では IP が pod に振られることからコンテナはすべて pod の IP となるようです。そのため pod 内の通信はコンテナ名を指定することで対象を判断します。)
podを確認すると「# OF CONTAINERS」が3つになっています。
[root@centos8 ~]# podman pod ls
POD ID NAME STATUS CREATED INFRA ID # OF CONTAINERS
xxxxxxxxxxxx redmine-pod Running 30 minutes ago yyyyyyyyyyyy 3
コンテナを確認すると最新の redmine のコンテナが作成されています。
(この時は redmine:5.1.1)
[root@centos8 ~]# podman container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
xxxxxxxxxxxx localhost/podman-pause:4.8.3-zzzzzzzzzz 39 minutes ago Up 20 minutes 0.0.0.0:8081->3000/tcp yyyyyyyyyyyy-infra
xxxxxxxxxxxx docker.io/library/mysql:5.7 mysqld 20 minutes ago Up 20 minutes 0.0.0.0:8081->3000/tcp redmine-db
xxxxxxxxxxxx docker.io/library/redmine:latest rails server -b 0... 8 minutes ago Up 8 minutes 0.0.0.0:8081->3000/tcp redmine
redmineの起動確認
ここまで出来たら以下のようにコンテナを立てたホストのIPアドレスにポート8081番を指定してアクセスしてみてください。
http://<ホストのIPアドレス>:8081/
以下のように画面が出てきたら成功となります。
※ 作成直後だと画面表示まで時間がかかり、「このサイトにアクセスできません」と出てくることがありますが、しばらく(5分ほど??)すると表示されます。
デフォルトの設定は以下。
redmineの停止・起動
redmine停止
redmine-pod を停止させる際は以下のコマンドを投入します。
[root@centos8 ~]# podman pod stop redmine-pod
redmine-pod の「STATUS」が「Exited」となっています。
[root@centos8 ~]# podman pod ls
POD ID NAME STATUS CREATED INFRA ID # OF CONTAINERS
xxxxxxxxxxxx redmine-pod Exited 15 minutes ago yyyyyyyyyyyy 3
redmine-pod 内のコンテナもすべて停止しています。
[root@centos8 ~]# podman container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
redmine起動
redmine-pod を起動させる際は以下のコマンドを投入します。
[root@centos8 ~]# podman pod start redmine-pod
redmine-pod の「STATUS」が「Running」となっています。
[root@centos8 ~]# podman pod ls
POD ID NAME STATUS CREATED INFRA ID # OF CONTAINERS
xxxxxxxxxxxx redmine-pod Running 20 minutes ago yyyyyyyyyyyy 3
redmine-pod 内のコンテナもすべて起動しています。
[root@centos8 ~]# podman container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
xxxxxxxxxxxx localhost/podman-pause:4.8.3-zzzzzzzzzz 21 minutes ago Up About a minute 0.0.0.0:8081->3000/tcp yyyyyyyyyyyy-infra
xxxxxxxxxxxx docker.io/library/mysql:5.7 mysqld 21 minutes ago Up About a minute 0.0.0.0:8081->3000/tcp redmine-db
xxxxxxxxxxxx docker.io/library/redmine:latest rails server -b 0... 21 minutes ago Up About a minute 0.0.0.0:8081->3000/tcp redmine
おまけ
作成した pod をyamlファイルに保存し、起動する方法
作成した pod と内部のコンテナは以下のコマンドで Kubernetes 用の yaml ファイルに保存することができます。
[root@centos8 ~]# podman generate kube redmine-pod > redmine-pod.yaml
以下、内容。
redmine-pod.yaml
# Save the output of this file and use kubectl create -f to import
# it into Kubernetes.
#
# Created with podman-4.8.3
apiVersion: v1
kind: Pod
metadata:
creationTimestamp: "****-**-*****:**:***"
labels:
app: redmine-pod
name: redmine-pod
spec:
containers:
- args:
- mysqld
env:
- name: MYSQL_ROOT_PASSWORD
value: redminepass
- name: MYSQL_DATABASE
value: redmine
image: docker.io/library/mysql:5.7
name: redmine-db
ports:
- containerPort: 3000
hostPort: 8081
volumeMounts:
- mountPath: /var/lib/mysql
name: <マウント先のvolumes名1>
- args:
- rails
- server
- -b
- 0.0.0.0
env:
- name: REDMINE_DB_PASSWORD
value: redminepass
- name: REDMINE_PLUGINS_MIGRATE
value: "true"
- name: REDMINE_DB_MYSQL
value: redmine-db
image: docker.io/library/redmine:latest
name: redmine
volumeMounts:
- mountPath: /usr/src/redmine/files
name: <マウント先のvolumes名2>
volumes:
- name: <マウント先のvolumes名1>
persistentVolumeClaim:
claimName: <マウント先のvolumes名1で指定したデータの格納先ディレクトリ名>
- name: <マウント先のvolumes名2>
persistentVolumeClaim:
claimName: <マウント先のvolumes名2で指定したデータの格納先ディレクトリ名>
マウント先のvolumesの格納先は以下となります。
(人によって異なる可能性あり)
[root@centos8 volumes]# pwd
/var/lib/containers/storage/volumes
また、作成した yaml ファイルに対して以下のコマンドで指定し、投入することで pod を create やコンテナを run しなくても本環境を作成することができます。
[root@centos8 redmine]# podman kube play redmine-pod.yaml
pod 内の設定を見る方法
以下のコマンドを投入することで pod の設定を確認できます。
※ コンテナも同様。
[root@centos8 ~]# podman inspect <pod名 OR コンテナ名>
pod 内のログを見る方法
pod の場合
[root@centos8 ~]# podman pod logs <pod名>
コンテナの場合
[root@centos8 ~]# podman container logs <コンテナ名>
参考
以下を参考にしました。