diff --git a/.dockerignore b/.dockerignore
new file mode 100644
index 0000000000000000000000000000000000000000..1e5cbdb1f27baf8e931d5f6c6b9316516c9709b8
--- /dev/null
+++ b/.dockerignore
@@ -0,0 +1,2 @@
+.git*
+benchmark.*
diff --git a/Dockerfile b/Dockerfile
new file mode 100644
index 0000000000000000000000000000000000000000..1151032651df419b03000ace0545ff23b56058f9
--- /dev/null
+++ b/Dockerfile
@@ -0,0 +1,30 @@
+FROM rocker/shiny
+
+RUN R -e 'install.packages( \
+    c("BiocManager", "DT", "dplyr", "factoextra", "glue", "microbenchmark", "shinycustomloader", "shinydashboard"), \
+    Ncpus='$(nproc)', \
+    clean=1, \
+    verbose=1 \
+    )'
+
+RUN R -e 'BiocManager::install("phyloseq", Ncpus='$(nproc)', clean=1)'
+
+ARG DUMB_INIT_VERSION=1.2.2
+RUN wget -O /sbin/dumb-init https://github.com/Yelp/dumb-init/releases/download/v${DUMB_INIT_VERSION}/dumb-init_${DUMB_INIT_VERSION}_amd64 \
+    && chmod +x /sbin/dumb-init
+ENTRYPOINT ["/sbin/dumb-init", "--"]
+
+CMD ["/usr/bin/shiny-server.sh"]
+
+RUN rm -rf /srv/shiny-server/* \
+    && mkdir -p /srv/shiny-server/easy16s /var/lib/shiny-server
+
+ADD *.R /srv/shiny-server/easy16s/
+ADD demo/demo.RData demo/chaillou.* /srv/shiny-server/easy16s/demo/
+ADD www /srv/shiny-server/easy16s/www
+
+RUN chmod -R a+rX /srv/shiny-server/ \
+    && chgrp shiny /var/lib/shiny-server \
+    && chmod g+rwxs /var/lib/shiny-server
+
+USER shiny