diff --git a/.dockerignore b/.dockerignore
new file mode 100644
index 0000000000000000000000000000000000000000..93f13619916123cf5434dab2ffcc8263c7420af1
--- /dev/null
+++ b/.dockerignore
@@ -0,0 +1,2 @@
+node_modules
+npm-debug.log
diff --git a/Dockerfile b/Dockerfile
new file mode 100644
index 0000000000000000000000000000000000000000..d7434031815859b74b9ab122fe3700104e231c80
--- /dev/null
+++ b/Dockerfile
@@ -0,0 +1,23 @@
+FROM node:10.4-alpine
+
+RUN mkdir /opt/hipla-full-stack && chown node:node /opt/hipla-full-stack
+
+# Create app directory
+WORKDIR /opt/hipla-full-stack
+
+USER node
+
+# 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 ./
+COPY webpack*.js ./
+
+# Bundle app source
+COPY src ./src
+
+RUN npm install && npm run build
+
+EXPOSE 3001
+
+CMD ["node", "dist/server"]
diff --git a/README.md b/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..fe1588bffa5e4d235ac7bc3d139c7623007c80ef
--- /dev/null
+++ b/README.md
@@ -0,0 +1,15 @@
+# Hipla.fi
+
+## Build
+ `docker build -t hipla-full-stack .`
+
+## Run
+ `docker run -d -p 3005:3001 --name hipla hipla-full-stack`
+
+## Upgrade
+```
+docker build -t hipla-full-stack .
+docker stop hipla
+docker rm hipla
+docker run -d -p 3005:3001 --name hipla hipla-full-stack
+```