Docker Toolbox で Mac に Redmine をたてる

実を言うと次の方法だと <kbd>brew update && brew upgrade</kbd> すると動かなくなる場合があっていろいろ面倒だったんだけど最近は vm で docker で container だよねということで以下略。

http://qiita.com/janus_wel/items/06dae0dec1ff1a886d54

ひとりでしか使わないからバックエンドは sqlite でもいいんだけど、 MariaDB を使うことにする。

docker machine 作成
-------------------

できるだけ用途別にわけたほうが楽だと思うので Redmine 用の docker machine をつくる。

```sh
docker-machine create --driver virtualbox redmine
eval "$(docker-machine env redmine)"
```

コンテナー群
------------

以下、各コンテナーを順に作っていくけど手っ取り早く動く環境がほしいという場合は一番最後からみていくといい。

### MariaDB コンテナー

https://hub.docker.com/_/mariadb/

初期設定のままだと UTF-8 が使えない = 日本語のチケットが切れないので設定を次の位置に作って docker run 時に指定する。

```sh
mkdir -p ~/docker/mariadb/redmine/conf
```

```conf:utf8.cnf
[mysqld]
character-set-server=utf8
```

&lt;password-for-root&gt; には適当に root のパスワードを指定すること。

```sh
docker run                                              \
    -d                                                  \
    --name mariadb                                      \
    -v ~/docker/mariadb/redmine/conf:/etc/mysql/conf.d  \
    -v /var/lib/mysql                                   \
    -e MYSQL_ROOT_PASSWORD=<password-for-root>          \
    -e MYSQL_DATABASE=redmine                           \
    --restart always                                    \
    mariadb:latest
```

/var/lib/mysql 以下にデータが格納されるのでバックアップを取りやすいように docker volume にしてる。
で、実際にバックアップをとるときはこう。

```sh
docker run --rm --volumes-from mariadb -v $(pwd):/backup centos tar czvf /backup/backup.tar.gz /var/lib/mysql
```

mysql でつなぎたいときは次のコマンドを打たないといけないみたい。長い。

```sh
docker run                  \
    -it                     \
    --link mariadb:mysql    \
    --rm                    \
    mariadb:latest          \
    sh -c 'exec mysql -h"$MYSQL_PORT_3306_TCP_ADDR" -P"$MYSQL_PORT_3306_TCP_PORT" -uroot -p"$MYSQL_ENV_MYSQL_ROOT_PASSWORD"'
```

ログを確認するには <kbd>docker logs mariadb</kbd> 。

### Redmine コンテナー

https://hub.docker.com/_/redmine/

WEBrick 版と Passenger 版があるんだけど好みで。 Passenger 版のほうがちょっと速い気がしないでもない。

```sh
docker run                      \
    -d                          \
    -p 3000:3000                \
    --name redmine              \
    -v /usr/src/redmine/files   \
    --link mariadb:mysql        \
    --restart always            \
    redmine:passenger
```

こちらもログを確認するには <kbd>docker logs redmine</kbd> 。

<kbd>docker-machine ip redmine</kbd> でつなぐ先の IP アドレスがわかるのでポート 3000 でつなぎにいく。たとえば http://192.168.99.101:3000/ 。

初期ユーザーは admin 、パスワードも admin 。あとはブラウザーから設定すればいい。楽だね。

Docker Compose で半自動化する
-----------------------------

ここまで全部コマンドでやってきたけど Docker Compose を使うと各コンテナーのオプションや依存関係を設定として保存できる。

https://docs.docker.com/compose/gettingstarted/
https://docs.docker.com/compose/compose-file/

Docker Toolbox には Docker Compose も同梱されているのでありがたく使わせてもらう。

次の内容をたとえば ~/docker/redmine/docker-compose.yml として保存しておく。

```yml:docker-compose.yml
mariadb:
  image: mariadb:latest
  container_name: mariadb
  volumes:
    - ~/docker/mariadb/redmine/conf:/etc/mysql/conf.d
    - /usr/lib/mysql
  environment:
      MYSQL_ROOT_PASSWORD: <password for root>
      MYSQL_DATABASE: redmine
  restart: always
redmine:
  image: redmine:passenger
  container_name: redmine
  ports:
    - 3000:3000
  volumes:
    - /usr/src/redmine/files
  links:
    - mariadb:mysql
  restart: always
```

で、 ~/docker/redmine/ で <kbd>docker-compose up -d</kbd> すると全部いい感じで立ち上がってくれる。