はじめに
過去にHomebrewでmacにSonarQubeを構築していました。
SonarQubeをGradleから起動する
今回、docker-composeから起動するように設定しました。
やりたいこと
- docker-composeでMySqlを起動(WebApp用)
- docker-composeでMySqlを起動(SonarQube用)
- docker-composeでSonarQubeを起動
順序とか
- Mysqlの立ち上げ
- Create Database × 2
- Create User
- SonarQubeの起動
成果物
- docker
- [mysql]
- [conf]
- custom.cnf
- [init]
- 1_create_db.sql
- 2_create_user.sql
- 3_grant.sql
- [conf]
- [sonarqube]
- docker-compose.yml
- [mysql]
./docker-compose.yml
version: '3.5'
services:
mysql:
image: mysql:5.7.21
container_name: mysql
ports:
- 3306:3306
volumes:
- ./mysql/init:/docker-entrypoint-initdb.d
- ./mysql/conf/:/etc/mysql/conf.d
networks:
- sonarnet
environment:
MYSQL_ROOT_PASSWORD: root
restart: always
sonarqube:
image: sonarqube:7.0
container_name: sonarqube
depends_on:
- mysql
volumes:
- sonarqube_conf:/opt/sonarqube/conf
- sonarqube_data:/opt/sonarqube/data
- sonarqube_extensions:/opt/sonarqube/extensions
- sonarqube_bundled-plugins:/opt/sonarqube/lib/bundled-plugins
networks:
- sonarnet
command: -Dsonar.web.context=/sonarqube
ports:
- 9000:9000
- 9092:9092
environment:
- SONAR_JDBC_USERNAME=sonar
- SONAR_JDBC_PASSWORD=sonar
- SONAR_JDBC_URL=jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8
restart: always
networks:
sonarnet:
driver: bridge
volumes:
sonarqube_conf:
sonarqube_data:
sonarqube_extensions:
sonarqube_bundled-plugins:
./mysql/conf/custom.cnf
[mysqld]
character-set-server=utf8
lower_case_table_names=1
explicit_defaults_for_timestamp=true
./mysql/init/1_create_db.sql
-- WebApp用
CREATE DATABASE IF NOT EXISTS items DEFAULT CHARACTER SET UTF8;
-- SonarQube用
CREATE DATABASE IF NOT EXISTS sonar DEFAULT CHARACTER SET UTF8;
./mysql/init/2_create_user.sql
CREATE USER 'sonar' IDENTIFIED BY 'sonar';
./mysql/init/3_grant.sql
GRANT ALL ON sonar.* TO 'sonar'@'%' IDENTIFIED BY 'sonar';
GRANT ALL ON sonar.* TO 'sonar'@'localhost' IDENTIFIED BY 'sonar';
FLUSH PRIVILEGES;
起動方法
コマンド
$ cd docker
$ docker-compose -f docker-compose.yml build
$ docker-compose -f docker-compose.yml up -d
停止方法
コマンド
$ cd docker
$ docker-compose -f docker-compose.yml stop
つまったところ
MySql編(複数DatabaseCreateが実行されない)
/docker-entrypoint-initdb.d
にマウントした際、
その配下に.sh
,.sql
ファイルが存在していたら実行してくれるみたい。
docker-entrypoint.sh
なのに全然動かない。。。
動かないdocker-compose.yml
services:
mysql:
image: mysql:5.7.21
container_name: mysql
ports:
- 3306:3306
volumes:
- ./mysql/init:/docker-entrypoint-initdb.d
- ./mysql/conf/:/etc/mysql/conf.d
command: mysqld --lower_case_table_names=1 --skip-ssl
environment:
MYSQL_ROOT_PASSWORD: root
restart: always
解決策として、command
フィールドを削除しました。
SonarQube編(Connectionが繋がらない)
ネットで漁った設定をしてみる。
-> Connectionが通らない
動かないdocker-compose.yml
services:
sonarqube:
image: sonarqube:7.0
container_name: sonarqube
depends_on:
- mysql
volumes:
- sonarqube_conf:/opt/sonarqube/conf
- sonarqube_data:/opt/sonarqube/data
- sonarqube_extensions:/opt/sonarqube/extensions
- sonarqube_bundled-plugins:/opt/sonarqube/lib/bundled-plugins
networks:
- sonarnet
command: -Dsonar.web.context=/sonarqube
ports:
- 9000:9000
- 9092:9092
environment:
- SONARQUBE_JDBC_USERNAME=sonar
- SONARQUBE_JDBC_PASSWORD=sonar
- SONARQUBE_JDBC_URL=jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8
restart: always
解決策として、environment
フィールド内のSONARQUBE_
プロパティをSONAR_
に変更しました。
公式開いてもSONARQUBE_
になってる。なぜこれで動く。。。
Dockerfile