diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index b8460cab45bdd9bb2f904145489c8231d0b9c2ae..8ded1da721e67d45050740425cbf669be4fc8776 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -1,26 +1,13 @@
 Docker:
-  # Use the official docker image.
-  image: gitlab.jonasled.de/jonasled/buildx-docker:latest
+  image: jonasled.dev/infra/docker-build:master@sha256:fce6c9200bbce36003ff05564e2d44a5a7d1f4437eed918dc9d0a152132f97ac
   stage: build
   needs: []
   variables:
     # renovate: datasource=github-releases depName=netbox packageName=netbox-community/netbox
     NETBOX_VERSION: v4.2.2
-  services:
-  - docker:dind
-  before_script:
-  - docker context create build
-  - docker buildx create build --use
-  - docker run --privileged --rm tonistiigi/binfmt --install all
-  - docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY
-  - apk add jq
-  # Default branch leaves tagempty (= latest tag)
-  # All other branches are tagged with the escaped branch name (commit ref slug)
   script:
-  - docker buildx build --build-arg NETBOX_VERSION=${NETBOX_VERSION} --platform linux/arm64,linux/amd64 --push --provenance false --tag "$CI_REGISTRY_IMAGE:${NETBOX_VERSION}" .
-  - export IMAGE_HASH=$(docker buildx imagetools inspect "$CI_REGISTRY_IMAGE:${NETBOX_VERSION}" --format "{{json .Manifest}}" | jq .digest)
-  - "echo \"Image Hash: $IMAGE_HASH\""
-  - echo "$IMAGE_HASH" >> image-hash.txt
+  - export IMAGE_TAG=$NETBOX_VERSION
+  - build-image
   artifacts:
     paths:
     - image-hash.txt
@@ -28,34 +15,12 @@ Docker:
   - if: $CI_PIPELINE_SOURCE == "push" && $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
 ---
 Docker-dev:
-  # Use the official docker image.
-  image: gitlab.jonasled.de/jonasled/buildx-docker:latest
+  image: jonasled.dev/infra/docker-build:master@sha256:fce6c9200bbce36003ff05564e2d44a5a7d1f4437eed918dc9d0a152132f97ac
   stage: build
   needs: []
-  variables:
-    # renovate: image=netboxcommunity/netbox
-    NETBOX_VERSION: "v4.1.9"
-  services:
-  - docker:dind
-  before_script:
-  - docker context create build
-  - docker buildx create build --use
-  - docker run --privileged --rm tonistiigi/binfmt --install all
-  - docker login -u "$CI_REGISTRY_USER" -p "$CI_REGISTRY_PASSWORD" $CI_REGISTRY
-  - apk add jq
-  # Default branch leaves tagempty (= latest tag)
-  # All other branches are tagged with the escaped branch name (commit ref slug)
   script:
-  - |
-    if [[ "$CI_COMMIT_BRANCH" == "$CI_DEFAULT_BRANCH" ]]; then
-      tag="latest"
-    else
-      tag="$CI_COMMIT_REF_SLUG"
-    fi
-  - docker buildx build --build-arg NETBOX_VERSION=${NETBOX_VERSION} --platform linux/arm64,linux/amd64 --push --provenance false --tag "$CI_REGISTRY_IMAGE-dev:${tag}" .
-  - export IMAGE_HASH=$(docker buildx imagetools inspect "$CI_REGISTRY_IMAGE-dev:${tag}" --format "{{json .Manifest}}" | jq .digest)
-  - "echo \"Image Hash: $IMAGE_HASH\""
-  - echo "$IMAGE_HASH" >> image-hash.txt
+  - export IMAGE_NAME=$CI_REGISTRY_IMAGE/dev
+  - build-image
   artifacts:
     paths:
     - image-hash.txt