diff --git a/.dockerignore b/.dockerignore
new file mode 100644
index 0000000000000000000000000000000000000000..bbf35c5a4ee6c333d32dc345b0c57a025becd244
--- /dev/null
+++ b/.dockerignore
@@ -0,0 +1,66 @@
+# root repo
+Dockerfile
+.dockerignore
+.gitignore
+data
+doc
+
+# build
+/extendj/build/
+/extendj/bin/
+/extendj/ant-bin/
+/extendj/src/gen/
+/extendj/src/gen-res/
+/extendj/src/tmp/
+/extendj/doc/
+/extendj/jastaddj-*.zip
+/extendj/jastaddj*.jar
+/extendj/fileset.tmp
+/extendj/test/
+
+/extendj/java4/extendj.jar
+/extendj/java4/build/
+/extendj/java4/src/gen/
+/extendj/java4/src/gen-res/
+
+/extendj/java5/extendj.jar
+/extendj/java5/build/
+/extendj/java5/src/gen/
+/extendj/java5/src/gen-res/
+
+/extendj/java6/extendj.jar
+/extendj/java6/build/
+/extendj/java6/src/gen/
+/extendj/java6/src/gen-res/
+
+/extendj/java7/extendj.jar
+/extendj/java7/build/
+/extendj/java7/src/gen/
+/extendj/java7/src/gen-res/
+
+/extendj/java8/extendj.jar
+/extendj/java8/build/
+/extendj/java8/src/gen/
+/extendj/java8/src/gen-res/
+
+# eclipse
+/extendj/.classpath
+/extendj/.project
+/extendj/.settings/
+
+*.asc
+
+# vim
+*.swp
+
+# temporary files
+/extendj/tmp
+/extendj/*.jar
+
+# intelliJ
+/extendj/.idea/
+/extendj/*.iml
+
+/extendj/update-version.sh
+
+/extendj/NOTES
diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
new file mode 100644
index 0000000000000000000000000000000000000000..9ee0a369918879d3bdfa69d20a6c9925c87929e1
--- /dev/null
+++ b/.gitlab-ci.yml
@@ -0,0 +1,17 @@
+image: docker:latest
+
+variables:
+  GIT_SUBMODULE_STRATEGY: recursive
+  IMG_NAME: "$CI_REGISTRY/jastadd/ragdoc-builder:"
+  IMG_SUFFIX: "latest"
+
+deploy:
+  stage: deploy
+  tags:
+    - docker
+  only:
+    - master
+  script:
+    - docker login -u gitlab-ci-token -p $CI_JOB_TOKEN $CI_REGISTRY
+    - docker build -t "$IMG_NAME""$IMG_SUFFIX" .
+    - docker push "$IMG_NAME""$IMG_SUFFIX"
diff --git a/Dockerfile b/Dockerfile
new file mode 100644
index 0000000000000000000000000000000000000000..0c8bf1201eb095822d1f566cc2cab4b3a080a790
--- /dev/null
+++ b/Dockerfile
@@ -0,0 +1,10 @@
+FROM openjdk:8
+WORKDIR /ragdoc-builder
+ADD . /ragdoc-builder/
+RUN chmod +x ./gradlew start-builder.sh && ./gradlew --no-daemon --version
+RUN fatJar && rm -r gradle/ extendj/ src/ build/ gradlew build.gradle settings.gradle
+ENV BOOT_CLASSPATH="/usr/local/openjdk-8/jre/lib/rt.jar"
+VOLUME ["/src"]
+VOLUME ["/data"]
+#ENTRYPOINT ["java", "-jar", "rd-builder.jar", "-d", "/data", "-bootclasspath", "$BOOT_CLASSPATH", "/src/*"]
+ENTRYPOINT ["./start-builder.sh"]
diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar
index 99340b4ad18d3c7e764794d300ffd35017036793..94336fcae912db8a11d55634156fa011f4686124 100644
Binary files a/gradle/wrapper/gradle-wrapper.jar and b/gradle/wrapper/gradle-wrapper.jar differ
diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties
index 1d5b29fbd59593cbadef9e8c2f5129d1d4391584..75b8c7c8c67a003599a36935d1c6a41519fc2207 100644
--- a/gradle/wrapper/gradle-wrapper.properties
+++ b/gradle/wrapper/gradle-wrapper.properties
@@ -1,5 +1,5 @@
 distributionBase=GRADLE_USER_HOME
 distributionPath=wrapper/dists
+distributionUrl=https\://services.gradle.org/distributions/gradle-5.0-bin.zip
 zipStoreBase=GRADLE_USER_HOME
 zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-4.10.3-bin.zip
diff --git a/start-builder.sh b/start-builder.sh
new file mode 100644
index 0000000000000000000000000000000000000000..7bcc528464fb3890ad8a5b2660d38335583adbd1
--- /dev/null
+++ b/start-builder.sh
@@ -0,0 +1,3 @@
+#!/bin/sh
+JAVA_FILES=$(find /src/ -name '*.java')
+java -jar rd-builder.jar -d /data -bootclasspath $BOOT_CLASSPATH $JAVA_FILES