diff --git a/mysql-backup/testing_data/2017.11.27 200000.sql b/mysql-backup/testing_data/2017.11.27 200000.sql
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/pica-backup/Dockerfile b/pica-backup/Dockerfile
new file mode 100644
index 0000000000000000000000000000000000000000..3bc49eabb4211112f7b43185a4081cbf56dfffb7
--- /dev/null
+++ b/pica-backup/Dockerfile
@@ -0,0 +1,18 @@
+FROM debian:latest
+MAINTAINER antoine@barbare.me
+
+RUN apt-get update && \
+    apt-get install -y --no-install-recommends \
+      postgresql-client \
+      mysql-client \
+      cron && \
+    apt-get clean
+
+ENV CRON_TIME="0 0 * * *" \
+    MYSQL_DB="--all-databases"
+COPY mysql-run.sh /mysql-run.sh
+COPY postgres-run.sh /postgres-backup.sh
+
+VOLUME ["/backup"]
+
+CMD ["/bin/bash"]
diff --git a/pica-backup/docker-compose.yml b/pica-backup/docker-compose.yml
new file mode 100644
index 0000000000000000000000000000000000000000..3a9ec1a433553f65ead601a12889ab1d74dfbffe
--- /dev/null
+++ b/pica-backup/docker-compose.yml
@@ -0,0 +1,12 @@
+version: "2"
+
+services:
+  backup:
+    image: backup
+    container_name: test-backup
+    volumes:
+     - /home/user/Documents/Picasoft/dockerfiles/pica-backup/t1:/backup/test-backup1
+     - /home/user/Documents/Picasoft/dockerfiles/pica-backup/t2:/backup/test-backup2
+    environment:
+            - TEST=aaaaa,bbbbbbb,ccccc
+
diff --git a/pica-backup/mysql-backup b/pica-backup/mysql-backup
new file mode 120000
index 0000000000000000000000000000000000000000..2d628b246d845bc569bf695488012a5c47f08669
--- /dev/null
+++ b/pica-backup/mysql-backup
@@ -0,0 +1 @@
+../mysql-backup/
\ No newline at end of file
diff --git a/pica-backup/mysql-run.sh b/pica-backup/mysql-run.sh
new file mode 100755
index 0000000000000000000000000000000000000000..1116ef3e15b7f930be1a6c2ecd57c24400678704
--- /dev/null
+++ b/pica-backup/mysql-run.sh
@@ -0,0 +1,82 @@
+#!/bin/bash
+
+if [ "${MYSQL_ENV_MYSQL_PASS}" == "**Random**" ]; then
+        unset MYSQL_ENV_MYSQL_PASS
+fi
+
+MYSQL_HOST=${MYSQL_PORT_3306_TCP_ADDR:-${MYSQL_HOST}}
+MYSQL_HOST=${MYSQL_PORT_1_3306_TCP_ADDR:-${MYSQL_HOST}}
+MYSQL_PORT=${MYSQL_PORT_3306_TCP_PORT:-${MYSQL_PORT}}
+MYSQL_PORT=${MYSQL_PORT_1_3306_TCP_PORT:-${MYSQL_PORT}}
+MYSQL_USER=${MYSQL_USER:-${MYSQL_ENV_MYSQL_USER}}
+MYSQL_PASS=${MYSQL_PASS:-${MYSQL_ENV_MYSQL_PASS}}
+
+[ -z "${MYSQL_HOST}" ] && { echo "=> MYSQL_HOST cannot be empty" && exit 1; }
+[ -z "${MYSQL_PORT}" ] && { echo "=> MYSQL_PORT cannot be empty" && exit 1; }
+[ -z "${MYSQL_USER}" ] && { echo "=> MYSQL_USER cannot be empty" && exit 1; }
+[ -z "${MYSQL_PASS}" ] && { echo "=> MYSQL_PASS cannot be empty" && exit 1; }
+
+BACKUP_CMD="mysqldump -h${MYSQL_HOST} -P${MYSQL_PORT} -u${MYSQL_USER} -p${MYSQL_PASS} ${EXTRA_OPTS} ${MYSQL_DB} > /backup/"'${BACKUP_NAME}'
+
+echo "=> Creating backup script"
+rm -f /backup.sh
+cat <<EOF >> /backup.sh
+#!/bin/bash
+MAX_BACKUPS=${MAX_BACKUPS}
+
+BACKUP_NAME=\$(date +\%Y.\%m.\%d.\%H\%M\%S).sql
+
+echo "=> Backup started: \${BACKUP_NAME}"
+if ${BACKUP_CMD} ;then
+    echo "   Backup succeeded"
+else
+    echo "   Backup failed"
+    rm -rf /backup/\${BACKUP_NAME}
+fi
+
+if [ -n "\${MAX_BACKUPS}" ]; then
+    while [ \$(ls /backup -N1 | wc -l) -gt \${MAX_BACKUPS} ];
+    do
+        BACKUP_TO_BE_DELETED=\$(ls /backup -N1 | sort | head -n 1)
+        echo "   Backup \${BACKUP_TO_BE_DELETED} is deleted"
+        rm -rf /backup/\${BACKUP_TO_BE_DELETED}
+    done
+fi
+echo "=> Backup done"
+EOF
+chmod +x /backup.sh
+
+echo "=> Creating restore script"
+rm -f /restore.sh
+cat <<EOF >> /restore.sh
+#!/bin/bash
+echo "=> Restore database from \$1"
+if mysql -h${MYSQL_HOST} -P${MYSQL_PORT} -u${MYSQL_USER} -p${MYSQL_PASS} < \$1 ;then
+    echo "   Restore succeeded"
+else
+    echo "   Restore failed"
+fi
+echo "=> Done"
+EOF
+chmod +x /restore.sh
+
+touch /mysql_backup.log
+tail -F /mysql_backup.log &
+
+if [ -n "${INIT_BACKUP}" ]; then
+    echo "=> Create a backup on the startup"
+    /backup.sh
+elif [ -n "${INIT_RESTORE_LATEST}" ]; then
+    echo "=> Restore lates backup"
+    until nc -z $MYSQL_HOST $MYSQL_PORT
+    do
+        echo "waiting database container..."
+        sleep 1
+    done
+    ls -d -1 /backup/* | tail -1 | xargs /restore.sh
+fi
+
+echo "${CRON_TIME} /backup.sh >> /mysql_backup.log 2>&1" > /crontab.conf
+crontab  /crontab.conf
+echo "=> Running cron job"
+exec cron -f
diff --git a/pica-backup/postgres-backup b/pica-backup/postgres-backup
new file mode 120000
index 0000000000000000000000000000000000000000..3fc1dc77f1a53f9de6b952a8292706bab40d206a
--- /dev/null
+++ b/pica-backup/postgres-backup
@@ -0,0 +1 @@
+../postgres-backup/
\ No newline at end of file
diff --git a/pica-backup/postgres-run.sh b/pica-backup/postgres-run.sh
new file mode 100755
index 0000000000000000000000000000000000000000..2fe5784856f142c73139ad359cd5b433ea1673c6
--- /dev/null
+++ b/pica-backup/postgres-run.sh
@@ -0,0 +1,83 @@
+#!/bin/bash
+
+[ -z "${POSTGRES_HOST}" ] && { echo "=> POSTGRES_HOST cannot be empty" && exit 1; }
+[ -z "${POSTGRES_PORT}" ] && { echo "=> POSTGRES_PORT cannot be empty" && exit 1; }
+[ -z "${POSTGRES_USER}" ] && { echo "=> POSTGRES_USER cannot be empty" && exit 1; }
+[ -z "${POSTGRES_PASS}" ] && { echo "=> POSTGRES_PASS cannot be empty" && exit 1; }
+[ -z "${POSTGRES_DB}" ] && { echo "=> POSTGRES_DB cannot be empty" && exit 1; }
+
+BACKUP_CMD="pg_dump -w -c > /backup/"'${BACKUP_NAME}'
+
+echo "=> Creating backup script"
+rm -f /backup.sh
+cat <<EOF >> /backup.sh
+#!/bin/bash
+MAX_BACKUPS=${MAX_BACKUPS}
+export PGHOST=$POSTGRES_HOST
+export PGPORT=$POSTGRES_PORT
+export PGDATABASE=$POSTGRES_DB
+export PGUSER=$POSTGRES_USER
+export PGPASSWORD=$POSTGRES_PASS
+
+BACKUP_NAME=\$(date +\%Y.\%m.\%d.\%H\%M\%S).sql
+
+echo "=> Backup started: \${BACKUP_NAME}"
+if ${BACKUP_CMD} ;then
+    echo "   Backup succeeded"
+else
+    echo "   Backup failed"
+    rm -rf /backup/\${BACKUP_NAME}
+fi
+
+if [ -n "\${MAX_BACKUPS}" ]; then
+    while [ \$(ls /backup -N1 | wc -l) -gt \${MAX_BACKUPS} ];
+    do
+        BACKUP_TO_BE_DELETED=\$(ls /backup -N1 | sort | head -n 1)
+        echo "   Backup \${BACKUP_TO_BE_DELETED} is deleted"
+        rm -rf /backup/\${BACKUP_TO_BE_DELETED}
+    done
+fi
+echo "=> Backup done"
+EOF
+chmod +x /backup.sh
+
+echo "=> Creating restore script"
+rm -f /restore.sh
+cat <<EOF >> /restore.sh
+#!/bin/bash
+export PGHOST=$POSTGRES_HOST
+export PGPORT=$POSTGRES_PORT
+export PGDATABASE=$POSTGRES_DB
+export PGUSER=$POSTGRES_USER
+export PGPASSWORD=$POSTGRES_PASS
+
+echo "=> Restore database from \$1"
+if pg_restore -w -d $POSTGRES_DB < \$1 ;then
+    echo "   Restore succeeded"
+else
+    echo "   Restore failed"
+fi
+echo "=> Done"
+EOF
+chmod +x /restore.sh
+
+touch /postgres_backup.log
+tail -F /postgres_backup.log &
+
+if [ -n "${INIT_BACKUP}" ]; then
+    echo "=> Create a backup on the startup"
+    /backup.sh
+elif [ -n "${INIT_RESTORE_LATEST}" ]; then
+    echo "=> Restore lates backup"
+    until nc -z $POSTGRES_HOST $POSTGRES_PORT
+    do
+        echo "waiting database container..."
+        sleep 1
+    done
+    ls -d -1 /backup/* | tail -1 | xargs /restore.sh
+fi
+
+echo "${CRON_TIME} /backup.sh >> /postgres_backup.log 2>&1" > /crontab.conf
+crontab  /crontab.conf
+echo "=> Running cron job"
+exec cron -f
diff --git a/pica-backup/run.sh b/pica-backup/run.sh
new file mode 100755
index 0000000000000000000000000000000000000000..e5c0ae6b35c77975af74315196a6f532a7887c46
--- /dev/null
+++ b/pica-backup/run.sh
@@ -0,0 +1,38 @@
+#!/bin/bash
+
+# DB_TYPE : MYSQL|POSTGRES
+
+# MYSQL			POSTGRESQL
+#
+# MYSQL_HOST_LIST		POSTGRES_HOST_LIST
+# MYSQL_PORT_LIST		POSTGRES_PORT_LIST
+# MYSQL_USER_LIST		POSTGRES_USER_LIST
+# MYSQL_PASS_LIST		POSTGRES_PASS_LIST
+#				POSTGRES_DB_LIST
+# MYSQL_MAX_BACKUP_LIST		POSTGRES_MAX_BACKUP_LIST
+# MYSQL_INIT_BACKUP_LIST	POSTGRES_INIT_BACKUP_LIST
+# MYSQL_CRON_TIME_LIST		POSTGRES_CRON_TIME_LIST
+# MYSQL_EXTRA_OPTS_LIST		POSTGRES_EXTRA_OPTS-LIST
+
+IFS=,
+#MYSQL
+read -a MYSQL_HOST_ARRAY <<< "$MYSQL_HOST_LIST"
+read -a MYSQL_PORT_ARRAY <<< "$MYSQL_PORT_LIST"
+read -a MYSQL_USER_ARRAY <<< "$MYSQL_USER_LIST"
+read -a MYSQL_PASS_ARRAY <<< "$MYSQL_PASS_LIST"
+read -a MYSQL_MAX_BACKUP_ARRAY <<< "$MYSQL_MAX_BACKUP_LIST"
+read -a MYSQL_INIT_BACKUP_ARRAY <<< "$MYSQL_INIT_BACKUP_LIST"
+read -a MYSQL_CRON_TIME_ARRAY <<< "$MYSQL_CRON_TIME_LIST"
+read -a MYSQL_EXTRA_OPTS_ARRAY <<< "$MYSQL_EXTRA_OPTS_LIST"
+
+#POSTGRES
+read -a POSTGRES_HOST_ARRAY <<< "$POSTGRES_HOST_LIST"
+read -a POSTGRES_PORT_ARRAY <<< "$POSTGRES_PORT_LIST"
+read -a POSTGRES_USER_ARRAY <<< "$POSTGRES_PASS_LIST"
+read -a POSTGRES_DB_ARRAY <<< "$POSTGRES_DB_LIST"
+read -a POSTGRES_MAX_BACKUP_ARRAY <<< "$POSTGRES_MAX_BACKUP_LIST"
+read -a POSTGRES_INIT_BACKUP_ARRAY <<< "$POSTGRES_INIT_BACKUP_LIST"
+read -a POSTGRES_CRON_TIME_ARRAY <<< "$POSTGRES_CRON_TIME_LIST"
+read -a POSTGRES_EXTRA_OPTS_ARRAY <<< "$POSTGRES_EXTRA_OPTS_LIST"
+
+