diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 15f0e0d6b1aeb4d7ca397f049d4224c7f7c19a67..164d89b6edc8ac9b451f5c3291136b902d2a8a8d 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -17,6 +17,8 @@ stages:
   DUNECONTROL: dunecontrol
   BASE_IMAGE_VERSION: v0.4.0-git
   DUNE_COPASI_SD_EXECUTABLE: 'ON'
+  CPACK_GENERATORS: 'DEB'
+  CPACK_PACKAGE_DIRECTORY: $CI_PROJECT_DIR/packages
 
 .docker_variables: &docker_variables
   DOCKER_BUILDKIT: 1
@@ -81,6 +83,10 @@ stages:
     - ./.ci/install /duneci/dune.opts
     - ./.ci/test /duneci/dune.opts
   <<: *default_tags
+  artifacts:
+    paths:
+      - packages
+    expire_in: 1h
 
 .deploy: &deploy
   image: ${DOCKER_IMAGE}
@@ -92,27 +98,11 @@ stages:
     - DOCKER_DEPLOY_IMAGE=$CI_REGISTRY/copasi/dune-copasi/dune-copasi:${DOCKER_TAG}
     # set directory to get packages from the image
     - mkdir -p $CI_PROJECT_DIR/packages
-    # build dockerfile from repositroy
+    # build final production image using packages from artifacts
     - docker build
-      --build-arg BASE_IMAGE=${BASE_IMAGE}
-      --build-arg TOOLCHAIN=${TOOLCHAIN}
-      --target build-env
-      --cache-from ${DEPENDENCIES_IMAGE}
-      -t build-image .
-    # run image and get its id
-    - DOCKER_ID=$(eval docker run -t -d --entrypoint bash build-image)
-      # move runtime files in packages folder into a local artifact folder
-    - mkdir -p -m o+w $CI_PROJECT_DIR/packages
-    - PACKAGE=$(docker exec ${DOCKER_ID} sh -c "ls /duneci/packages/dune-copasi-*-Runtime.deb")
-    - docker cp ${DOCKER_ID}:${PACKAGE} ${CI_PROJECT_DIR}/packages
-    - docker stop ${DOCKER_ID}
-    # build final production image
-    - docker build
-      --build-arg BASE_IMAGE=${BASE_IMAGE}
-      --build-arg TOOLCHAIN=${TOOLCHAIN}
-      --target production-env
-      --cache-from build-image
-      -t ${DOCKER_DEPLOY_IMAGE} .
+      --build-arg PRODUCTION_BASE_IMAGE=${BASE_IMAGE}
+      --file docker/deploy.dockerfile
+      --tag ${DOCKER_DEPLOY_IMAGE} .
     # push images into registry
     - docker push ${DOCKER_DEPLOY_IMAGE}
     # set alternative and simpler names
@@ -132,10 +122,6 @@ stages:
     - if: '$CI_COMMIT_TAG'
     - if: '$CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH'
     - if: '$CI_COMMIT_BRANCH == "latest"'
-  artifacts:
-    paths:
-      - packages
-    expire_in: never
   <<: *dind_docker_tags
 
 # debian gcc
@@ -158,7 +144,7 @@ deploy:debian_gcc:
     <<: *debian_gcc
   <<: *deploy
   dependencies:
-    - setup:debian_gcc
+    - build:debian_gcc
 
 # # ubuntu gcc
 # setup:ubuntu_gcc:
@@ -180,7 +166,7 @@ deploy:debian_gcc:
 #     <<: *ubuntu_gcc
 #   <<: *deploy
 #   dependencies:
-#     - setup:ubuntu_gcc
+#     - build:ubuntu_gcc
 
 # debian clang
 setup:debian_clang:
@@ -202,7 +188,7 @@ deploy:debian_clang:
     <<: *debian_clang
   <<: *deploy
   dependencies:
-    - setup:debian_clang
+    - build:debian_clang
 
 # # ubuntu clang
 # setup:ubuntu_clang:
@@ -219,4 +205,4 @@ deploy:debian_clang:
 #   <<: *ubuntu_clang
 #   <<: *deploy
 #   dependencies:
-#     - setup:ubuntu_clang
+#     - build:ubuntu_clang
diff --git a/Dockerfile b/Dockerfile
deleted file mode 100644
index 34b5d6dc4af12a1198cad099f6dee1196868c877..0000000000000000000000000000000000000000
--- a/Dockerfile
+++ /dev/null
@@ -1,72 +0,0 @@
-ARG BASE_IMAGE=debian:10
-
-ARG SETUP_BASE_IMAGE=registry.dune-project.org/docker/ci/${BASE_IMAGE}
-ARG BUILD_BASE_IMAGE=setup-env
-ARG PRODUCTION_BASE_IMAGE=${BASE_IMAGE}
-
-# setup of dune dependencies
-FROM ${SETUP_BASE_IMAGE} AS setup-env
-
-ARG TOOLCHAIN=clang-6-17
-
-ENV PATH=/duneci/install/bin:$PATH
-ENV TERM=xterm-256color
-ENV CMAKE_INSTALL_PREFIX=/duneci/install
-ENV SETUP_DUNE_TESTTOOLS=ON
-ENV DUNE_VENDOR_FMT=ON
-
-COPY --chown=duneci ./dune-copasi.opts /duneci/cmake-flags/
-COPY --chown=duneci ./.ci /duneci/modules/dune-copasi/.ci
-
-RUN    ln -s /duneci/toolchains/${TOOLCHAIN} /duneci/toolchain \
-    && export PATH=/duneci/install/bin:$PATH
-WORKDIR /duneci/modules
-RUN mkdir -p /duneci/modules/dune-copasi/.ci
-RUN ./dune-copasi/.ci/setup_dune /duneci/dune.opts
-
-# build and install dune-copasi from the setup-env
-FROM ${BUILD_BASE_IMAGE} AS build-env
-
-ENV DUNE_COPASI_SD_EXECUTABLE='ON'
-ENV CPACK_GENERATORS=DEB
-ENV CPACK_PACKAGE_DIRECTORY=/duneci/packages
-
-WORKDIR /duneci/modules
-
-# move source files into the image
-COPY --chown=duneci ./ /duneci/modules/dune-copasi
-
-# run installer
-RUN ./dune-copasi/.ci/install /duneci/dune.opts
-
-# tests installer
-RUN ./dune-copasi/.ci/test /duneci/dune.opts
-
-# move results to a -lighter- production image
-FROM ${PRODUCTION_BASE_IMAGE} AS production-env
-LABEL maintainer="santiago.ospina@iwr.uni-heidelberg.de"
-
-# get package from build-env and install it
-COPY --from=build-env /duneci/packages/dune-copasi*Runtime.deb /packages/
-WORKDIR /packages/
-RUN rm -f /etc/apt/apt.conf.d/docker-gzip-indexes \
-  && rm -rf /var/lib/apt/lists/*
-RUN export DEBIAN_FRONTEND=noninteractive; \
-  apt-get update && apt-get dist-upgrade --no-install-recommends --yes \
-  && apt-get install --no-install-recommends --yes ./dune-copasi-*-Runtime.deb \
-  && apt-get clean && rm -rf /var/lib/apt/lists/*
-RUN rm -rf /packages
-
-# disable sudo user
-RUN adduser --disabled-password --home /dunecopasi --uid 50000 dunecopasi
-USER dunecopasi
-WORKDIR /dunecopasi
-
-# run help and expect no error signal
-RUN dune-copasi-md --help
-RUN dune-copasi-sd --help
-
-# set default mout point to be /dunecopasi (same as workdir!)
-VOLUME ["/dunecopasi"]
-# run dune-copasi-md by default when running the image
-ENTRYPOINT ["dune-copasi-md"]
diff --git a/Dockerfile b/Dockerfile
new file mode 120000
index 0000000000000000000000000000000000000000..ae4f636572528fe841946fb229fbb57647dc360f
--- /dev/null
+++ b/Dockerfile
@@ -0,0 +1 @@
+docker/dune-copasi.dockerfile
\ No newline at end of file
diff --git a/docker/deploy.dockerfile b/docker/deploy.dockerfile
new file mode 100644
index 0000000000000000000000000000000000000000..82e6589b26da8cf96f075c575f8f9368fa368536
--- /dev/null
+++ b/docker/deploy.dockerfile
@@ -0,0 +1,30 @@
+ARG PRODUCTION_BASE_IMAGE=${BASE_IMAGE}
+
+# move results to a -lighter- production image
+FROM ${PRODUCTION_BASE_IMAGE} AS production-env
+LABEL maintainer="santiago.ospina@iwr.uni-heidelberg.de"
+
+# get package from host 'packages' directory and install it
+COPY ./packages /packages/
+WORKDIR /packages/
+RUN rm -f /etc/apt/apt.conf.d/docker-gzip-indexes \
+  && rm -rf /var/lib/apt/lists/*
+RUN export DEBIAN_FRONTEND=noninteractive; \
+  apt-get update && apt-get dist-upgrade --no-install-recommends --yes \
+  && apt-get install --no-install-recommends --yes ./dune-copasi-*-Runtime.deb \
+  && apt-get clean && rm -rf /var/lib/apt/lists/*
+RUN rm -rf /packages
+
+# disable sudo user
+RUN adduser --disabled-password --home /dunecopasi --uid 50000 dunecopasi
+USER dunecopasi
+WORKDIR /dunecopasi
+
+# run help and expect no error signal
+RUN dune-copasi-md --help
+RUN dune-copasi-sd --help
+
+# set default mout point to be /dunecopasi (same as workdir!)
+VOLUME ["/dunecopasi"]
+# run dune-copasi-md by default when running the image
+ENTRYPOINT ["dune-copasi-md"]
diff --git a/docker/dune-copasi.dockerfile b/docker/dune-copasi.dockerfile
new file mode 100644
index 0000000000000000000000000000000000000000..34b5d6dc4af12a1198cad099f6dee1196868c877
--- /dev/null
+++ b/docker/dune-copasi.dockerfile
@@ -0,0 +1,72 @@
+ARG BASE_IMAGE=debian:10
+
+ARG SETUP_BASE_IMAGE=registry.dune-project.org/docker/ci/${BASE_IMAGE}
+ARG BUILD_BASE_IMAGE=setup-env
+ARG PRODUCTION_BASE_IMAGE=${BASE_IMAGE}
+
+# setup of dune dependencies
+FROM ${SETUP_BASE_IMAGE} AS setup-env
+
+ARG TOOLCHAIN=clang-6-17
+
+ENV PATH=/duneci/install/bin:$PATH
+ENV TERM=xterm-256color
+ENV CMAKE_INSTALL_PREFIX=/duneci/install
+ENV SETUP_DUNE_TESTTOOLS=ON
+ENV DUNE_VENDOR_FMT=ON
+
+COPY --chown=duneci ./dune-copasi.opts /duneci/cmake-flags/
+COPY --chown=duneci ./.ci /duneci/modules/dune-copasi/.ci
+
+RUN    ln -s /duneci/toolchains/${TOOLCHAIN} /duneci/toolchain \
+    && export PATH=/duneci/install/bin:$PATH
+WORKDIR /duneci/modules
+RUN mkdir -p /duneci/modules/dune-copasi/.ci
+RUN ./dune-copasi/.ci/setup_dune /duneci/dune.opts
+
+# build and install dune-copasi from the setup-env
+FROM ${BUILD_BASE_IMAGE} AS build-env
+
+ENV DUNE_COPASI_SD_EXECUTABLE='ON'
+ENV CPACK_GENERATORS=DEB
+ENV CPACK_PACKAGE_DIRECTORY=/duneci/packages
+
+WORKDIR /duneci/modules
+
+# move source files into the image
+COPY --chown=duneci ./ /duneci/modules/dune-copasi
+
+# run installer
+RUN ./dune-copasi/.ci/install /duneci/dune.opts
+
+# tests installer
+RUN ./dune-copasi/.ci/test /duneci/dune.opts
+
+# move results to a -lighter- production image
+FROM ${PRODUCTION_BASE_IMAGE} AS production-env
+LABEL maintainer="santiago.ospina@iwr.uni-heidelberg.de"
+
+# get package from build-env and install it
+COPY --from=build-env /duneci/packages/dune-copasi*Runtime.deb /packages/
+WORKDIR /packages/
+RUN rm -f /etc/apt/apt.conf.d/docker-gzip-indexes \
+  && rm -rf /var/lib/apt/lists/*
+RUN export DEBIAN_FRONTEND=noninteractive; \
+  apt-get update && apt-get dist-upgrade --no-install-recommends --yes \
+  && apt-get install --no-install-recommends --yes ./dune-copasi-*-Runtime.deb \
+  && apt-get clean && rm -rf /var/lib/apt/lists/*
+RUN rm -rf /packages
+
+# disable sudo user
+RUN adduser --disabled-password --home /dunecopasi --uid 50000 dunecopasi
+USER dunecopasi
+WORKDIR /dunecopasi
+
+# run help and expect no error signal
+RUN dune-copasi-md --help
+RUN dune-copasi-sd --help
+
+# set default mout point to be /dunecopasi (same as workdir!)
+VOLUME ["/dunecopasi"]
+# run dune-copasi-md by default when running the image
+ENTRYPOINT ["dune-copasi-md"]