diff --git a/dockerfiles/focal.docker b/dockerfiles/focal.docker
new file mode 100644
index 0000000000000000000000000000000000000000..ecbaa6363de4a10aa148db98b9dcbd8d5b64bb80
--- /dev/null
+++ b/dockerfiles/focal.docker
@@ -0,0 +1,56 @@
+FROM ubuntu:focal
+ENV http_proxy http://xfelproxy.desy.de:3128
+ENV https_proxy http://xfelproxy.desy.de:3128
+ENV DEBIAN_FRONTEND noninteractive
+
+RUN apt-get update && \
+    apt-get install -y software-properties-common apt-utils && \
+    add-apt-repository -y universe && \
+    add-apt-repository -y ppa:git-core/ppa && \
+    apt-get update && \
+    apt-get upgrade -y && \
+    apt-get dist-upgrade -y && \
+    apt-get install -y sudo wget python3-pip locales \ 
+        g++ valgrind cppcheck lcov doxygen procmail make git gdb cmake ninja-build \
+        libboost-all-dev libxml++2.6-dev \
+        libldap2-dev libzmq3-dev rpcbind \
+        libreadline-dev \
+        qtbase5-dev \
+        python2.7-dev python-numpy python3-dev python3-numpy \
+        python-pytest \
+        libxmu6 csh libxrandr2 \
+        libncurses5-dev \
+        linux-headers-generic \
+        graphviz \
+        clang \
+        libhdf5-dev \
+        liblua5.3-dev \
+        python3-sphinx \
+        libgsl-dev \
+        libssl-dev \
+        libpqxx-dev \
+        libfftw3-dev \
+        subversion \
+        vim-common \
+        netcat-openbsd \
+        libarmadillo-dev \
+        libjsoncpp-dev \
+        python3-pytest \
+        libxerces-c-dev && \
+    useradd -u 30996 msk_jenkins && \
+    ln -sfn /usr/lib/x86_64-linux-gnu/libzmq.so.5 /usr/lib/x86_64-linux-gnu/libzmq.so.3 && \
+    pip3 install meson
+
+RUN echo "Defaults set_home" >> /etc/sudoers && \
+    echo 'Acquire::http::proxy "http://xfelproxy.desy.de:3128/";' > /etc/apt/apt.conf && \
+    echo 'http_proxy=http://xfelproxy.desy.de:3128' >> /etc/environment && \
+    echo 'https_proxy=https://xfelproxy.desy.de:3128' >> /etc/environment && \
+    git config --system http.proxy http://xfelproxy.desy.de:3128 && \
+    git config --system https.proxy http://xfelproxy.desy.de:3128
+   
+# NOTE: This last line (symlink for libzmq.so.3) is a hack for a bug in DOOCS serverlib, which has the version number hardcoded.
+   
+ADD lcov-to-cobertura-xml /common/lcov_cobertura-1.6
+
+# Start rpcbind at launch of the container, required for DOOCS
+ENTRYPOINT ["bash", "-c", "rpcbind -f -w ; bash"]
diff --git a/vars/buildDoocsLibrary.groovy b/vars/buildDoocsLibrary.groovy
index cd1882d4b76f80c8f36a90b1d7861913fa40970e..6ed218c8268ccfa3a375f175da8a748246cf93f2 100644
--- a/vars/buildDoocsLibrary.groovy
+++ b/vars/buildDoocsLibrary.groovy
@@ -14,7 +14,9 @@ def call(String libraryName, ArrayList<String> dependencyList) {
                  'xenial-tsan',
                  'xenial-asan',
                  'bionic-Debug',
-                 'bionic-Release' ]
+                 'bionic-Release',
+                 'focal-Debug',
+                 'focal-Release']
 
   script {
     node('Docker') {
diff --git a/vars/buildDoocsTargetConfig.groovy b/vars/buildDoocsTargetConfig.groovy
index fc5bf352bc60daea63b97fde25bfacfd64a58781..4da509a1cb5cddb34cecb1fb69392ba4e6aba3b3 100644
--- a/vars/buildDoocsTargetConfig.groovy
+++ b/vars/buildDoocsTargetConfig.groovy
@@ -13,7 +13,9 @@ def call() {
                  'xenial-tsan',
                  'xenial-asan',
                  'bionic-Debug',
-                 'bionic-Release' ]
+                 'bionic-Release',
+                 'focal-Debug',
+                 'focal-Release']
 
   pipeline {
     agent none
@@ -55,6 +57,9 @@ def transformIntoStep(String buildName) {
               if [ "${label}" == "bionic" ]; then
                 DOOCSARCH=Ubuntu-18.04-x86_64
               fi
+              if [ "${label]" == "focal" ]; then
+                DOOCSARCH=Ubuntu-20.04-x86_64
+              fi
               echo "export DOOCSARCH=\${DOOCSARCH}" > /export/doocs/doocsarch.env
               sudo -H -u msk_jenkins git clone http://doocs-git.desy.de/cgit/doocs/\${DOOCSARCH}.git
               mkdir -p /export/doocs/\${DOOCSARCH}/lib/pkgconfig
diff --git a/vars/buildEpicsForDoocs.groovy b/vars/buildEpicsForDoocs.groovy
index 8d46983a57b74ae57ed002aaabf3c716de44006c..a28468078494a83e2ac5f6e85fceee2fa23e436c 100644
--- a/vars/buildEpicsForDoocs.groovy
+++ b/vars/buildEpicsForDoocs.groovy
@@ -13,7 +13,10 @@ def call() {
                  'xenial-tsan',
                  'xenial-asan',
                  'bionic-Debug',
-                 'bionic-Release' ]
+                 'bionic-Release',
+                 'focal-Debug',
+                 'focal-Release' ]
+
 
   pipeline {
     agent none
diff --git a/vars/buildTestDeploy.groovy b/vars/buildTestDeploy.groovy
index 751f0f4fcd7dedb1dbd71b96d08a1fe7580279c5..ca6e6858138604703aa317e260fb694fd72e59e4 100644
--- a/vars/buildTestDeploy.groovy
+++ b/vars/buildTestDeploy.groovy
@@ -13,6 +13,8 @@ def call(ArrayList<String> dependencyList, String gitUrl='',
                                    'xenial-asan',
                                    'bionic-Debug',
                                    'bionic-Release',
+                                   'focal-Debug',
+                                   'focal-Release',
                                    'tumbleweed-Debug',
                                    'tumbleweed-Release']) {