diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index dd729ce9b6a21e2d59b70de5735cf27d130f9b2e..32f89b32014fdbb20d5c242a5f93b3187b8ee2fc 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -10,6 +10,7 @@ image: alpine:3.8
 stages:
  - build
  - test
+ - docker
 
 #==========  Stage build  ==========
 
@@ -79,3 +80,44 @@ test:clang:
   <<: *test_template
   dependencies:
     - build:clang
+
+#==========  Stage release =========
+
+.docker: &docker_template
+  stage: docker
+  image: gitlab.fit.cvut.cz:5000/ict/alpine-docker-images/ci:3.8
+  cache: {}  # disable
+  variables:
+    DOCKER_DRIVER: overlay2
+    DOCKER_HOST: docker
+    IMAGE_TAG_NIGHTLY: $CI_REGISTRY_IMAGE/nightly:$CI_COMMIT_REF_NAME
+    IMAGE_TAG_RELEASE: $CI_REGISTRY_IMAGE:$CI_COMMIT_REF_NAME
+    IMAGE_TAG_LATEST: $CI_REGISTRY_IMAGE:latest
+  services:
+    - docker:dind
+  before_script:
+    - apk add --no-cache docker
+    - docker info
+    - docker login -u gitlab-ci-token -p $CI_JOB_TOKEN $CI_REGISTRY
+  dependencies: []
+
+docker:build-nightly:
+  <<: *docker_template
+  only:
+    - schedules
+  script:
+    - docker build -t "$IMAGE_TAG_NIGHTLY" .
+    - docker run "$IMAGE_TAG_NIGHTLY" /app/bin/aql2 --help
+    - docker push "$IMAGE_TAG_NIGHTLY"
+
+docker:build-release:
+  <<: *docker_template
+  only:
+    - /^v.*$/
+  except:
+    - branches
+  script:
+    - docker build -t "$IMAGE_TAG_RELEASE" -t "$IMAGE_TAG_LATEST" .
+    - docker run "$IMAGE_TAG_RELEASE" /app/bin/aql2 --help
+    - docker push "$IMAGE_TAG_RELEASE"
+    - docker push "$IMAGE_TAG_LATEST"