このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。

【Docker基礎】Redmine+MySQLコンテナの作成と実行

Redmine+MySQLコンテナの作成と実行

 ここでは、RedmineコンテナMySQLコンテナをDocker上で作成・実行し、両者を連携させる方法について詳しく解説します。これにより、チケット管理システムであるRedmineを効率的に構築・運用するための基盤を整えることができます。以下の手順に従って、実際にコンテナを作成し、動作確認を行いましょう。

Redmineとは

 Redmineは、オープンソースのチケット管理システムであり、プロジェクト管理やバグ追跡などに広く利用されています。Redmineを利用することで、誰が何をするのかを示したToDoリストを効率的に管理できます。特に開発現場での利用が多く、チームの生産性向上に寄与します。

 RedmineもWordPressとほぼ同じ構成です。ポート番号や環境変数の名前が異なる程度で、コンテナを作成・起動する手順は非常に似ています。ここでは、RedmineとMySQLのコンテナを作成・実行し、連携させる方法を学びます。

環境設定

作成するネットワークとコンテナの情報

以下の表に、今回作成するネットワークとコンテナの詳細情報をまとめます。

項目
ネットワーク名redmine-network
MySQLコンテナ名mysql-container
MySQLイメージ名mysql:5.7
Redmineコンテナ名redmine-container
Redmineイメージ名redmine:4.2.8

使用するコマンドのオプション、対象、引数

以下に、使用する主要なコマンドとそのオプション・引数をまとめます。

ネットワークの作成

docker network create ネットワーク名
  • オプションnetwork create
  • 対象: Dockerネットワーク
  • 引数: ネットワーク名 (redmine-network)

MySQLコンテナの作成・起動

docker run
 --name コンテナ名
 -dit
 --net=ネットワーク名
 -e MYSQL_ROOT_PASSWORD=MySQLのrootパスワード
 -e MYSQL_DATABASE=データベース領域名
 -e MYSQL_USER=MySQLのユーザー名
 -e MYSQL_PASSWORD=MySQLのパスワード
 mysql:5.7
 --character-set-server=utf8mb4
 --collation-server=utf8mb4_unicode_ci
  • オプション
    --name: コンテナ名の指定
    -dit: デタッチモード、インタラクティブモード、TTYモードの組み合わせ
    --net: ネットワーク名の指定
    -e: 環境変数の設定
  • 対象: MySQLコンテナ
  • 引数
    --character-set-server: 文字コード設定(例: utf8mb4
    --collation-server: 照合順序設定(例: utf8mb4_unicode_ci

Redmineコンテナの作成・起動

docker run
 --name コンテナ名
 -dit
 --net=ネットワーク名
 -p ポートの設定
 -e REDMINE_DB_MYSQL=データベースのコンテナ名
 -e REDMINE_DB_DATABASE=データベース領域名
 -e REDMINE_DB_USERNAME=データベースのユーザー名
 -e REDMINE_DB_PASSWORD=データベースのパスワード
 redmine:4.2.8
  • オプション
    --name: コンテナ名の指定
    -dit: デタッチモード、インタラクティブモード、TTYモードの組み合わせ
    --net: ネットワーク名の指定
    -p: ポートマッピングの設定
    -e: 環境変数の設定
  • 対象: Redmineコンテナ
  • 引数: 特になし

Redmine+MySQLコンテナの作成と実行

以下に、実際にRedmineコンテナとMySQLコンテナを作成・実行する手順を詳しく解説します。

STEP1:ネットワークの作成

 まず、RedmineとMySQLが同じネットワーク内で通信できるように、カスタムネットワークを作成します。

使用するコマンド

docker network create redmine-network

実行結果

681f948fedf78c88ffdb88c32851282379452ae7e8fab3addaa031d4387da3f3

解説

 コマンド実行後、ネットワークIDが表示されます。このIDはネットワークの一意な識別子です。ネットワークが正常に作成されたことを確認するには、以下のコマンドを使用します。

docker network ls

確認例

NETWORK ID          NAME                DRIVER              SCOPE
681f948fedf7        redmine-network     bridge              local

STEP2:MySQLコンテナの作成・起動

 次に、MySQLコンテナを作成・起動します。Redmineがデータを保存するデータベースとして機能します。

使用するオプションと引数

項目オプションハンズオンでの値説明
MySQLイメージ名(なし)mysql:5.7使用するDockerイメージの名前とバージョンを指定します。
MySQLのコンテナ名--namemysql-containerコンテナに付ける名前を指定します。
実行オプション-dit(なし)コンテナをバックグラウンドでデタッチモード、インタラクティブモード、TTYモードで実行します。
MySQLのrootパスワード-e MYSQL_ROOT_PASSWORDmyrootpassMySQLのrootユーザーのパスワードを設定します。
MySQLデータベース領域名-e MYSQL_DATABASEredmine-db自動的に作成されるデータベースの名前を指定します。
MySQLユーザー名-e MYSQL_USERredmineuser新規に作成するMySQLユーザーの名前を指定します。
MySQLパスワード-e MYSQL_PASSWORDuserpass指定したMySQLユーザーのパスワードを設定します。
ポートマッピング-p3306:3306ホストとコンテナのポートをマッピングします。
リソース制限--memory512mコンテナに割り当てるメモリ量を制限します。

実行コマンド

docker run
 --name mysql-container
 -dit
 --net=redmine-network
 -e MYSQL_ROOT_PASSWORD=myrootpass
 -e MYSQL_DATABASE=redmine-db
 -e MYSQL_USER=redmineuser
 -e MYSQL_PASSWORD=userpass
 -p 3306:3306
 --memory=512m
 mysql:5.7
 --character-set-server=utf8mb4
 --collation-server=utf8mb4_unicode_ci
 --default-authentication-plugin=mysql_native_password

実行結果

PS C:\Users\joeac> docker run --name mysql-container -dit --net=redmine-network -e MYSQL_ROOT_PASSWORD=myrootpass -e MYSQL_DATABASE=redmine-db -e MYSQL_USER=redmineuser -e MYSQL_PASSWORD=userpass mysql:5.7 --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
Unable to find image 'mysql:5.7' locally
5.7: Pulling from library/mysql
20e4dcae4c69: Pull complete
1c56c3d4ce74: Pull complete
e9f03a1c24ce: Pull complete
68c3898c2015: Pull complete
6b95a940e7b6: Pull complete
90986bb8de6e: Pull complete
ae71319cb779: Pull complete
ffc89e9dfd88: Pull complete
43d05e938198: Pull complete
064b2d298fba: Pull complete
df9a4d85569b: Pull complete
Digest: sha256:4bc6bc963e6d8443453676cae56536f4b8156d78bae03c0145cbe47c2aad73bb
Status: Downloaded newer image for mysql:5.7
66636fc0835dae8b5e74ab425319a06b3de5da1b7c7b0c8323c6b2c869c72f46

解説

 コマンドが正常に実行されると、コンテナIDが表示されます。このIDはコンテナの一意な識別子であり、後でコンテナを操作する際に使用します。

コンテナの確認

docker ps

確認例

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                NAMES
66636fc0835d        mysql:5.7           "docker-entrypoint.s…"   2 minutes ago       Up 2 minutes        0.0.0.0:3306->3306/tcp mysql-container

STEP3:Redmineコンテナの作成・起動

次に、Redmineコンテナを作成・起動します。MySQLコンテナと連携して動作します。

使用するオプションと引数

項目オプション値(例)説明
Redmineイメージ名(なし)redmine:4.2.8使用するDockerイメージの名前とバージョンを指定します。
Redmineのコンテナ名--nameredmine-containerコンテナに付ける名前を指定します。
実行オプション-dit(なし)コンテナをバックグラウンドでデタッチモード、インタラクティブモード、TTYモードで実行します。
ポート番号を指定-p8080:3000ホストとコンテナのポートをマッピングします。
データベースのコンテナ名-e REDMINE_DB_MYSQLmysql-containerRedmineが接続するデータベースのホスト名を指定します。
データベース領域名-e REDMINE_DB_DATABASEredmine-db使用するデータベースの名前を指定します。
データベースのユーザー名-e REDMINE_DB_USERNAMEredmineuserデータベースに接続するユーザー名を指定します。
データベースのパスワード-e REDMINE_DB_PASSWORDuserpassデータベースユーザーのパスワードを設定します。

実行コマンド

docker run
 --name redmine-container
 -dit
 --net=redmine-network
 -p 8080:3000
 -e REDMINE_DB_MYSQL=mysql-container
 -e REDMINE_DB_DATABASE=redmine-db
 -e REDMINE_DB_USERNAME=redmineuser
 -e REDMINE_DB_PASSWORD=userpass
 redmine:4.2.8

実行結果

PS C:\Users\joeac> docker run -dit --name redmine-container --network redmine-network -p 8080:3000 -e REDMINE_DB_MYSQL=mysql-container -e REDMINE_DB_DATABASE=redmine-db -e REDMINE_DB_USERNAME=redmineuser -e REDMINE_DB_PASSWORD=userpass redmine:4.2.8
Unable to find image 'redmine:4.2.8' locally
4.2.8: Pulling from library/redmine
a603fa5e3b41: Pull complete
824cc1987b4c: Pull complete
36e7129cddea: Pull complete
7ef528e8a7a0: Pull complete
f10dbb63fac0: Pull complete
9c6f4c6b7cdb: Pull complete
178ec581438a: Pull complete
9362ee6c9614: Pull complete
802229b39e87: Pull complete
fa615e5365a6: Pull complete
cc74aaedb255: Pull complete
b17e61a68305: Pull complete
Digest: sha256:6d42fd2e25128ad6f382f80160b5167c622fac42333ffd1e4a5354990f059287
Status: Downloaded newer image for redmine:4.2.8
f15ac2801291ec2b32074beb7bce796732949ac5de4b3e10e017be7ecc1eb66e

解説

 コマンドが正常に実行されると、コンテナIDが表示されます。このIDはコンテナの一意な識別子であり、後でコンテナを操作する際に使用できます。

コンテナの確認

docker ps

確認例

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS                  NAMES
f15ac2801291        redmine:4.2.8       "docker-entrypoint.s…"   1 minute ago        Up 1 minute        0.0.0.0:8080->3000/tcp redmine-container
66636fc0835d        mysql:5.7           "docker-entrypoint.s…"   2 minutes ago       Up 2 minutes        0.0.0.0:3306->3306/tcp mysql-container

STEP4:動作確認

RedmineとMySQLのコンテナが正常に動作しているかを確認します。

ブラウザでRedmineにアクセス

ブラウザを開き、以下のURLにアクセスします。

http://localhost:8080/
  • 期待される結果: Redmineの初期設定画面が表示されます。ここで、管理者アカウントの設定やプロジェクトの作成を行います。
  • エラーが表示された場合: コマンドの入力ミスやネットワーク設定を再確認してください。特に、ポートマッピングや環境変数の設定に誤りがないか確認しましょう。

STEP5:後始末

 開発やテストが完了したら、以下の手順でコンテナやネットワークを削除し、環境をクリーンアップします。

コンテナの停止

docker stop mysql-container
docker stop redmine-container

コマンドの説明

  • docker stop: 指定したコンテナを停止します。
  • mysql-container, redmine-container: 停止するコンテナの名前です。

コンテナの削除

docker rm mysql-container
docker rm redmine-container

コマンドの説明

  • docker rm: 指定したコンテナを削除します。
  • mysql-container, redmine-container: 削除するコンテナの名前です。

イメージの削除

docker image rm mysql:5.7
docker image rm redmine:4.2.8

コマンドの説明

  • docker image rm: 指定したDockerイメージを削除します。
  • mysql:5.7, redmine:4.2.8: 削除するイメージ名とバージョンです。

ネットワークの削除

docker network rm redmine-network

コマンドの説明

  • docker network rm: 指定したDockerネットワークを削除します。
  • redmine-network: 削除するネットワークの名前です。

確認コマンド

各削除後に以下のコマンドで削除が正しく行われたことを確認します。

docker ps -a
docker image ls
docker network ls

コマンドの説明

  • docker ps -a: すべてのコンテナ(停止中も含む)の一覧を表示します。
  • docker image ls: すべてのDockerイメージの一覧を表示します。
  • docker network ls: すべてのDockerネットワークの一覧を表示します。

注意点

  • 環境変数の一致: Redmineコンテナで設定するデータベースの情報(ホスト名、データベース名、ユーザー名、パスワード)は、MySQLコンテナ起動時に設定した値と一致させる必要があります。これが一致しないと、Redmineはデータベースに接続できず、正常に動作しません。
  • ポートの競合: ホストのポート8080や3306が既に使用されている場合、別のポート番号を指定してください。例えば、-p 8081:3000-p 3307:3306のように変更します。
  • セキュリティ: 簡易的なパスワードを使用していますが、実運用環境では強固なパスワードを設定し、必要に応じて環境変数ファイルやDocker Secretsを利用してパスワードを管理することが推奨されます。
  • リソース管理: コンテナに割り当てるリソース(メモリやCPU)を適切に設定し、ホストマシンのリソースを効率的に活用してください。

まとめ

 ここでは、RedmineコンテナMySQLコンテナをDocker上で作成・実行し、両者を連携させる方法について詳しく解説しました。以下のポイントを押さえておきましょう。

  • ネットワークの作成: コンテナ同士が通信できるように、カスタムネットワークを作成します。
  • MySQLコンテナの設定: 必要な環境変数を設定し、適切なオプションを指定してMySQLコンテナを起動します。
  • Redmineコンテナの設定: MySQLコンテナと連携するための環境変数を設定し、ポートマッピングを行ってRedmineコンテナを起動します。
  • 動作確認: ブラウザを通じてRedmineにアクセスし、正常に動作していることを確認します。
  • 後始末: 使用後はコンテナやネットワークを適切に停止・削除し、環境をクリーンアップします。
  • セキュリティとリソース管理: 強固なパスワードの設定やリソース制限を行い、セキュアかつ効率的な環境を維持します。

 これらの知識を基に、実際の運用環境でもRedmineとMySQLをDocker上で効果的に管理・運用することが可能になります。次のコンテンツでは、Redmine+MariaDBコンテナの作成と実行について解説し、さらなる運用スキルを習得します。引き続き、Dockerの学習を進めていきましょう。