diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
new file mode 100644
index 0000000000000000000000000000000000000000..95904c8fdd88eda76daeb2968b8d3a489d4530d6
--- /dev/null
+++ b/.gitlab-ci.yml
@@ -0,0 +1,33 @@
+image: quay.io/sheogorath/ubuntu-ci:18.04
+
+services:
+  - docker:dind
+
+before_script:
+  - docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY
+
+build-master:
+  stage: build
+  variables:
+    DOCKER_HOST: "tcp://docker:2375"
+    DOH_VERSION: "2.0.1"
+  script:
+    - docker build --pull --build-arg VERSION="$DOH_VERSION" -t "doh:testing" .
+    - ./tools/tagging.sh "$CI_REGISTRY_IMAGE" "${DOH_VERSION:-latest}" ""
+    - docker images --format "{{.Repository}}:{{.Tag}}" "$CI_REGISTRY_IMAGE" | xargs -L 1 docker push
+  only:
+    - master
+  tags:
+    - docker
+
+build:
+  stage: build
+  variables:
+    DOCKER_HOST: "tcp://docker:2375"
+  script:
+    - docker build --pull -t "$CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG" .
+    - docker push "$CI_REGISTRY_IMAGE:$CI_COMMIT_REF_SLUG"
+  except:
+    - master
+  tags:
+    - docker
diff --git a/Dockerfile b/Dockerfile
index cf8fa74f1c9532fd88b4c3c382486d1f39f33505..809ae11916ff63ad30384d066e99ea197084680d 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -1,7 +1,9 @@
 FROM golang
 
+ARG VERSION=master
+
 RUN true \
-    && git clone https://github.com/m13253/dns-over-https.git \
+    && git clone https://github.com/m13253/dns-over-https.git --depth 1 -b "$VERSION" \
     && cd dns-over-https \
     && make \
     && true
diff --git a/tools/tagging.sh b/tools/tagging.sh
new file mode 100755
index 0000000000000000000000000000000000000000..d419ff391477c8ad4484dfb928f7ae930cf54a4f
--- /dev/null
+++ b/tools/tagging.sh
@@ -0,0 +1,27 @@
+#!/bin/sh
+
+if [ "$1" = "--help" ]; then
+    echo "
+    Usage of $0:
+        $0 <PREFIX> <VERSION> <SUFFIX>
+
+    Example:
+        $0 doh 2.0.24 alpine
+    "
+fi
+
+PREFIX=${1:-doh}
+VERSION=${2}
+[ "${3}" != "" ] && [ "${3}" != "debian" ] && SUFFIX="-${3}"
+
+
+
+if [ "$VERSION" != "" ]; then
+    docker tag doh:testing "$PREFIX:$(echo "${VERSION}" | sed -e 's/^v//' | cut -d. -f1)${SUFFIX}"
+    docker tag doh:testing "$PREFIX:$(echo "${VERSION}" | sed -e 's/^v//' | cut -d. -f1-2)${SUFFIX}"
+    docker tag doh:testing "$PREFIX:$(echo "${VERSION}" | sed -e 's/^v//' | cut -d. -f1-3)${SUFFIX}"
+    docker tag doh:testing "$PREFIX:$(echo "${VERSION}" | sed -e 's/^v//' | cut -d. -f1-4)${SUFFIX}"
+    [ "$SUFFIX" = "" ] && docker tag doh:testing "$PREFIX:latest"
+else
+    echo "No version provided. Skipping tagging..."
+fi