diff --git a/docker/deploy-env/Dockerfile b/docker/deploy-env/Dockerfile
new file mode 100644
index 0000000000000000000000000000000000000000..28434fb52bd20f10ac7e1771d9b8de515a8036b1
--- /dev/null
+++ b/docker/deploy-env/Dockerfile
@@ -0,0 +1,17 @@
+FROM ubuntu:bionic
+
+RUN set -e -x ;\
+    export DEBIAN_FRONTEND=noninteractive ;\
+    apt-get update -y ;\
+    apt-get install -y \
+        clang \
+        git \
+        libclang-dev \
+        llvm \
+        python3-pip ;\
+    pip3 install \
+        clang \
+        sphinx \
+        sphinx_rtd_theme ;\
+    rm -rf /var/lib/apt/lists
+
diff --git a/docker/deploy-env/push.sh b/docker/deploy-env/push.sh
new file mode 100755
index 0000000000000000000000000000000000000000..6efb60278ae312e6c12817bb40ba22f4d16f7272
--- /dev/null
+++ b/docker/deploy-env/push.sh
@@ -0,0 +1,17 @@
+#!/usr/bin/env bash
+
+# Build and push the deploy env Docker container to the Gitlab container registry.
+
+set -e
+
+function rev() {
+    ( cd $1; git describe --always --match "v[0-9].*" --dirty )
+}
+
+IMAGE=registry.k0.hswaw.net/q3k/card10-deploy-env
+TAG=$(TZ=UTC date +%Y%m%d-%H%M%SZ)-$(rev .)
+
+docker build -t $IMAGE:$TAG .
+docker push $IMAGE:$TAG
+
+echo "Pushed $IMAGE:$TAG"