LoginSignup
4
3

More than 5 years have passed since last update.

SonarQubeをdocker-composeで構築する

Posted at

はじめに

過去にHomebrewでmacにSonarQubeを構築していました。
SonarQubeをGradleから起動する
今回、docker-composeから起動するように設定しました。

やりたいこと

  1. docker-composeでMySqlを起動(WebApp用)
  2. docker-composeでMySqlを起動(SonarQube用)
  3. docker-composeでSonarQubeを起動

順序とか

  1. Mysqlの立ち上げ
  2. Create Database × 2
  3. Create User
  4. SonarQubeの起動

成果物

  • docker
    • [mysql]
      • [conf]
        • custom.cnf
      • [init]
        • 1_create_db.sql
        • 2_create_user.sql
        • 3_grant.sql
    • [sonarqube]
    • docker-compose.yml
./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

参考リンク

4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3