RedmineをDocker上で動かす¶
Docker(コンテナ)について¶
コンテナの解説はいろいろありますが、1つのアプリケーションプログラムを動かすのに必要な環境を1つにまとめて独立して構成・配布・実行できるようにする技術と理解しています。
独立して、の意味は、アプリケーションを実行する計算機上で他のアプリケーションの環境から隔離することで、他のアプリケーションが計算機の設定・パッケージをいじってもその影響を受けないことです。Ruby 3.1で実行するアプリケーションがあったとして、他のアプリケーションがRuby 3.4を使用するため、計算機のRubyバージョンを勝手にアップデートしたとしても、コンテナ化していればコンテナが持つRuby 3.1を継続して使用し続けることで影響を受けないようにします。
はじめの一歩¶
Redmine単体¶
まずは、Redmine単体をDockerコンテナで実行することから始めます。Redmineに付属のSQLiteデータベースを使用し、同じく付属のアプリケーションサーバーPumaを使用します。
Dockerコンテナ化されたアプリケーションを実行するには、Docker imageを用意する必要があります。
一番簡単なのは、docker hubと呼ぶリポジトリに置かれているすでに用意されたdocker imageを実行することです。
~$ docker container run -d -p 3000:3000 --name redmine-trial redmine:6.0.3
dockerコマンドrunは、imageを取得してコンテナを生成し、実行するところまでを一気に行います。
- SQLiteをDBに使用し、Pumaをサーバーに使用するRedmineが起動
- ホストのポート3000をコンテナ上のPumaサーバーのポート3000に接続
- 初期アカウントは、
admin|admin
で、ログインするとパスワード変更を求められる
ホストコンピューターのポート3000にhttp接続すると、コンテナのポート3000に接続され、Redmineが表示されます。
この公式Redmine docker imageを使用すると、コンテナのディレクトリツリーは次のようになっています。
/usr/src/redmine/ +-- app +-- bin +-- config +-- db +-- doc +-- extra +-- files +-- lib +-- log +-- plugins +-- public +-- sqlite +-- test +-- themes +-- tmp +-- vendor
rubyは、/usr/local/{bin, lib} の下にコマンド、ライブラリが収容されています。
Redmine + PostgreSQL¶
Dockerは、1つのアプリケーションソフトウェアを1つのコンテナとして実行するのが定番です。Redmineは、Ruby on Railsアプリケーションとデータベースソフトウェアから構成されるので、2つのコンテナを実行する構成となります。
- 注)RedmineをWebサーバー(Nginxなど)と組み合わせる場合、さらにコンテナを用意することになると思います
コンテナを破棄すると、データも失われます。コンテナの破棄は、コンテナイメージの更新時に発生し、例えば Redmine 6.0.0→6.0.1への更新が該当します。
そこで、コンテナのデータを永続化するために、bindマウント、あるいは volumeマウントを使用します。
- bindマウント:ホストOSの一部をコンテナからアクセスできるようにコンテナにマウントする。ホストOSおよびコンテナの双方からファイルをアクセス可能
- volumeマウント:Dockerの管理領域の一部をコンテナにマウントする。ホストOSからはアクセスできない。
ホストOSと共有の必要がないなら、volumeマウントを使用します。
PostgreSQL¶