diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 5f294f78bfc8adb9a9cc67eaf70d77ea738ee329..c8856cd9841b1ed5451abc93e1af558b4dfdf718 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -25,12 +25,7 @@ build:
 #    - apt-get update -qq && apt-get install -y -qq g++ cmake git
 #    - apt-get install -y -qq libopencv-dev libgoogle-glog-dev liburiparser-dev libreadline-dev libmsgpack-dev uuid-dev
   script:
-    - mkdir build
-    - cd build
-    - /snap/bin/cmake .. -GNinja -DCMAKE_CXX_FLAGS="-fdiagnostics-color" -DWITH_OPTFLOW=TRUE -DUSE_CPPCHECK=FALSE -DBUILD_CALIBRATION=TRUE -DWITH_CERES=TRUE -DCMAKE_BUILD_TYPE=Release -DCPACK_GENERATOR=DEB
-    - ninja
-    - ninja package
-    - ctest --output-on-failure
+    - ./docker/CI/pipeline-script.sh
 #    - cd ../SDK/Python
 #    - python3 -m unittest discover test
 
diff --git a/docker/CI/Dockerfile b/docker/CI/Dockerfile
new file mode 100644
index 0000000000000000000000000000000000000000..3b55e246f255e785c4b317ceb9d83786b3bc304d
--- /dev/null
+++ b/docker/CI/Dockerfile
@@ -0,0 +1,19 @@
+FROM ftlab/base:1.0-dev
+
+RUN mkdir /opt/ftl
+WORKDIR /opt/ftl
+COPY ./applications ./applications
+COPY ./cmake ./cmake
+COPY ./components ./components
+COPY ./lib ./lib
+COPY ./ext ./ext
+COPY ./SDK ./SDK
+
+CMD mkdir build &&\
+    cd build &&\
+    cmake .. -GNinja -DCMAKE_CXX_FLAGS="-fdiagnostics-color" -DWITH_OPTFLOW=TRUE -DUSE_CPPCHECK=FALSE -DBUILD_CALIBRATION=TRUE -DWITH_CERES=TRUE -DCMAKE_BUILD_TYPE=Release -DCPACK_GENERATOR=DEB &&\
+    ninja &&\
+    ninja package &&\
+    ctest --output-on-failure
+    
+
diff --git a/docker/CI/container-script.sh b/docker/CI/container-script.sh
new file mode 100755
index 0000000000000000000000000000000000000000..6d6423a1fcb66ec7a719cd2d03719099907f968e
--- /dev/null
+++ b/docker/CI/container-script.sh
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+cd /opt/ftl
+mkdir build
+cd build
+cmake .. -GNinja -DCMAKE_CXX_FLAGS="-fdiagnostics-color" -DWITH_OPTFLOW=TRUE -DUSE_CPPCHECK=FALSE -DBUILD_CALIBRATION=TRUE -DWITH_CERES=TRUE -DCMAKE_BUILD_TYPE=Release -DCPACK_GENERATOR=DEB
+ninja
+ninja package
+ctest --output-on-failure
diff --git a/docker/CI/pipeline-script.sh b/docker/CI/pipeline-script.sh
new file mode 100755
index 0000000000000000000000000000000000000000..16e9c04e0e16b2a69d853689af3afdb9a276a186
--- /dev/null
+++ b/docker/CI/pipeline-script.sh
@@ -0,0 +1,12 @@
+#!/bin/sh
+
+docker run \
+    --runtime=nvidia \
+    --device=/dev/snd \
+    --device=/dev/bus/usb \
+    -e NVIDIA_DRIVER_CAPABILITIES=graphics,compute,utility,video \
+    -v "${PWD}:/opt/ftl" \
+    -it \
+    ftlab/base:1.0-dev \
+    /opt/ftl/docker/CI/container-script.sh
+    
\ No newline at end of file