diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 4d6bf08c4568b21a25934e3669ee62f95d6b091a..d237619714c0ec2a39ae441c57f13edd85be5779 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -84,23 +84,15 @@ lint_python_scripts:
       echo -e "\e[0Ksection_start:$(date +%s):tag[collapsed=true]\r\e[0KDetermining tag for the new image..."
       if [[ "$CI_COMMIT_BRANCH" == "$CI_DEFAULT_BRANCH" ]]; then
         echo "Running on default branch '$CI_DEFAULT_BRANCH': tag = 'latest'"
-        tag=":latest"
+        tag="latest"
       else
         echo "Running on branch '$CI_COMMIT_BRANCH': tag = $CI_COMMIT_REF_SLUG"
-        tag=":$CI_COMMIT_REF_SLUG" 
+        tag="$CI_COMMIT_REF_SLUG" 
       fi
       echo -e "\e[0Ksection_end:$(date +%s):tag\r\e[0K"
-      echo -e "\e[0Ksection_start:$(date +%s):build[collapsed=true]\r\e[0KBuilding image "$CI_REGISTRY_IMAGE/$BUILD_TARGET${tag}"..."
-      docker build --file "Dockerfile.$BUILD_TARGET" --pull \
-        -t "$CI_REGISTRY_IMAGE/$BUILD_TARGET${tag}" \
-        -t "$CI_REGISTRY_IMAGE/$BUILD_TARGET:$CI_COMMIT_SHA" .
+      echo -e "\e[0Ksection_start:$(date +%s):build[collapsed=true]\r\e[0KBaking image "$CI_REGISTRY_IMAGE/$BUILD_TARGET${tag}"..."
+      docker buildx bake --progress=plain --push "$BUILD_TARGET"
       echo -e "\e[0Ksection_end:$(date +%s):build\r\e[0K"
-      echo -e "\e[0Ksection_start:$(date +%s):push1[collapsed=true]\r\e[0KPushing image "$CI_REGISTRY_IMAGE/$BUILD_TARGET${tag}"..."
-      docker push "$CI_REGISTRY_IMAGE/$BUILD_TARGET${tag}"
-      echo -e "\e[0Ksection_end:$(date +%s):push1\r\e[0K"
-      echo -e "\e[0Ksection_start:$(date +%s):push2[collapsed=true]\r\e[0KPushing image "$CI_REGISTRY_IMAGE/$BUILD_TARGET:$CI_COMMIT_SHA"..."
-      docker push "$CI_REGISTRY_IMAGE/$BUILD_TARGET:$CI_COMMIT_SHA"
-      echo -e "\e[0Ksection_end:$(date +%s):push2\r\e[0K" 
   needs:
     - build_docker_dind_image
   tags:
diff --git a/docker-bake.hcl b/docker-bake.hcl
new file mode 100644
index 0000000000000000000000000000000000000000..3370cb666a71a1c418ef9515f6d1feacafd94b4a
--- /dev/null
+++ b/docker-bake.hcl
@@ -0,0 +1,38 @@
+variable "CI_REGISTRY_IMAGE" {}
+variable "CI_COMMIT_SHA" {}
+variable "tag" {
+  default = "latest"
+}
+
+function "notempty" {
+  params = [variable]
+  result = notequal("", variable)
+}
+
+function "generate-tags" {
+  params = [target]
+  result = [
+    notempty(CI_REGISTRY_IMAGE) ? "${CI_REGISTRY_IMAGE}/${target}:${tag}" : "${target}:${tag}",
+    notempty(CI_COMMIT_SHA) ? "${CI_REGISTRY_IMAGE}/${target}:${CI_COMMIT_SHA}": ""
+  ]
+}
+
+target "benchmark-test-runner" {
+  dockerfile = "Dockerfile.benchmark-test-runner"
+  tags = generate-tags("benchmark-test-runner")
+}
+
+target "docker-builder" {
+  dockerfile = "Dockerfile.docker-builder"
+  tags = generate-tags("docker-builder")
+}
+
+target "docker-dind" {
+  dockerfile = "Dockerfile.docker-dind"
+  tags = generate-tags("docker-dind")
+}
+
+target "image-remover" {
+  dockerfile = "Dockerfile.image-remover"
+  tags = generate-tags("image-remover")
+}
\ No newline at end of file