이 문서는 SonarQube를 Docker 컨테이너로 설치하는 가이드를 공유하기 위해 작성되었습니다.




SonarQube 2025.1 LTA Developer Edition 버전 기준으로 작성되었습니다.


설치 요구사항

  • Docker 버전 - 20.10 이상

  • Docker Compose 버전 -  2.15.0 이상 

    • Docker 최신 버전을 설치하여 Built-in 된 Compose 버전 사용을 권장합니다.


사전 준비사항

리눅스 환경에서 SonarQube 를 설치하기 전에 다음 사항 확인 및 필요시 설정이 필요합니다.

  • 프로세스가 가질 수 있는 최대 메모리 맵 영역 수(vm.max_map_count)는 524288보다 크거나 같아야합니다.
  • 열린 파일 디스크립터(fs.file-max)의 최대 수는 131072보다 크거나 같아야합니다.

  • SonarQube 서버를 실행하는 사용자는 최소 131072 개의 파일 디스크립터(file descriptors)를 열 수 있습니다.

  • SonarQube 서버를 실행하는 사용자는 최소 8192개의 스레드(threads)를 열 수 있습니다.


Docker Container를 시스템(root) 계정으로 실행한다고 가정하고, 시스템(root) 계정 기준으로 설명


1. 다음 명령어로 현 OS - root 계정의 설정을 확인 할 수 있습니다.

$> sysctl vm.max_map_count
$> sysctl fs.file-max
$> ulimit -n
$> ulimit -u



2. 값이 위 조건에 해당하지 않는다면 다음 명령어로 값을 변경할 수 있습니다.

위 조건보다 작은 값만 변경하는 것을 권장합니다.

$> sysctl -w vm.max_map_count=524288
$> sysctl -w fs.file-max=131072
$> ulimit -n 131072
$> ulimit -u 8192



3. 위 명령어는 현재 로그인된 세션에만 적용되므로, 영구적으로 적용하기 위해서는 다음과 같은 설정이 필요합니다.

각 경로의 파일에서 다음과 같이 내용 추가 또는 수정합니다.

  • /etc/sysctl.conf

vm.max_map_count=524288
fs.file-max=131072
  • /etc/security/limits.conf

root   -   nofile   131072
root   -   nproc    8192


설치 방법

Docker Compose yaml을 사용하여 SonarQube와 PostgreSQL을 동시에 설치하고 관리하는 방법에 대한 가이드를 제공합니다.

1. SonarQube Docker Compose yaml 준비

특정 경로에 다음의 YAML 파일을 준비합니다.

  • docker-compose.yaml 예시

services:
  sonarqube:
    image: sonarqube:2025-lta-developer # SonarQube 버전 지정
    hostname: sonarqube
    container_name: sonarqube
    depends_on:
      db:
        condition: service_healthy
    environment:
      SONAR_JDBC_URL: jdbc:postgresql://db:5432/sonar
      SONAR_JDBC_USERNAME: sonar
      SONAR_JDBC_PASSWORD: sonar
      # 선택사항(각 엔진별 Heap 사이즈 설정)
      SONAR_WEB_JAVAOPTS: "-Xms1024m -Xmx1024m"
      SONAR_CE_JAVAOPTS: "-Xms1024m -Xmx1024m"
      SONAR_SEARCH_JAVAOPTS: "-Xms1024m -Xmx1024m"
    volumes: # VM의 데이터영역 지정
      - sonarqube_data:/opt/sonarqube/data
      - sonarqube_extensions:/opt/sonarqube/extensions
      - sonarqube_logs:/opt/sonarqube/logs
      - sonarqube_temp:/opt/sonarqube/temp
    ports:
      - "9000:9000"
    networks: # 선택사항
      - ${NETWORK_TYPE:-ipv4}
    restart: always
  db:
    image: postgres:15
    healthcheck:
      test: ["CMD-SHELL", "pg_isready"]
      interval: 10s
      timeout: 5s
      retries: 5
    hostname: postgresql
    container_name: postgresql
    environment:
      POSTGRES_USER: sonar
      POSTGRES_PASSWORD: sonar
      POSTGRES_DB: sonar
    volumes:
      - postgresql:/var/lib/postgresql
      - postgresql_data:/var/lib/postgresql/data
    networks: # 선택사항
      - ${NETWORK_TYPE:-ipv4}
    restart: always

volumes:
  sonarqube_data:
  sonarqube_temp:
  sonarqube_extensions:
  sonarqube_logs:
  postgresql:
  postgresql_data:
  
# 위 networks 속성을 사용하지 않을 경우 아래 설정 불필요
networks:
  ipv4:
    driver: bridge
    enable_ipv6: false
  dual:
    driver: bridge
    enable_ipv6: true
    ipam:
      config:
        - subnet: "192.168.2.0/24"
          gateway: "192.168.2.1"
        - subnet: "2001:db8:2::/64"
          gateway: "2001:db8:2::1"


SonarQube 특정 버전 설치 시,

1. 특정 버전의 SonarQube 및 PostgreSQL 설치 시, 아래 링크를 통해 다운로드를 받을 수 있습니다.


2. 상위 Docker compose yaml에서 image: sonarqube:2025-lta-developer, image: postgres:15 부분에 해당 버전으로 수정이 필요합니다.

sonarqube:
    // image: sonarqube:latest
    // image: sonarqube:2025-lta-enterprise
    image: sonarqube:2025-lta-developer


2. docker-compose.yaml을 통한 컨테이너 실행 방법

docker-compose.yaml 파일이 위치한 경로에서 다음 명령어를 수행합니다.

# docker-compose.yaml 기반으로 컨테이너 실행
$> docker compose up -d 

# 컨테이너 확인
$> docker ps


3. SonarQube 웹 접속 확인

브라우저에서 다음과 같이 설정한 IP:포트로 접속하여 초기 Setup을 수행합니다. 

운영 시스템의 경우 앞단에 Nginx 등을 구성하여 Reverse Proxy 구성으로 SSL 도메인을 사용하는 것을 권장합니다.


참고 문서


  • 레이블 없음