1e2736ff6SVladimir Kotal[![](https://images.microbadger.com/badges/image/opengrok/docker.svg)](https://microbadger.com/images/opengrok/docker "Get your own image badge on microbadger.com") 2e2736ff6SVladimir Kotal[![](https://images.microbadger.com/badges/version/opengrok/docker.svg)](https://microbadger.com/images/opengrok/docker "Get your own version badge on microbadger.com") 3e2736ff6SVladimir Kotal 41106ade6SVladimir Kotal# A Docker container for OpenGrok 51106ade6SVladimir Kotal 61106ade6SVladimir Kotal## OpenGrok from official source 71106ade6SVladimir Kotal 81106ade6SVladimir KotalBuilt from official source: https://github.com/oracle/opengrok/releases/ 91106ade6SVladimir Kotal 101106ade6SVladimir KotalYou can learn more about OpenGrok at http://oracle.github.io/opengrok/ 111106ade6SVladimir Kotal 121106ade6SVladimir KotalThe container is available from DockerHub at https://hub.docker.com/r/opengrok/docker/ 131106ade6SVladimir Kotal 141106ade6SVladimir Kotal## When not to use it 151106ade6SVladimir Kotal 16a391beadSAdam HornacekThis image is simple wrapper around OpenGrok environment. It is basically a small appliance. The indexer and the web container are **not** tuned for large workloads. 17bc2f6de0SVladimir Kotal 181106ade6SVladimir KotalIf you happen to have one of the following: 19*64c0a233SShenghan Gao 201106ade6SVladimir Kotal - large source data (e.g. [AOSP](https://en.wikipedia.org/wiki/Android_Open_Source_Project) or the like) 211106ade6SVladimir Kotal - stable service 221106ade6SVladimir Kotal - Source Code Management systems not supported in the image (e.g. Perforce, 231106ade6SVladimir Kotal Clearcase, etc.) 24bc2f6de0SVladimir Kotal - need for authentication/authorization 25703bf669SVladimir Kotal 26bc2f6de0SVladimir Kotalthen it is advisable to run OpenGrok standalone or construct your own Docker 271106ade6SVladimir Kotalimage based on the official one. 281106ade6SVladimir Kotal 29f70822c2SVladimir Kotal## Additional info about the image 301106ade6SVladimir Kotal 311106ade6SVladimir Kotal* Tomcat 9 321106ade6SVladimir Kotal* JRE 8 (Required for Opengrok 1.0+) 331106ade6SVladimir Kotal* Configurable mirroring/reindexing (default every 10 min) 341106ade6SVladimir Kotal 351106ade6SVladimir KotalThe mirroring step works by going through all projects and attempting to 361106ade6SVladimir Kotalsynchronize all its repositories (e.g. it will do `git pull` for Git 371106ade6SVladimir Kotalrepositories). 381106ade6SVladimir Kotal 39ab135123SVladimir Kotal### Indexer logs 40ab135123SVladimir Kotal 411106ade6SVladimir KotalThe indexer/mirroring is set so that it does not log into files. 421106ade6SVladimir KotalRather, everything goes to standard (error) output. To see how the indexer 431106ade6SVladimir Kotalis doing, use the `docker logs` command. 441106ade6SVladimir Kotal 4584ed967bSVladimir Kotal### Source Code Management systems supported 4684ed967bSVladimir Kotal 4784ed967bSVladimir Kotal- Mercurial 4884ed967bSVladimir Kotal- Git 4984ed967bSVladimir Kotal- Subversion 5084ed967bSVladimir Kotal 51f70822c2SVladimir Kotal### Tags and versioning 52f70822c2SVladimir Kotal 53eea6103dSVladimir KotalEach OpenGrok release triggers creation of new Docker image. 54eea6103dSVladimir Kotal 55eea6103dSVladimir Kotal| Tag | Note | 56eea6103dSVladimir Kotal| -------- |:--------------------------------------------------------| 57eea6103dSVladimir Kotal| `latest` | tracks the latest version | 58eea6103dSVladimir Kotal| `x.y.z` | if you want to pin against a specific version | 59eea6103dSVladimir Kotal| `x.y` | stay on micro versions to avoid reindexing from scratch | 60f70822c2SVladimir Kotal 611106ade6SVladimir Kotal## How to run 621106ade6SVladimir Kotal 631106ade6SVladimir Kotal### From DockerHub 641106ade6SVladimir Kotal 651106ade6SVladimir Kotal docker run -d -v <path/to/your/src>:/opengrok/src -p 8080:8080 opengrok/docker:latest 661106ade6SVladimir Kotal 671106ade6SVladimir KotalThe container exports ports 8080 for OpenGrok. 681106ade6SVladimir Kotal 691106ade6SVladimir KotalThe volume mounted to `/opengrok/src` should contain the projects you want to make searchable (in sub directories). You can use common revision control checkouts (git, svn, etc...) and OpenGrok will make history and blame information available. 701106ade6SVladimir Kotal 7115936b04SVladimir Kotal## Environment Variables 721106ade6SVladimir Kotal 7315936b04SVladimir Kotal| Docker Environment Var. | Description | 7415936b04SVladimir Kotal| ----------------------- | ----------- | 7515936b04SVladimir Kotal`REINDEX: <time_in_minutes>`<br/> *Optional* *Default: 10* | Period of automatic mirroring/reindexing. Setting to `0` will disable automatic indexing. You can manually trigger an reindex using docker exec: `docker exec <container> /scripts/index.sh` 7615936b04SVladimir Kotal`INDEXER_OPT` | pass extra options to opengrok-indexer. For example, "-i d:vendor" will remove all the `*/vendor/*` files from the index. You can check the indexer options on https://github.com/oracle/opengrok/wiki/Python-scripts-transition-guide 7715936b04SVladimir Kotal`NOMIRROR` | To avoid the mirroring step, set the variable to non-empty value. 781106ade6SVladimir Kotal 7915936b04SVladimir KotalTo specify environment variable for `docker run`, use the `-e` option, e.g. `-e REINDEX=30` 801106ade6SVladimir Kotal 811106ade6SVladimir Kotal## OpenGrok Web-Interface 821106ade6SVladimir Kotal 831106ade6SVladimir KotalThe container has OpenGrok as default web app installed (accessible directly from `/`). With the above container setup, you can find it running on 841106ade6SVladimir Kotal 851106ade6SVladimir Kotalhttp://localhost:8080/ 861106ade6SVladimir Kotal 871106ade6SVladimir KotalThe first reindex will take some time to finish. Subsequent reindex will be incremental so will take signigicantly less time. 881106ade6SVladimir Kotal 8933551f14SVladimir Kotal## Using Docker compose 9033551f14SVladimir Kotal 9133551f14SVladimir Kotal[Docker-compose](https://docs.docker.com/compose/install/) example: 9233551f14SVladimir Kotal 9333551f14SVladimir Kotal```yaml 9433551f14SVladimir Kotalversion: "3" 9533551f14SVladimir Kotal 9633551f14SVladimir Kotal# More info at https://github.com/oracle/opengrok/docker/ 9733551f14SVladimir Kotalservices: 9833551f14SVladimir Kotal opengrok: 9933551f14SVladimir Kotal container_name: opengrok 10033551f14SVladimir Kotal image: opengrok/docker:latest 10133551f14SVladimir Kotal ports: 10233551f14SVladimir Kotal - "8080:8080/tcp" 10333551f14SVladimir Kotal environment: 10433551f14SVladimir Kotal REINDEX: '60' 10533551f14SVladimir Kotal # Volumes store your data between container upgrades 10633551f14SVladimir Kotal volumes: 107*64c0a233SShenghan Gao - '~/opengrok-src/:/opengrok/src/' # source code 108*64c0a233SShenghan Gao - '~/opengrok-etc/:/opengrok/etc/' # folder contains configuration.xml 109*64c0a233SShenghan Gao - '~/opengrok-data/:opengrok/data' # index and other things for source code 11033551f14SVladimir Kotal``` 11133551f14SVladimir Kotal 11233551f14SVladimir KotalSave the file into `docker-compose.yml` and then simply run 11333551f14SVladimir Kotal 11433551f14SVladimir Kotal docker-compose up -d 11533551f14SVladimir Kotal 11633551f14SVladimir KotalEquivalent `docker run` command would look like this: 11733551f14SVladimir Kotal 11833551f14SVladimir Kotal```bash 11933551f14SVladimir Kotaldocker run -d \ 12033551f14SVladimir Kotal --name opengrok \ 12133551f14SVladimir Kotal -p 8080:8080/tcp \ 12233551f14SVladimir Kotal -e REINDEX="60" \ 12333551f14SVladimir Kotal -v "~/opengrok-src/:/opengrok/src/" \ 124*64c0a233SShenghan Gao -v "~/opengrok-etc/:/opengrok/etc/" \ 125*64c0a233SShenghan Gao -v "~/opengrok-data/:opengrok/data" \ 12633551f14SVladimir Kotal opengrok/docker:latest 12733551f14SVladimir Kotal``` 12833551f14SVladimir Kotal 12933551f14SVladimir Kotal## Build image locally 1301106ade6SVladimir Kotal 1311106ade6SVladimir KotalIf you want to do your own development, you can build the image yourself: 1321106ade6SVladimir Kotal 13386b0ab6bSAdam Hornacek ./mvnw -DskipTests=true clean package && \ 1341106ade6SVladimir Kotal docker build -t opengrok-dev . 1351106ade6SVladimir Kotal 1361106ade6SVladimir KotalThen run the container: 1371106ade6SVladimir Kotal 1381106ade6SVladimir Kotal docker run -d -v <path/to/your/src>:/opengrok/src -p 8080:8080 opengrok-dev 1391106ade6SVladimir Kotal 1401106ade6SVladimir Kotal## Inspecting the container 1411106ade6SVladimir Kotal 1421106ade6SVladimir KotalYou can get inside a container using the [command below](https://docs.docker.com/engine/reference/commandline/exec/): 1431106ade6SVladimir Kotal 144*64c0a233SShenghan Gao```bash 1451106ade6SVladimir Kotaldocker exec -it <container> bash 1461106ade6SVladimir Kotal``` 1471106ade6SVladimir Kotal 1481106ade6SVladimir KotalEnjoy. 149