diff --git a/.dockerignore b/.dockerignore
new file mode 100644
index 0000000000000000000000000000000000000000..6f01cb222eb3201710d40c4a5fb9f3ad4a50aae9
--- /dev/null
+++ b/.dockerignore
@@ -0,0 +1,3 @@
+/node_modules
+/public
+/.?*
diff --git a/Dockerfile b/Dockerfile
new file mode 100644
index 0000000000000000000000000000000000000000..5ccd71ef8f71cc3e397fa04a1f9190c256ff20be
--- /dev/null
+++ b/Dockerfile
@@ -0,0 +1,83 @@
+ARG NODE_VERSION=14
+ARG DEBIAN_RELEASE=buster
+FROM node:${NODE_VERSION}-${DEBIAN_RELEASE} AS builder
+
+RUN apt-get update -yq && apt-get install -yq unzip xz-utils wget
+
+RUN mkdir /src
+
+ARG REVEALJS_VERSION=v1.2.0
+RUN wget -nv -O /tmp/reveal.js.zip https://gitlab.irstea.fr/pole-is/tools/reveal.js/-/archive/${REVEALJS_VERSION}/reveal.js-${REVEALJS_VERSION}.zip \
+    && cd src \
+    && unzip /tmp/reveal.js.zip \
+    && mv reveal.js-${REVEALJS_VERSION} reveal.js \
+    && cd reveal.js \
+    && ./pleasew build :reveal.js
+
+FROM node:${NODE_VERSION}-${DEBIAN_RELEASE}
+
+COPY --from=builder /src/reveal.js/plz-out/gen/reveal.js /opt/reveal.js
+
+RUN apt-get update -yq \
+    && apt-get install -yq --no-install-recommends \
+    libappindicator3-1 \
+    libasound2 \
+    libatspi2.0-0 \
+    libgtk-3-0 \
+    libnotify4 \
+    libnss3 \
+    libsecret-1-0 \
+    libx11-xcb1 \
+    libxss1 \
+    libxtst6 \
+    wget \
+    xdg-utils \
+    xfonts-75dpi \
+    xfonts-base \
+    && find /var/*/apt -type f -delete
+
+ARG PANDOC_VERSION=2.9.2.1
+RUN wget -nv -O /tmp/pandoc.tar.gz https://github.com/jgm/pandoc/releases/download/${PANDOC_VERSION}/pandoc-${PANDOC_VERSION}-linux-amd64.tar.gz \
+    && cd /usr/local \
+    && tar xfz /tmp/pandoc.tar.gz --strip-components=1 \
+    && rm /tmp/pandoc.tar.gz \
+    && pandoc --version
+
+ARG DRAWIO_VERSION=13.0.3
+RUN wget -nv -O /tmp/draw.io.deb https://github.com/jgraph/drawio-desktop/releases/download/v${DRAWIO_VERSION}/draw.io-amd64-${DRAWIO_VERSION}.deb \
+    && dpkg -i /tmp/draw.io.deb \
+    && rm /tmp/draw.io.deb
+
+ARG WKHTMLTOPDF_VERSION=0.12.5
+ARG DEBIAN_RELEASE=buster
+RUN wget -nv -O /tmp/wkhtmltox.deb https://github.com/wkhtmltopdf/wkhtmltopdf/releases/download/${WKHTMLTOPDF_VERSION}/wkhtmltox_${WKHTMLTOPDF_VERSION}-1.${DEBIAN_RELEASE}_amd64.deb \
+    && dpkg -i /tmp/wkhtmltox.deb \
+    && rm /tmp/wkhtmltox.deb \
+    && wkhtmltopdf --version
+
+RUN mkdir -p /src /opt/prezbuilder
+COPY src/ /src/
+COPY assets/ /opt/prezbuilder/assets/
+COPY lib/ /opt/prezbuilder/lib/
+COPY gulpfile.esm.js package.json package-lock.json /opt/prezbuilder/
+
+ENV NODE_ENV=production
+RUN cd /opt/prezbuilder/ \
+    && ls -la \
+    && NPM_CONFIG_CACHE=/tmp/.npm npm install \\
+    && rm -rf /tmp/.npm
+
+ENV SERVER_HOST=0.0.0.0 \
+    SERVER_PORT=3000 \
+    SRC=/src \
+    OUTPUT=/public \
+    WKHTMLTOPDF_BINARY=/usr/local/bin/wkhtmltopdf \
+    DRAWIO_BINARY=/opt/draw.io/drawio
+
+RUN mkdir -p -m 0777 $OUTPUT
+
+WORKDIR /opt/prezbuilder
+EXPOSE 3000/tcp 35729/tcp
+
+ENTRYPOINT ["/opt/prezbuilder/node_modules/.bin/gulp"]
+CMD ["dev"]
diff --git a/package.json b/package.json
index 211e40f7b87b7679a93dd2768a695595478dd286..ec1f010f205b28096d89f2e9787a2dfd3d403811 100644
--- a/package.json
+++ b/package.json
@@ -1,10 +1,8 @@
 {
   "name": "prezbuilder",
   "version": "1.0.0",
-  "description": "Build INRAE-themed reveal.js presentatiokns.",
-  "main": "index.js",
+  "description": "Build INRAE-themed reveal.js presentations.",
   "scripts": {
-    "test": "echo \"Error: no test specified\" && exit 1",
     "build": "gulp build",
     "dev": "gulp dev",
     "lint": "eslint --color ."