After installing Docker, follow three steps:
Step 1:
Run: docker network create mynet
Step 2:
Run: docker run --name sonar-postgres -e POSTGRES_USER=sonar -e POSTGRES_PASSWORD=sonar -d -p 5432:5432 --net mynet postgres
Step 3:
Run: docker run --name sonarqube -p 9000:9000 -e SONARQUBE_JDBC_USERNAME=sonar -e SONARQUBE_JDBC_PASSWORD=sonar -e SONARQUBE_JDBC_URL=jdbc:postgresql://sonar-postgres:5432/sonar -d --net mynet sonarqube:5.6
Step 4:
Access http://localhost:9000/
First install Docker on your system, it is available for Windows, Mac and Linux. Click here to download Docker
After installing run: docker version
In order to stablish a communication between Sonar and Postgres containers, we need to create a Docker Network.
The following command will create a network called mynet.
docker network create mynet
Sonar Qube depends on a database to works correctly, in this example we choose PostgreSQL. The command below creates and runs an instance of PostgreSQL in background with username sonar, password sonar, bounding host port 5432 with container port 5432 inside mynet Docker network.
docker run --name sonar-postgres -e POSTGRES_USER=sonar -e POSTGRES_PASSWORD=sonar -d -p 5432:5432 --net mynet postgres
Creates and runs an instance of Sonar Qube 5.6 with database user, pass and JDBC connection by parameter. Bounding the host port 9000 to container port 9000 inside mynet Docker Network.
docker run --name sonarqube -p 9000:9000 -e SONARQUBE_JDBC_USERNAME=sonar -e SONARQUBE_JDBC_PASSWORD=sonar -e SONARQUBE_JDBC_URL=jdbc:postgresql://sonar-postgres:5432/sonar -d --net mynet sonarqube:5.6
At this point you should have Sonar working fine, access http://localhost:9000/ and see if everything works as expected.
Find the CONTAINER ID using the command:
docker ps --all
Start a container with the specified CONTAINER ID.
docker start YOUR_CONTAINER_ID
Find the CONTAINER ID using the command:
docker ps --all
Stop a container with the specified CONTAINER ID
docker stop YOUR_CONTAINER_ID
Following are commands in case you messed up and want to start again.
Stops all containers that are running, if you run this command more than once in a row it will return a message about parameters, this is normal since the second part of the command won't anything after the first time.
docker stop $(docker ps -a -q)
Removes all containers, make sure you stopped all containers before run this command, otherwise it won't complete correctly.
docker rm $(docker ps -a -q)
Removes all images downloaded, just take care with it since you will need to download all the dependencies again.
docker rmi $(docker images -q)
With some adjustments this solution works perfect.
For testing purposes I used a Ubuntu 18.04 on VirtualBox. I used the image for postgres 12 and the one for sonarcube 8.3.1 Do not forget about the requirements and prerequisites: https://docs.sonarqube.org/latest/requirements/requirements/
Here the commands I executed:
Edit the config as mentioned in the platform notes for linux:
nano /etc/sysctl.conf
In this file add:
vm.max_map_count=262144
fs.file-max=65536
Then update the config:
sysctl -p
As before, I just explicitly stated version 12:
docker run --name sonar-postgres -e POSTGRES_USER=sonar -e POSTGRES_PASSWORD=sonar -d -p 5432:5432 --net mynet postgres:12
Also as before, here I updated the version:
docker run --name sonarqube -p 9000:9000 -e SONARQUBE_JDBC_USERNAME=sonar -e SONARQUBE_JDBC_PASSWORD=sonar -e SONARQUBE_JDBC_URL=jdbc:postgresql://sonar-postgres:5432/sonar -d --net mynet sonarqube:8.3.1-community
If there any error it might be helpful to check the logs:
docker logs sonarqube
docker logs sonqr-postgres