はじめに
Kanon, Jenkins, MariaDBのコンテナ化ができたので、これらのコンテナをまとめて扱う方法を作ってみました。Kanonの世界なら、「お友達のHud美さん、マリアちゃんと楽団を作ったよ。」ってかんじでしょうか。
docker, docker-composeのセットアップ済で、データの永続化などについてある程度の知識があることを前提にしています。
構成
リポジトリ
リポジトリは https://bitbucket.org/okazakiyuji/kanonorchestra/src/default/ です
ファイル/フォルダ
ファイルはイメージ化しているので意外に少ないです。
ファイル/フォルダ名 | 内容 |
---|---|
.env | proxy設定をコンテナに渡す |
create-env.sh | proxy設定をもとに.envを作る |
docker-compose.yml | コンテナを起動するためのファイル |
jenkins_home | jenkinsのプロジェクトとHud美さんなど マウントして使用 |
主に変更するファイルのdocker-compose.ymlを見てみましょう。リポジトリの中のものはデータの永続化に必要なVolume関連はすべてコメントにしてあります。次にあげるのはVolumeのコメントを外した例です。
version: '2'
services:
db01:
image: okazakiyuji/mariadb
volumes:
- db01-data:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=kanonrpw
- TZ="Asia/Tokyo"
restart: always
kanon01:
image: okazakiyuji/kanoncontainer:v0.2b1
hostname: kanon01
volumes:
- kanon01-opt:/opt/kanon
- kanon01-etc:/etc/opt/kanon
- kanon01-var:/var/opt/kanon
- kanon01-auth:/etc/opt/auth
environment:
- MYSQL_HOST=db01
- MYSQL_PORT=3306
- MYSQL_USER=root
- MYSQL_USER_PASSWORD=kanonrpw
- KANON_HOST=kanon01
env_file: .env
ports:
- "8001:80"
links:
- db01
restart: always
jenkins:
image: okazakiyuji/jenkins
links:
- kanon01
hostname: jenkins
env_file: .env
ports:
- "8088:8080"
volumes:
- ./jenkins_home:/var/jenkins_home:rw
restart: always
volumes:
db01-data:
driver: local
kanon01-opt:
driver: local
kanon01-var:
driver: local
kanon01-etc:
driver: local
kanon01-auth:
driver: local
サービスをコピーしてポートなどぶつからないようにしていただければ複数のサービスを起動することも可能です。
コンテナ(サービス)
サービス名 | 内容 |
---|---|
db01 | MariaDB TracプロジェクトのDB用 |
Kanon01 | Apache+Trac+SVN/HG/Git |
Jenkins | ほぼJenkinsの標準コンテナです |
使い方
- まずはリポジトリからファイルを取得します
hg clone https://okazakiyuji@bitbucket.org/okazakiyuji/kanonorchestra
- proxyが必要な環境ではcreate-env.shを実行し.envファイルを作成します
- docker-compose.ymlを編集します
- コンテナを起動します
docker-compose up -d
- サンプルプロジェクトを作成します
docker-compose exec kanon01 /tmp/create-sample-project.sh
- プロジェクトを作成します
次のコマンドを実行して質問に答えていってください
docker-compose exec kanon01 /opt/kanon/bin/kanon-create-project プロジェクト名
- ブラウザでサーバ:ポート8001に接続しTracが動いていることを確認してください
- ブラウザでサーバ:ポート8088に接続しJenkinsが動いていることを確認してください
複数プロジェクト
Kanonは標準で複数プロジェクトに対応していますが、隣のプロジェクトがインストールしたプラグインや登録ユーザの影響を受けないようにするために1仮想マシンに数プロジェクトに抑える運用することが多いと思います。今回はコンテナになっているので、docker-composeファイルのkanon01コンテナをコピーして02,03と増やすだけで済みます。次にKanon2コンテナ構成のdocker-compose.ymlがいるを挙げています。これを参考にしてください。
version: '2'
services:
db01:
image: okazakiyuji/mariadb
volumes:
- db01-data:/var/lib/mysql
environment:
- MYSQL_ROOT_PASSWORD=kanonrpw
- TZ="Asia/Tokyo"
restart: always
kanon01:
image: okazakiyuji/kanoncontainer:v0.2b2
hostname: kanon01
volumes:
- kanon01-opt:/opt/kanon
- kanon01-etc:/etc/opt/kanon
- kanon01-var:/var/opt/kanon
- kanon01-auth:/etc/opt/auth
environment:
- MYSQL_HOST=db01
- MYSQL_PORT=3306
- MYSQL_USER=root
- MYSQL_USER_PASSWORD=kanonrpw
- KANON_HOST=kanon01
env_file: .env
ports:
- "8001:80"
links:
- db01
restart: always
kanon02:
image: okazakiyuji/kanoncontainer:v0.2b2
hostname: kanon02
volumes:
- kanon02-opt:/opt/kanon
- kanon02-etc:/etc/opt/kanon
- kanon02-var:/var/opt/kanon
- kanon02-auth:/etc/opt/auth
environment:
- MYSQL_HOST=db01
- MYSQL_PORT=3306
- MYSQL_USER=root
- MYSQL_USER_PASSWORD=kanonrpw
- KANON_HOST=kanon01
env_file: .env
ports:
- "8002:80"
links:
- db01
restart: always
jenkins:
image: okazakiyuji/jenkins
links:
- kanon01
hostname: jenkins
env_file: .env
ports:
- "8088:8080"
volumes:
- ./jenkins_home:/var/jenkins_home:rw
restart: always
volumes:
db01-data:
driver: local
kanon01-opt:
driver: local
kanon01-var:
driver: local
kanon01-etc:
driver: local
kanon01-auth:
driver: local
kanon02-opt:
driver: local
kanon02-var:
driver: local
kanon02-etc:
driver: local
kanon02-auth:
driver: local
これから
とりあえずは、マウントしているボリュームをバックアップしておけば大丈夫ですが、私がやっている方法をもう少し使えないか検討中です。