diff --git a/.dockerignore b/.dockerignore
new file mode 100644
index 0000000000000000000000000000000000000000..77b9ea6b179aaa31c73ebb6e8d37ab825248d391
--- /dev/null
+++ b/.dockerignore
@@ -0,0 +1,12 @@
+/artwork
+/config
+/coverage
+/database
+/doc
+/node_modules
+nodemon.json
+/service
+/.git
+
+*.swp
+*.log
diff --git a/Dockerfile b/Dockerfile
new file mode 100644
index 0000000000000000000000000000000000000000..df24ec043cf142554151ae68703d92fe89e5ce27
--- /dev/null
+++ b/Dockerfile
@@ -0,0 +1,51 @@
+# Avoid the use of floating tags like: latest, boron, argon and carbon
+ARG VERSION=6.12.2
+FROM node:$VERSION
+
+LABEL autor="C3SL - Centro de Computação Científica e Software Livre"
+
+
+# Node was not designed to run as PID 1 (process in docker run with PID 1).
+# Its recommended to use the flag --init or use tine to start node process
+# in docker
+
+# Add Tini
+ENV TINI_VERSION="v0.16.1" WORKSPACE="/home/node/app/"
+ADD https://github.com/krallin/tini/releases/download/${TINI_VERSION}/tini /tini
+
+# Install app dependencies
+# A wildcard is used to ensure both package.json AND package-lock.json are copied
+# where available (npm@5+)
+
+COPY package*.json $WORKSPACE
+RUN \
+    chmod +x /tini &&\
+    chown -R node:node $WORKSPACE
+
+USER node
+WORKDIR $WORKSPACE
+
+RUN npm install
+
+# Bundle app source
+# COPY copy files as root so chown must be used
+USER root
+COPY . .
+RUN find . -user root | xargs chown node:node
+USER node
+
+VOLUME ["/home/node/app/config"]
+
+EXPOSE 3000
+
+HEALTHCHECK CMD curl -f http://localhost:3000/v1/metrics || exit 1
+
+# Instead of using npm start to start the container, directly put the command
+# that npm start executes.
+# First off this reduces the number of processes running inside of your container
+# Secondly it causes exit signals such as SIGTERM and SIGINT to be received by
+# the Node.js process instead of npm swallowing them.
+
+
+ENTRYPOINT ["/tini", "--"]
+CMD ["node", "index" ]