使用Docker Toolbox在Mac上建立Redmine

说实话,根据我的经验,如果使用以下方法 brew update && brew upgrade,有时会导致程序无法运行,非常麻烦。但是最近我发现使用虚拟机里的docker容器更方便一些。

因为我只会独自使用,所以后端用sqlite也可以,但我决定使用MariaDB。

创建 Docker Machine

我认为最好将其按用途分开,为Redmine创建一个docker machine。

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

容器群

如果希望快速建立各个容器,并且想要一个能够迅速运行的环境,在操作上可以从最后一个容器开始构建。

MariaDB 容器

如果保持初始设置,则无法使用UTF-8 = 由于无法生成日语票证,因此需要在下一个位置创建设置,并在docker运行时指定。

mkdir -p ~/docker/mariadb/redmine/conf
[mysqld]
character-set-server=utf8

请为 指定一个合适的 root 密码。

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进行管理。当需要实际进行备份时,可以按照以下步骤进行操作。

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

听说要连接到mysql时必须输入以下命令。 很长。

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"'

要查看日志,需要运行命令 docker logs mariadb。

红宝石容器

有WEBrick版和Passenger版,可以根据个人喜好选择。不得不说,Passenger版可能会稍微快一点。

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

要查看日志,也可以使用 docker logs redmine。

通过运行命令 “docker-machine ip redmine” 可以获取红宝石服务器的 IP 地址,然后使用端口 3000 进行连接。例如,访问 http://192.168.99.101:3000/。

最初的用户是 admin,密码也是 admin。然后只需要通过浏览器进行设置就行了。真方便。

使用Docker Compose半自动化地进行操作。

我之前一直都是用命令行完成到这个地步,但是如果使用Docker Compose,可以将每个容器的选项和依赖关系作为配置保存下来。

以下是两个有关Docker Compose的官方文档链接:
1. Docker Compose 入门指南:https://docs.docker.com/compose/gettingstarted/
2. Docker Compose 文件详解:https://docs.docker.com/compose/compose-file/

Docker Toolbox 集成了 Docker Compose,非常方便地使用它。

可以将下面的内容保存为 ~/docker/redmine/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/” 目录下执行 docker-compose up -d 时,所有的东西都会很好地启动起来。