diff --git a/dockerfiles/email/postfix/Dockerfile b/dockerfiles/email/postfix/Dockerfile
new file mode 100644
index 0000000000000000000000000000000000000000..b812db993c1a212cfdac866778bad6212c9485d3
--- /dev/null
+++ b/dockerfiles/email/postfix/Dockerfile
@@ -0,0 +1,25 @@
+FROM debian:jessie
+MAINTAINER Michiel de Jong <michiel@indiehosters.net>
+
+# Borrows from https://docs.docker.com/articles/dockerfile_best-practices/
+# Borrows from https://registry.hub.docker.com/u/previousnext/postfix
+# Borrows from https://registry.hub.docker.com/u/catatnight/postfix
+
+ENV DEBIAN_FRONTEND noninteractive
+RUN apt-get update \
+	&& echo "postfix postfix/main_mailer_type string 'Internet site'" | debconf-set-selections \
+	&& echo "postfix postfix/mailname string 'HOSTNAME.EXAMPLE.COM'" | debconf-set-selections \
+	&& echo "postfix postfix/root_address string 'ROOTMAIL@EXAMPLE.COM'" | debconf-set-selections \
+	&& apt-get install -q -y \
+		postfix \
+		rsyslog \
+		supervisor \
+	&& rm -rf /var/lib/apt/lists/*
+
+COPY assets/install.sh /opt/install.sh
+
+VOLUME ["/etc/postfix", "/var/spool/mail", "/var/log"]
+
+EXPOSE 25
+
+CMD /opt/install.sh;/usr/bin/supervisord -c /etc/supervisor/supervisord.conf
diff --git a/dockerfiles/email/postfix/assets/install.sh b/dockerfiles/email/postfix/assets/install.sh
new file mode 100755
index 0000000000000000000000000000000000000000..6fb2b76e521bc3d4ed52b1300dac5f4f5a9b360a
--- /dev/null
+++ b/dockerfiles/email/postfix/assets/install.sh
@@ -0,0 +1,45 @@
+#!/bin/bash
+
+#judgement
+if [[ -a /etc/supervisor/conf.d/supervisord.conf ]]; then
+  exit 0
+fi
+
+#supervisor
+cat > /etc/supervisor/conf.d/supervisord.conf <<EOF
+[supervisord]
+nodaemon=true
+
+[program:postfix]
+command=/opt/postfix.sh
+
+[program:rsyslog]
+command=/usr/sbin/rsyslogd -n
+EOF
+
+############
+# postfix
+############
+cat >> /opt/postfix.sh <<EOF
+#!/bin/bash
+service postfix start
+touch /var/log/mail.log
+tail -f /var/log/mail.log
+EOF
+chmod +x /opt/postfix.sh
+
+# put the same FQDN in /data/hostname and in reverse DNS
+# for the public IP address on which this server will be
+# receiving smtp traffic.
+cp /data/hostname /etc/mailname
+/usr/sbin/postconf -e "myhostname=`cat /data/hostname`"
+
+# put all relevant domains in /data/destinations.
+/usr/sbin/postconf -e "mydestination=`cat /data/destinations`"
+
+#put your forwarding addresses in /data/forwards.
+echo "virtual_maps = hash:/etc/postfix/virtual, regexp:/etc/postfix/virtual-regexp" >> /etc/postfix/main.cf
+cp /data/forwards /etc/postfix/virtual-regexp
+postmap /etc/postfix/virtual-regexp
+touch /etc/postfix/virtual
+postmap /etc/postfix/virtual
diff --git a/dockerfiles/load-balancer/confd/Dockerfile b/dockerfiles/load-balancer/confd/Dockerfile
new file mode 100644
index 0000000000000000000000000000000000000000..71472eb3f8adfeb8734dfec77ee259a721ca71ec
--- /dev/null
+++ b/dockerfiles/load-balancer/confd/Dockerfile
@@ -0,0 +1,22 @@
+FROM debian:jessie
+
+ENV DEBIAN_FRONTEND noninteractive
+
+RUN \
+  apt-get update &&\
+  apt-get install -y \
+    wget \
+    ca-certificates &&\
+  rm -rf /var/lib/apt/lists/*
+
+RUN \
+  wget https://github.com/kelseyhightower/confd/releases/download/v0.6.3/confd-0.6.3-linux-amd64 -O confd && \
+  chmod +x confd
+
+RUN \
+  wget https://get.docker.com/builds/Linux/x86_64/docker-1.2.0 -O docker && \
+  chmod +x docker
+
+VOLUME ["/etc/confd/", "/etc/haproxy"]
+ENTRYPOINT ["/confd"]
+CMD ["-interval=60", "-node=172.17.42.1:4001"]
diff --git a/dockerfiles/load-balancer/confd/README.md b/dockerfiles/load-balancer/confd/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..d489acf00bb69de8df2765fc2d3bdd5cf99803f3
--- /dev/null
+++ b/dockerfiles/load-balancer/confd/README.md
@@ -0,0 +1,19 @@
+# Confd
+
+The smallest confd docker image in town ;)
+
+## Run
+
+This image will log everything to stdout/stderr.
+
+It was designed to work with HAproxy, but you can use it for anything! There is no configuration, you'll have to mount the config folder. There is a nice example in [indiehosters/confd git repo](https://github.com/indiehosters/dockerfiles/tree/master/server-wide/confd).
+
+```bash
+docker run\
+  -v /haproxy-config:/etc/haproxy/\
+  -v ./confd/:/etc/confd/\
+  -v /var/run/docker.sock:/var/run/docker.sock\
+indiehosters/confd
+```
+
+It works really well with [indiehosters/haproxy](https://registry.hub.docker.com/u/indiehosters/haproxy/) to have automatic configuration of HAproxy backed by `etcd` or `consul`.
diff --git a/dockerfiles/load-balancer/confd/confd/conf.d/crt-list.toml b/dockerfiles/load-balancer/confd/confd/conf.d/crt-list.toml
new file mode 100644
index 0000000000000000000000000000000000000000..ef435f2eebbd475736686c03fd1dfc4087cb78e2
--- /dev/null
+++ b/dockerfiles/load-balancer/confd/confd/conf.d/crt-list.toml
@@ -0,0 +1,7 @@
+[template]
+src  = "crt-list.tmpl"
+dest = "/etc/haproxy/crt-list"
+keys = [
+  "/services"
+]
+reload_cmd = "/docker kill --signal=\"SIGUSR1\" haproxy"
diff --git a/dockerfiles/load-balancer/confd/confd/conf.d/haproxy.toml b/dockerfiles/load-balancer/confd/confd/conf.d/haproxy.toml
new file mode 100644
index 0000000000000000000000000000000000000000..d3554213d797707dc76f507ce18dc280808e75a1
--- /dev/null
+++ b/dockerfiles/load-balancer/confd/confd/conf.d/haproxy.toml
@@ -0,0 +1,7 @@
+[template]
+src  = "haproxy.cfg.tmpl"
+dest = "/etc/haproxy/haproxy.cfg"
+keys = [
+  "/services"
+]
+reload_cmd = "/docker kill --signal=\"SIGUSR1\" haproxy"
diff --git a/dockerfiles/load-balancer/confd/confd/templates/crt-list.tmpl b/dockerfiles/load-balancer/confd/confd/templates/crt-list.tmpl
new file mode 100644
index 0000000000000000000000000000000000000000..391fa958ca43aafe16896f691311e48ed3a05e6d
--- /dev/null
+++ b/dockerfiles/load-balancer/confd/confd/templates/crt-list.tmpl
@@ -0,0 +1,7 @@
+{{range $app := lsdir "/services"}}
+{{$hostnames := printf "/services/%s/*" $app}}
+  {{range gets $hostnames}}
+    {{$hostname := .Key}}
+/etc/haproxy/approved-certs/{{base $hostname}}.pem {{base $hostname}}
+  {{end}}
+{{end}}
diff --git a/dockerfiles/load-balancer/confd/confd/templates/haproxy.cfg.tmpl b/dockerfiles/load-balancer/confd/confd/templates/haproxy.cfg.tmpl
new file mode 100644
index 0000000000000000000000000000000000000000..bf6aab89fd5b72b1f7923ae6b6612fa6c03ece3c
--- /dev/null
+++ b/dockerfiles/load-balancer/confd/confd/templates/haproxy.cfg.tmpl
@@ -0,0 +1,63 @@
+{{$default_service_value := getv "/services/default"}}
+{{$default_service := json $default_service_value}}
+{{$default_url := printf "/services/%s/%s" $default_service.app $default_service.hostname}}
+{{$default_value := getv $default_url}}
+{{$default := json $default_value}}
+{{$default := json $default_value}}
+global
+  maxconn 4096
+  user haproxy
+  group haproxy
+
+defaults
+  mode http
+  option httplog
+  option dontlognull
+  retries 3
+  timeout connect 5000
+  timeout client 50000
+  timeout server 50000
+
+frontend https-in
+mode http
+  bind *:443 ssl crt-list /etc/haproxy/crt-list crt /etc/haproxy/approved-certs/{{$default_service.hostname}}.pem
+  reqadd X-Forwarded-Proto:\ https
+{{range $app := lsdir "/services"}}
+{{$hostnames := printf "/services/%s/*" $app}}
+  {{range gets $hostnames}}
+    {{$hostname := .Key}}
+    {{$data := json .Value}}
+# {{base $hostname}}:
+  acl https_{{base $hostname}} hdr(host) -i {{base $hostname}}
+  use_backend {{base $hostname}} if https_{{base $hostname}}
+  {{end}}
+{{end}}
+
+default_backend {{$default_service.hostname}}
+
+frontend http-in
+  bind *:80
+{{range $app := lsdir "/services"}}
+{{$hostnames := printf "/services/%s/*" $app}}
+  {{range gets $hostnames}}
+    {{$hostname := .Key}}
+    {{$data := json .Value}}
+# {{base $hostname}}:
+  acl is_{{base $hostname}} hdr(host) -i {{base $hostname}}
+  use_backend {{base $hostname}} if is_{{base $hostname}}
+  {{end}}
+{{end}}
+
+{{range $app := lsdir "/services"}}
+{{$hostnames := printf "/services/%s/*" $app}}
+  {{range gets $hostnames}}
+    {{$hostname := .Key}}
+    {{$data := json .Value}}
+# {{base $hostname}}:
+backend {{base $hostname}}
+  cookie SERVERID insert nocache indirect
+  option httpclose
+  option forwardfor
+  server Server {{$data.ip}}:{{$data.port}} cookie Server
+  {{end}}
+{{end}}
diff --git a/dockerfiles/load-balancer/haproxy/Dockerfile b/dockerfiles/load-balancer/haproxy/Dockerfile
new file mode 100644
index 0000000000000000000000000000000000000000..8d4cb5de09b36ae818db0587e5b3fe09b6307ada
--- /dev/null
+++ b/dockerfiles/load-balancer/haproxy/Dockerfile
@@ -0,0 +1,15 @@
+FROM debian:jessie
+
+ENV DEBIAN_FRONTEND noninteractive
+
+# Install Haproxy.
+RUN \
+  apt-get update && \
+  apt-get install -y haproxy && \
+  rm -rf /var/lib/apt/lists/*
+
+VOLUME ["/etc/haproxy"]
+ENTRYPOINT ["haproxy"]
+CMD ["-d", "-f", "/etc/haproxy/haproxy.cfg"]
+EXPOSE 80
+EXPOSE 443
diff --git a/dockerfiles/load-balancer/haproxy/README.md b/dockerfiles/load-balancer/haproxy/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..1c9542d403889aa976e0dfb2158dad2843bfa253
--- /dev/null
+++ b/dockerfiles/load-balancer/haproxy/README.md
@@ -0,0 +1,17 @@
+# HAproxy
+
+The smallest HAproxy docker image in town ;)
+
+## Run
+
+This image will log everything to stdout/stderr. Somehow, it respects 12-Factor App. But it uses the debug flag of HAProxy. If you have a better idea, please read this [blog post](http://pierre-o.fr/blog/2014/08/27/haproxy-coreos/) first.
+
+```bash
+docker run\
+  -v /haproxy-config:/etc/haproxy\
+  -p 80:80\
+  -p 443:443\
+  indiehosters/haproxy
+```
+
+Have a look to [indiehosters/confd](https://registry.hub.docker.com/u/indiehosters/confd/) to have automatic configuration of HAproxy backed by `etcd` or `consul`.
diff --git a/dockerfiles/services/apache/Dockerfile b/dockerfiles/services/apache/Dockerfile
new file mode 100644
index 0000000000000000000000000000000000000000..74b2ed4f1e45a50beec91972bbc65631b95b6fe3
--- /dev/null
+++ b/dockerfiles/services/apache/Dockerfile
@@ -0,0 +1,30 @@
+FROM debian:jessie
+
+ENV DEBIAN_FRONTEND noninteractive
+
+RUN apt-get update \
+	&& apt-get -yq install \
+		apache2 \
+		curl \
+		mysql-client \
+		libapache2-mod-php5 \
+		php-apc \
+		php-pear \
+		php5-curl \
+		php5-gd \
+		php5-mysql \
+		php5-xmlrpc \
+	&& rm -rf /var/lib/apt/lists/*
+
+# Add image configuration and scripts
+ADD default.conf /etc/apache2/sites-enabled/000-default.conf
+ADD run.sh /run.sh
+RUN sed -i "s/variables_order.*/variables_order = \"EGPCS\"/g" /etc/php5/apache2/php.ini \
+	&& mkdir -p /app \
+	&& rm -rf /var/www/html \
+	&& ln -s /app /var/www/html \
+	&& a2enmod rewrite \
+	&& chmod 755 /run.sh
+
+CMD ["/run.sh"]
+EXPOSE 80
diff --git a/dockerfiles/services/apache/default.conf b/dockerfiles/services/apache/default.conf
new file mode 100644
index 0000000000000000000000000000000000000000..89f730583c103642fbb432132d642774f8523e7e
--- /dev/null
+++ b/dockerfiles/services/apache/default.conf
@@ -0,0 +1,35 @@
+<VirtualHost *:80>
+  # The ServerName directive sets the request scheme, hostname and port that
+  # the server uses to identify itself. This is used when creating
+  # redirection URLs. In the context of virtual hosts, the ServerName
+  # specifies what hostname must appear in the request's Host: header to
+  # match this virtual host. For the default virtual host (this file) this
+  # value is not decisive as it is used as a last resort host regardless.
+  # However, you must set it for any further virtual host explicitly.
+  #ServerName www.example.com
+
+  ServerAdmin webmaster@localhost
+  DocumentRoot /var/www/html
+
+  # Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
+  # error, crit, alert, emerg.
+  # It is also possible to configure the loglevel for particular
+  # modules, e.g.
+  #LogLevel info ssl:warn
+
+  ErrorLog ${APACHE_LOG_DIR}/error.log
+  CustomLog ${APACHE_LOG_DIR}/access.log combined
+
+  # For most configuration files from conf-available/, which are
+  # enabled or disabled at a global level, it is possible to
+  # include a line for only one particular virtual host. For example the
+  # following line enables the CGI configuration for this host only
+  # after it has been globally disabled with "a2disconf".
+  #Include conf-available/serve-cgi-bin.conf
+  <Directory /var/www/html/>
+    Options -Indexes +FollowSymLinks +MultiViews
+    AllowOverride All
+    Order allow,deny
+    allow from all
+  </Directory>
+</VirtualHost>
diff --git a/dockerfiles/services/apache/run.sh b/dockerfiles/services/apache/run.sh
new file mode 100644
index 0000000000000000000000000000000000000000..5dccd01c797042d73a32bfe50cbeae8f9d060f4e
--- /dev/null
+++ b/dockerfiles/services/apache/run.sh
@@ -0,0 +1,3 @@
+#!/bin/bash
+source /etc/apache2/envvars
+exec apache2 -D FOREGROUND
diff --git a/dockerfiles/services/known/Dockerfile b/dockerfiles/services/known/Dockerfile
new file mode 100644
index 0000000000000000000000000000000000000000..81e4255f1fb5d2b6efa107461500e36bed1dfe43
--- /dev/null
+++ b/dockerfiles/services/known/Dockerfile
@@ -0,0 +1,25 @@
+FROM indiehosters/apache
+
+# Download latest version of Known into /app
+RUN mkdir -p ; cd /app ; curl -L http://assets.withknown.com/releases/known-0.6.5.tgz | tar xz
+RUN mkdir /uploads
+RUN chown www-data:www-data /uploads
+RUN cp /app/schemas/mysql/mysql.sql /initial_db.sql
+RUN mv /app/htaccess.dist /app/.htaccess
+
+# Add script to create 'known' DB
+ADD run-known.sh /run-known.sh
+RUN chmod 755 /run-known.sh
+
+# Expose environment variables
+ENV DB_HOST **LinkMe**
+ENV DB_PORT **LinkMe**
+ENV DB_NAME known
+ENV DB_USER admin
+ENV DB_PASS **ChangeMe**
+
+# to be cleaned up:
+
+EXPOSE 80
+VOLUME ["/app"]
+CMD ["/run-known.sh"]
diff --git a/dockerfiles/services/known/README.md b/dockerfiles/services/known/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..9d8bc3fba275ddc084bba4956091ea2f45ee0dc4
--- /dev/null
+++ b/dockerfiles/services/known/README.md
@@ -0,0 +1,13 @@
+# Usage
+
+````
+PASS=`pwgen 20 1`
+sudo docker pull debian:jessie
+sudo docker build -t indiehosters/apache ../apache
+sudo docker build -t indiehosters/known .
+sudo docker run -d -e MYSQL_PASS=$PASS --name mysql indiehosters/mysql
+sudo docker run -d -p 80:80 --link mysql:db -e DB_PASS=$PASS indiehosters/known
+echo Using $PASS as the database password. Waiting for everything to be up...
+sleep 20
+curl -I http://localhost/
+````
diff --git a/dockerfiles/services/known/run-known.sh b/dockerfiles/services/known/run-known.sh
new file mode 100644
index 0000000000000000000000000000000000000000..3a9f3f117dfb813d3c0f44f1dfd05750d1d40f65
--- /dev/null
+++ b/dockerfiles/services/known/run-known.sh
@@ -0,0 +1,78 @@
+#!/bin/bash
+
+chown -R root:www-data /app
+chmod -R 650 /app
+chmod -R 770 /app/known-content/
+chmod -R 660 /app/.htaccess
+
+if [ -f /.mysql_db_created ]; then
+        exec /run.sh
+        exit 1
+fi
+
+DB_HOST=${DB_PORT_3306_TCP_ADDR:-${DB_HOST}}
+DB_HOST=${DB_1_PORT_3306_TCP_ADDR:-${DB_HOST}}
+DB_PORT=${DB_PORT_3306_TCP_PORT:-${DB_PORT}}
+DB_PORT=${DB_1_PORT_3306_TCP_PORT:-${DB_PORT}}
+
+if [ "$DB_PASS" = "**ChangeMe**" ] && [ -n "$DB_1_ENV_MYSQL_PASS" ]; then
+    DB_PASS="$DB_1_ENV_MYSQL_PASS"
+fi
+
+echo "=> Trying to connect to MySQL/MariaDB using:"
+echo "========================================================================"
+echo "      Database Host Address:  $DB_HOST"
+echo "      Database Port number:   $DB_PORT"
+echo "      Database Name:          $DB_NAME"
+echo "      Database Username:      $DB_USER"
+echo "      Database Password:      $DB_PASS"
+echo "========================================================================"
+
+echo "database = 'MySQL'" > /app/config.ini
+echo "dbhost = '$DB_HOST'" >> /app/config.ini
+echo "dbname = '$DB_NAME'" >> /app/config.ini
+echo "dbuser = '$DB_USER'" >> /app/config.ini
+echo "dbpass = '$DB_PASS'" >> /app/config.ini
+echo "filesystem = 'local'" >> /app/config.ini
+echo "uploadpath = '/uploads/'" >> /app/config.ini
+chown root:www-data /app/config.ini
+chmod 640 /app/config.ini
+
+for ((i=0;i<10;i++))
+do
+    DB_CONNECTABLE=$(mysql -u$DB_USER -p$DB_PASS -h$DB_HOST -P$DB_PORT -e 'status' >/dev/null 2>&1; echo "$?")
+    if [[ DB_CONNECTABLE -eq 0 ]]; then
+        break
+    fi
+    sleep 5
+done
+
+if [[ $DB_CONNECTABLE -eq 0 ]]; then
+    DB_EXISTS=$(mysql -u$DB_USER -p$DB_PASS -h$DB_HOST -P$DB_PORT -e "SHOW DATABASES LIKE '"$DB_NAME"';" 2>&1 |grep "$DB_NAME" > /dev/null ; echo "$?")
+
+    if [[ DB_EXISTS -eq 1 ]]; then
+        echo "=> Creating database $DB_NAME"
+        RET=$(mysql -u$DB_USER -p$DB_PASS -h$DB_HOST -P$DB_PORT -e "CREATE DATABASE $DB_NAME")
+        if [[ RET -ne 0 ]]; then
+            echo "Cannot create database for known"
+            exit RET
+        fi
+        if [ -f /initial_db.sql ]; then
+            echo "=> Loading initial database data to $DB_NAME"
+            RET=$(mysql -u$DB_USER -p$DB_PASS -h$DB_HOST -P$DB_PORT $DB_NAME < /initial_db.sql)
+            if [[ RET -ne 0 ]]; then
+                echo "Cannot load initial database data for known"
+                exit RET
+            fi
+        fi
+        echo "=> Done!"
+    else
+        echo "=> Skipped creation of database $DB_NAME – it already exists."
+    fi
+else
+    echo "Cannot connect to Mysql"
+    exit $DB_CONNECTABLE
+fi
+
+touch /.mysql_db_created
+exec /run.sh
diff --git a/dockerfiles/services/mysql/Dockerfile b/dockerfiles/services/mysql/Dockerfile
new file mode 100644
index 0000000000000000000000000000000000000000..ac4dba372aece677b8696b4cddcb75e4b3c1acdd
--- /dev/null
+++ b/dockerfiles/services/mysql/Dockerfile
@@ -0,0 +1 @@
+FROM tutum/mysql
diff --git a/dockerfiles/services/nginx/Dockerfile b/dockerfiles/services/nginx/Dockerfile
new file mode 100644
index 0000000000000000000000000000000000000000..3fe45c5359538718bf2d9acb6b7a3afc2daeb584
--- /dev/null
+++ b/dockerfiles/services/nginx/Dockerfile
@@ -0,0 +1 @@
+FROM tutum/nginx
diff --git a/dockerfiles/services/wordpress/Dockerfile b/dockerfiles/services/wordpress/Dockerfile
new file mode 100644
index 0000000000000000000000000000000000000000..6aeaffc10e059c882182f8008844a5d0fc45a7a0
--- /dev/null
+++ b/dockerfiles/services/wordpress/Dockerfile
@@ -0,0 +1,21 @@
+FROM indiehosters/apache
+
+# Download latest version of Wordpress into /app
+RUN curl -L https://wordpress.org/wordpress-4.0.tar.gz | tar xz && \
+  mv wordpress/* app
+ADD wp-config.php /app/wp-config.php
+
+# Add script to create 'wordpress' DB
+ADD run-wordpress.sh /run-wordpress.sh
+RUN chmod 755 /run-wordpress.sh
+
+# Expose environment variables
+ENV DB_HOST **LinkMe**
+ENV DB_PORT **LinkMe**
+ENV DB_NAME wordpress
+ENV DB_USER admin
+ENV DB_PASS **ChangeMe**
+
+EXPOSE 80
+VOLUME ["/app/wp-content", "/app/.htaccess"]
+CMD ["/run-wordpress.sh"]
diff --git a/dockerfiles/services/wordpress/run-wordpress.sh b/dockerfiles/services/wordpress/run-wordpress.sh
new file mode 100644
index 0000000000000000000000000000000000000000..db9cd27b69ee6a92ba52c1cfe4e877e72d0cce13
--- /dev/null
+++ b/dockerfiles/services/wordpress/run-wordpress.sh
@@ -0,0 +1,68 @@
+#!/bin/bash
+
+chown -R root:www-data /app
+chmod -R 650 /app
+chmod -R 770 /app/wp-content/
+chmod -R 660 /app/.htaccess
+
+if [ -f /.mysql_db_created ]; then
+        exec /run.sh
+        exit 1
+fi
+
+DB_HOST=${DB_PORT_3306_TCP_ADDR:-${DB_HOST}}
+DB_HOST=${DB_1_PORT_3306_TCP_ADDR:-${DB_HOST}}
+DB_PORT=${DB_PORT_3306_TCP_PORT:-${DB_PORT}}
+DB_PORT=${DB_1_PORT_3306_TCP_PORT:-${DB_PORT}}
+
+if [ "$DB_PASS" = "**ChangeMe**" ] && [ -n "$DB_1_ENV_MYSQL_PASS" ]; then
+    DB_PASS="$DB_1_ENV_MYSQL_PASS"
+fi
+
+echo "=> Trying to connect to MySQL/MariaDB using:"
+echo "========================================================================"
+echo "      Database Host Address:  $DB_HOST"
+echo "      Database Port number:   $DB_PORT"
+echo "      Database Name:          $DB_NAME"
+echo "      Database Username:      $DB_USER"
+echo "      Database Password:      $DB_PASS"
+echo "========================================================================"
+
+for ((i=0;i<10;i++))
+do
+    DB_CONNECTABLE=$(mysql -u$DB_USER -p$DB_PASS -h$DB_HOST -P$DB_PORT -e 'status' >/dev/null 2>&1; echo "$?")
+    if [[ DB_CONNECTABLE -eq 0 ]]; then
+        break
+    fi
+    sleep 5
+done
+
+if [[ $DB_CONNECTABLE -eq 0 ]]; then
+    DB_EXISTS=$(mysql -u$DB_USER -p$DB_PASS -h$DB_HOST -P$DB_PORT -e "SHOW DATABASES LIKE '"$DB_NAME"';" 2>&1 |grep "$DB_NAME" > /dev/null ; echo "$?")
+
+    if [[ DB_EXISTS -eq 1 ]]; then
+        echo "=> Creating database $DB_NAME"
+        RET=$(mysql -u$DB_USER -p$DB_PASS -h$DB_HOST -P$DB_PORT -e "CREATE DATABASE $DB_NAME")
+        if [[ RET -ne 0 ]]; then
+            echo "Cannot create database for wordpress"
+            exit RET
+        fi
+        if [ -f /initial_db.sql ]; then
+            echo "=> Loading initial database data to $DB_NAME"
+            RET=$(mysql -u$DB_USER -p$DB_PASS -h$DB_HOST -P$DB_PORT $DB_NAME < /initial_db.sql)
+            if [[ RET -ne 0 ]]; then
+                echo "Cannot load initial database data for wordpress"
+                exit RET
+            fi
+        fi
+        echo "=> Done!"
+    else
+        echo "=> Skipped creation of database $DB_NAME – it already exists."
+    fi
+else
+    echo "Cannot connect to Mysql"
+    exit $DB_CONNECTABLE
+fi
+
+touch /.mysql_db_created
+exec /run.sh
diff --git a/dockerfiles/services/wordpress/wp-config.php b/dockerfiles/services/wordpress/wp-config.php
new file mode 100644
index 0000000000000000000000000000000000000000..09d83be8157f53f7463a5f361587ef3760b123ab
--- /dev/null
+++ b/dockerfiles/services/wordpress/wp-config.php
@@ -0,0 +1,95 @@
+<?php
+/**
+ * The base configurations of the WordPress.
+ *
+ * This file has the following configurations: MySQL settings, Table Prefix,
+ * Secret Keys, WordPress Language, and ABSPATH. You can find more information
+ * by visiting {@link http://codex.wordpress.org/Editing_wp-config.php Editing
+ * wp-config.php} Codex page. You can get the MySQL settings from your web host.
+ *
+ * This file is used by the wp-config.php creation script during the
+ * installation. You don't have to use the web site, you can just copy this file
+ * to "wp-config.php" and fill in the values.
+ *
+ * @package WordPress
+ */
+
+// ** MySQL settings - You can get this info from your web host ** //
+/** The name of the database for WordPress */
+define('DB_NAME', getenv('DB_NAME'));
+
+/** MySQL database username */
+define('DB_USER', getenv('DB_USER'));
+
+/** MySQL database password */
+define('DB_PASSWORD', getenv('DB_PASS'));
+
+/** MySQL hostname */
+define('DB_HOST', getenv('DB_HOST').":".getenv('DB_PORT'));
+
+/** Database Charset to use in creating database tables. */
+define('DB_CHARSET', 'utf8');
+
+/** The Database Collate type. Don't change this if in doubt. */
+define('DB_COLLATE', '');
+
+/**#@+
+ * Authentication Unique Keys and Salts.
+ *
+ * Change these to different unique phrases!
+ * You can generate these using the {@link https://api.wordpress.org/secret-key/1.1/salt/ WordPress.org secret-key service}
+ * You can change these at any point in time to invalidate all existing cookies. This will force all users to have to log in again.
+ *
+ * @since 2.6.0
+ */
+define('AUTH_KEY',         '--w,=nO-t>g:EOH>e-ZXs!7x(: W4:}1A2$E?Sn9P>TW-[=:u[nc-eQ<vIi<6|wh');
+define('SECURE_AUTH_KEY',  'PlM~WQ/9-~V:-3&be`nxuaghz@JyN!]SzVr_]lAM2b?QH(d(|`.z_;1jIE4kY&f+');
+define('LOGGED_IN_KEY',    'K]6*uCb-m~>zj5C1krtu:>2VT(WlI/Jl5T~Pov2-`r+Zb5s3i6&aIN$*/+k/~sLN');
+define('NONCE_KEY',        '~; xvP`h^{Pl9zaD#/!f@M21BAk0#sKg>*P+=1LV+FY+;HNE)%Y`4(Xq|&})fCj^');
+define('AUTH_SALT',        'A2|G[jvSLB+z dy S/ S>(lLyzxDvJ8(ps1(F%~x]eRD`UHv(h*IDjye+SYV-a;O');
+define('SECURE_AUTH_SALT', '9cv/Hy~a;qr]4)i*udy-/$non@_:CU0SIdm-L[WH^k_}s:Jq[)HV,Wu8na<_;ef3');
+define('LOGGED_IN_SALT',   '{d*4OCrk9x`|cb-4EBK7=ewJ3D]y%z,7mSEd:8?=eP![zD.O`<Uubt-u%@TA+x T');
+define('NONCE_SALT',       'z6G5thFC]JIW]|ZQIBgZ?zBb^!N#3-Un=)`!Xb/,Yd8[2&}.W{ITu?=PE0oZ,<8^');
+
+/**#@-*/
+
+/**
+ * WordPress Database Table prefix.
+ *
+ * You can have multiple installations in one database if you give each a unique
+ * prefix. Only numbers, letters, and underscores please!
+ */
+$table_prefix  = 'wp_';
+
+/**
+ * WordPress Localized Language, defaults to English.
+ *
+ * Change this to localize WordPress. A corresponding MO file for the chosen
+ * language must be installed to wp-content/languages. For example, install
+ * de_DE.mo to wp-content/languages and set WPLANG to 'de_DE' to enable German
+ * language support.
+ */
+define('WPLANG', '');
+
+/**
+ * For developers: WordPress debugging mode.
+ *
+ * Change this to true to enable the display of notices during development.
+ * It is strongly recommended that plugin and theme developers use WP_DEBUG
+ * in their development environments.
+ */
+define('WP_DEBUG', false);
+
+/* That's all, stop editing! Happy blogging. */
+
+/** Absolute path to the WordPress directory. */
+if ( !defined('ABSPATH') )
+	define('ABSPATH', dirname(__FILE__) . '/');
+
+/** Sets up WordPress vars and included files. */
+require_once(ABSPATH . 'wp-settings.php');
+
+/** change permisssions for plugin installation */
+define("FS_METHOD","direct");
+define("FS_CHMOD_DIR", 0777);
+define("FS_CHMOD_FILE", 0777);