0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

podmanを使ってredmineで使用するコンテナをpodでまとめて起動・停止させてみる

Last updated at Posted at 2024-02-25

背景

redmineを立ち上げる時に他のサーバーのコンテナがたくさんあって判別が大変だったのでpodmanの機能であるpodを用いてコンテナをまとめてみたのがきっかけとなります。

環境

OS

OS:CentOS Stream8

podman

podman:podman version 4.8.3

コンテナ

redmine:5.1.1(記事執筆時 最新)
mysql:5.7

構築

以下の順で構築しました。

  1. redmine用のpodを作成:redmine-pod
  2. mysqlのコンテナを redmine-pod 内に作成
  3. 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分ほど??)すると表示されます。

デフォルトの設定は以下。

  • ユーザ:パスワード
  • admin:admin
    image.png

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 <コンテナ名>

参考

以下を参考にしました。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?