よっしー
こんにちは。よっしーです(^^)
今日は、dockerで作るRedmine環境について解説しています。
背景
dockerで作るRedmine環境について調査する機会がありましたので、その時の内容を備忘として記事に残しました。
構成ファイル一覧
下記のファイルを用意します。各ファイルの内容は次のセクションもしくは、次回以降の記事に記載しています。
new file: redmine/Dockerfile
new file: mysql/Dockerfile
new file: compose.yml
new file: Makefile
compose.yml
services:
redmine:
build: ./redmine
container_name: redmine
ports:
- 8080:3000
environment:
TZ: Asia/Tokyo
REDMINE_DB_MYSQL: redmine_mysql
REDMINE_DB_DATABASE: redmine
REDMINE_DB_USERNAME: redmine_admin
REDMINE_DB_PASSWORD: P@ssw0rd
REDMINE_DB_ENCODING: utf8mb4
volumes:
- ./redmine/src/plugins:/usr/src/redmine/plugins
- ./redmine/src/themes:/usr/src/redmine/public/themes
depends_on:
redmine_mysql:
condition: service_healthy
networks:
- net
redmine_mysql:
build: ./mysql
container_name: redmine-mysql
environment:
TZ: Asia/Tokyo
MYSQL_ROOT_PASSWORD: P@ssw0rd
MYSQL_DATABASE: redmine
MYSQL_USER: redmine_admin
MYSQL_PASSWORD: P@ssw0rd
healthcheck:
test: "mysqladmin ping -h 127.0.0.1 -u root -p$$MYSQL_ROOT_PASSWORD"
timeout: 5s
interval: 5s
retries: 10
networks:
- net
networks:
net:
このコードは、Docker Composeを使ってRedmineとMySQLのコンテナを構築するための設定ファイルです。
redmine:
- Redmineのコンテナを作成します。
- ビルドコンテキストは ./redmine ディレクトリです。
- コンテナ名は redmine です。
- ポート 8080 をホストにバインドし、コンテナ内部の 3000 番ポートにマップします。
- 環境変数を設定します(タイムゾーン、DB接続情報など)。
- Redmineのプラグインとテーマのディレクトリをコンテナ内にマウントします。
- redmine_mysqlコンテナが健全な状態になるまで待機します。
- netというDockerネットワークに接続します。
redmine_mysql:
- MySQLのコンテナを作成します。
- ビルドコンテキストは ./mysql ディレクトリです。
- コンテナ名は redmine-mysql です。
- 環境変数を設定します(タイムゾーン、rootパスワード、DB名、ユーザー名、パスワードなど)。
- healthcheckを設定し、MySQLが適切に起動したことを確認します。
- netというDockerネットワークに接続します。
networks:
net:
- netという名前のbridge ネットワークを作成します。redmineとredmine_mysqlコンテナはこのネットワークで通信します。
healthcheckについて
このコードは、Docker Composeの設定ファイルにおいて、MySQLコンテナの健全性をチェックするための healthcheck
セクションを定義しています。
healthcheck
は、コンテナの健全性を監視し、コンテナが正常に動作しているかどうかを確認するための機能です。この設定は、コンテナが起動した後に実行されます。
それぞれの設定項目の説明は以下の通りです。
test: "mysqladmin ping -h 127.0.0.1 -u root -p$$MYSQL_ROOT_PASSWORD"
- この行は、コンテナの健全性をチェックするためのコマンドを指定しています。
mysqladmin ping
は、MySQLサーバーに対してping操作を実行し、サーバーが応答するかどうかを確認します。-h 127.0.0.1
は、MySQLサーバーがローカルホスト(127.0.0.1)に存在することを指定しています。-u root
は、ルートユーザーでMySQLに接続することを指定しています。-p$$MYSQL_ROOT_PASSWORD
は、ルートユーザーのパスワードを指定しています。$$MYSQL_ROOT_PASSWORD
は、環境変数MYSQL_ROOT_PASSWORD
の値を参照しています。
timeout: 5s
- この行は、healthcheckコマンドのタイムアウト時間を5秒に設定しています。つまり、コマンドが5秒以内に実行されない場合、healthcheckは失敗と見なされます。
interval: 5s
- この行は、healthcheckコマンドの実行間隔を5秒に設定しています。つまり、5秒ごとにhealthcheckコマンドが実行されます。
retries: 10
- この行は、healthcheckコマンドが失敗した場合の再試行回数を10回に設定しています。つまり、healthcheckコマンドが10回連続で失敗した場合、コンテナは健全でないと見なされ、再起動されます。
この healthcheck
の設定は、MySQLコンテナが正常に起動し、MySQLサーバーが応答できる状態になるまで待機するために使用されています。healthcheckコマンドが成功すると、MySQLコンテナは健全であると見なされ、Redmineコンテナなどの依存するコンテナが起動します。
おわりに
今日は、dockerで作るRedmine環境について解説しました。
次回以降もdockerの構成ファイルについて説明していきたいと思います。
よっしー
何か質問や相談があれば、コメントをお願いします。また、エンジニア案件の相談にも随時対応していますので、お気軽にお問い合わせください。
それでは、また明日お会いしましょう(^^)
コメント