diff --git a/container/Dockerfile b/container/Dockerfile
new file mode 100644
index 0000000000000000000000000000000000000000..481b72fd03297d248d83c76c8e0b6a0ada521ceb
--- /dev/null
+++ b/container/Dockerfile
@@ -0,0 +1,141 @@
+FROM ubuntu:18.04
+
+# ARGUMENTS
+###########
+ARG OPENSTRUCTURE_VERSION="1.9.0"
+ARG PROMOD_VERSION="1.3.0"
+ARG SRC_FOLDER="/usr/local/src"
+ARG CPUS_FOR_MAKE=2
+ARG COMPLIB_DIR="/usr/local/share/ost_complib"
+ARG OPENMM_VERSION="7.1.1"
+ARG OPENMM_INCLUDE_PATH="/usr/local/openmm/include/"
+ARG OPENMM_LIB_PATH="/usr/local/openmm/lib/"
+
+ENV DEBIAN_FRONTEND=noninteractive
+
+# INSTALL SYSTEM DEPS
+#####################
+RUN apt-get update -y && apt-get install -y cmake \
+										                        sip-dev \
+										                        libtiff-dev \
+										                        libfftw3-dev \
+										                        libeigen3-dev \
+										                        libboost-all-dev \
+										                        libpng-dev \
+										                        python2.7 \
+										                        python-qt4 \
+                                            python-numpy \
+                                            python-scipy \
+                                            python-pandas \
+                                            python-matplotlib \
+										                        qt4-qtconfig \
+										                        qt4-qmake \
+										                        libqt4-dev \
+										                        libpng-dev \
+										                        wget \
+										                        gfortran \
+										                        python-pip \
+                                            python-sphinx \
+										                        tar \
+										                        libbz2-dev \
+										                        doxygen \
+										                        swig \
+										                        clustalw \
+                                            dssp \
+                                            locales && \
+                      # CLEANUP
+                      rm -rf /var/lib/apt/lists/*
+
+# SET LOCALE
+############
+# RUN echo "LC_ALL=en_US.UTF-8" >> /etc/environment
+# RUN echo "en_US.UTF-8 UTF-8" >> /etc/locale.gen
+# RUN echo "LANG=en_US.UTF-8" > /etc/locale.conf
+# RUN locale-gen en_US.UTF-8
+
+# ENVIRONMENT
+##############################################################################
+ENV OPENSTRUCTURE_VERSION="${OPENSTRUCTURE_VERSION}"
+ENV PROMOD_VERSION="${PROMOD_VERSION}"
+ENV OST_ROOT="/usr/local"
+ENV DNG_ROOT="/usr/local"
+ENV PROMOD_ROOT="/usr/local"
+ENV PYTHONPATH="/usr/local/lib64/python2.7/site-packages:${PYTHONPATH}"
+ENV LD_LIBRARY_PATH="/usr/local/lib64:/usr/local/openmm/lib/$LD_LIBRARY_PATH"
+ENV QT_X11_NO_MITSHM=1
+
+# COMPILE OPENMM FROM SOURCES. INSTALL TO /usr/local
+####################################################
+RUN cd ${SRC_FOLDER} && \
+    wget -O openmm-${OPENMM_VERSION}.tar.gz -nc https://github.com/pandegroup/openmm/archive/${OPENMM_VERSION}.tar.gz && \
+    mkdir ${SRC_FOLDER}/openmm-${OPENMM_VERSION} && \
+    tar xf openmm-${OPENMM_VERSION}.tar.gz -C ${SRC_FOLDER}/openmm-${OPENMM_VERSION} --strip-components=1 && \
+    mkdir -p ${SRC_FOLDER}/openmm-${OPENMM_VERSION}/build && \
+    cd ${SRC_FOLDER}/openmm-${OPENMM_VERSION}/build && \
+    cmake .. && make -j $CPUS_FOR_MAKE && make install && \
+    cd ${SRC_FOLDER}/openmm-${OPENMM_VERSION}/build/python && \
+    python setup.py build && python setup.py install && \
+    cd ${SRC_FOLDER} && rm ${SRC_FOLDER}/openmm-${OPENMM_VERSION}.tar.gz && \
+    rm -rf ${SRC_FOLDER}/openmm-${OPENMM_VERSION}
+
+# INSTALL OST
+#############
+RUN cd ${SRC_FOLDER} && \
+    # copy ost release
+    wget -O openstructure-${OPENSTRUCTURE_VERSION}.tar.gz -nc https://git.scicore.unibas.ch/schwede/openstructure/repository/${OPENSTRUCTURE_VERSION}/archive.tar.gz && \
+    mkdir openstructure-${OPENSTRUCTURE_VERSION} && \
+    tar xf openstructure-${OPENSTRUCTURE_VERSION}.tar.gz -C ${SRC_FOLDER}/openstructure-${OPENSTRUCTURE_VERSION} --strip-components=1 && \
+    mkdir -p ${SRC_FOLDER}/openstructure-${OPENSTRUCTURE_VERSION}/build && \
+    cd ${SRC_FOLDER}/openstructure-${OPENSTRUCTURE_VERSION}/build && \
+    # cmake ost
+    cmake .. -DPYTHON_LIBRARIES=/usr/lib/x86_64-linux-gnu/libpython2.7.so \
+             -DOPTIMIZE=ON \
+             -DENABLE_MM=ON \
+             -DCOMPILE_TMTOOLS=1 \
+             -DOPEN_MM_LIBRARY=$OPENMM_LIB_PATH/libOpenMM.so \
+             -DOPEN_MM_INCLUDE_DIR=$OPENMM_INCLUDE_PATH \
+             -DOPEN_MM_PLUGIN_DIR=$OPENMM_LIB_PATH/plugins \
+             -DENABLE_GFX=ON \
+             -DENABLE_GUI=ON && \
+    make -j ${CPUS_FOR_MAKE} &&\
+    # get the compound library \
+    wget ftp://ftp.wwpdb.org/pub/pdb/data/monomers/components.cif.gz &&\
+    stage/bin/chemdict_tool create components.cif.gz compounds.chemlib pdb && stage/bin/chemdict_tool update modules/conop/data/charmm.cif compounds.chemlib charmm &&\
+    mkdir -p $COMPLIB_DIR && chmod a+rw -R $COMPLIB_DIR && mv compounds.chemlib $COMPLIB_DIR && \
+    # rerun cmake and specify compount lib location
+    cmake .. -DCOMPOUND_LIB=$COMPLIB_DIR/compounds.chemlib && \
+    # Build OST with compound library
+    make -j ${CPUS_FOR_MAKE} && make check && make install && \
+    # cleanup
+    cd ${SRC_FOLDER} && rm ${SRC_FOLDER}/openstructure-${OPENSTRUCTURE_VERSION}.tar.gz && \
+    rm -rf ${SRC_FOLDER}/openstructure-${OPENSTRUCTURE_VERSION} && \
+    # BEND AROUND COMPOUND LIB
+    # By default, the compound library is moved to 
+    # /usr/local/share/openstructure/compounds.chemlib upon building
+    # We replace that file with a symbolic link to the compound.chemlib in
+    # $COMPLIB_DIR
+    # The advantage is that we can later on mount any directory containing this file
+    # in that directory and override the compound lib with updated versions.
+    rm /usr/local/share/openstructure/compounds.chemlib && \
+    ln -s $COMPLIB_DIR/compounds.chemlib /usr/local/share/openstructure/compounds.chemlib
+
+# INSTALL ProMod3
+#################
+RUN cd ${SRC_FOLDER} && \
+    # copy promod release
+    wget -O promod-${PROMOD_VERSION}.tar.gz -nc https://git.scicore.unibas.ch/schwede/ProMod3/repository/${PROMOD_VERSION}/archive.tar.gz && \
+    mkdir promod-${PROMOD_VERSION} && \
+    tar xf promod-${PROMOD_VERSION}.tar.gz -C ${SRC_FOLDER}/promod-${PROMOD_VERSION} --strip-components=1 && \
+    mkdir -p ${SRC_FOLDER}/promod-${PROMOD_VERSION}/build && \
+    cd ${SRC_FOLDER}/promod-${PROMOD_VERSION}/build && \
+    # Build and install ProMod3
+    cmake .. -DOST_ROOT=/usr/local \
+             -DPYTHON_LIBRARIES=/usr/lib/x86_64-linux-gnu/libpython2.7.so \
+             -DOPTIMIZE=ON \
+             -DENABLE_SSE=1 && \
+             make && make codetest && make install && \
+    # cleanup
+    cd ${SRC_FOLDER} && rm ${SRC_FOLDER}/promod-${PROMOD_VERSION}.tar.gz && \
+    rm -rf ${SRC_FOLDER}/promod-${PROMOD_VERSION}
+
+WORKDIR /home
diff --git a/doc/container.rst b/doc/container.rst
index 10e895ba4e3f19d174590eba55a872d87c3efc3b..85625eb21e20bcc521a4d271ae114284dd9dff45 100644
--- a/doc/container.rst
+++ b/doc/container.rst
@@ -2,4 +2,105 @@ ProMod3 and Containers
 ======================
 
 
-Here comes some fantastic documentation on how to build ProMod3 containers...
+ProMod3 offers build recipes for Docker and Singularity in 
+<PATH_TO_PROMOD3_CHECKOUT>/container. To avoid code duplication, 
+the Singularity container bootstraps from the Docker one and adds 
+some sugar on top.
+
+Docker
+------
+
+Build image
+-----------
+
+In order to build the image:
+
+.. code-block:: bash
+
+  docker build --tag <IMAGE_NAME> -f Dockerfile <PATH TO DOCKERFILE DIR>
+
+You can chose any image name (tag) eg. promod. 
+
+
+Run script and actions with OST/PM
+----------------------------------
+
+If script or action requires some external files eg. PDBs, they have to be located in the
+path accessible via mounted volume and should be accessed via docker (NOT LOCAL)
+path. Eg. assuming that we have a struc.pdb file in /home/user/pdbs directory and
+a script.py in /home/user we could mount the /home/user to /home in docker as
+above by specifying -v /home/user:/home. To run the script we thus need to
+provide the (relative) path to the script and (relative) path to the file eg:
+
+.. code-block:: bash
+
+  docker run --rm -v /home/<USER>:/home <IMAGE_NAME> pm script.py pdbs/struct.pdb
+
+or with absolute paths:
+
+.. code-block:: bash
+
+  docker run --rm -v /home/<USER>:/home <IMAGE_NAME> pm /home/script.py /home/pdbs/struct.pdb
+
+An alternative is to mount the current working directory into the docker home:
+
+.. code-block:: bash
+
+  docker run --rm -v $(pwd):/home <IMAGE_NAME> pm script.py pdbs/struct.pdb
+
+
+The Compound Library
+--------------------
+
+At build time of the container, a :class:`~ost.conop.CompoundLib` is generated.
+Compound libraries contain information on chemical compounds, such as their 
+connectivity, chemical class and one-letter-code. The compound library has 
+several uses, but the most important one is to provide the connectivy 
+information for the rule-based processor.
+
+The compound library is generated with the components.cif dictionary provided by 
+the PDB. As the PDB updates regularly, the compound library shipped with the 
+container is quickly outdated. For most use cases, this is not problematic. 
+However, if you rely on correct connectivity information of the latest and 
+greatest compounds, you have to keep the compound library up to date manually.
+
+The suggested way of doing this is to generate your own compound library and
+mount it into the container where the original compound lib resides to 
+override it.
+
+The simplest way to create compound library is to use the 
+:program:`chemdict_tool` available in the container. The programs allows you 
+to import the chemical description of the compounds from a MMCIF dictionary, 
+e.g. the components.cif dictionary provided by the PDB. 
+The latest dictionary can be downloaded from the 
+`wwPDB site <http://www.wwpdb.org/ccd.html>`_. 
+The files are rather large, it is therefore recommended to download the 
+gzipped version. 
+
+After downloading the file use :program:`chemdict_tool` in the container to 
+convert the MMCIF  dictionary into our internal format: 
+
+.. code-block:: bash
+
+  docker run --rm -v $(pwd):/home <IMAGE_NAME> chemdict_tool create components.cif compounds.chemlib
+
+To run a script with the upated compound library, use the -v option for overriding:
+
+.. code-block:: bash
+
+  docker run --rm -v /home/user:/home -v <COMPLIB_DIR_LOCALHOST>:<COMPLIB_DIR_CONTAINER> <IMAGE_NAME> script.py pdbs/struct.pdb
+
+with COMPLIB_DIR_LOCALHOST being the directory that contains the newly generated 
+compound library and COMPLIB_DIR_CONTAINER the according path in the container.
+If you didnt change anything in the Dockerfile, the latter should be
+/usr/local/share/ost_complib
+  
+You can check whether the default lib is successfully overriden by looking at the
+output when running a Python script with following code in the container:
+
+.. code-block:: python
+
+  import promod3 # required to setup default lib
+  from ost import conop
+  lib = conop.GetDefaultLib()
+  print lib.GetCreationDate()