diff --git a/README.md b/README.md
index b2b0a5f9a9c3f6ba700b2f0f9d86620d7c991db0..cd79dd93cb9fc2ec7718f06dc6438b22f308fad7 100644
--- a/README.md
+++ b/README.md
@@ -1,3 +1,15 @@
-# grady-docker-helper
+# Grady Docker Helper
 
-A small script to help with the creation of a new Grady instance.
\ No newline at end of file
+A small script to help with the creation of a new Grady instance.  
+
+## Usage
+Display help:
+```
+python3 create-instance.py -h
+```
+
+Create a new instance folder with all necessary files:
+```
+python3 create-instance.py sose 18 ckurs lecturer 1.0.0 ..
+```
+The last argument is the path at which the folder is created, default: .. 
diff --git a/create-instance.py b/create-instance.py
new file mode 100644
index 0000000000000000000000000000000000000000..9c48a8391b796870befa6f1550a858fdcf491708
--- /dev/null
+++ b/create-instance.py
@@ -0,0 +1,67 @@
+import argparse
+import os
+import shutil
+
+CWD = os.getcwd()
+DEFAULT_FOLDER_PATH = os.path.join(CWD, '..')
+
+SRC_DIR = os.path.dirname(__file__)
+DOCKER_COMPOSE_PATH = os.path.join(SRC_DIR, 'example.docker-compose.yml')
+
+
+def main():
+    parser = argparse.ArgumentParser(
+        description='Create the necessary files for a new grady instance',
+        formatter_class=argparse.ArgumentDefaultsHelpFormatter
+    )
+    parser.add_argument('semester', help="Is this 'sose' or 'wise' ?")
+    parser.add_argument('year', help="Year of the semester in the format '18' or '1819' for a sose")
+    parser.add_argument('course', help="E.g. 'ckurs', 'cs1' or 'cs2'")
+    parser.add_argument('lecturer', help="The lecturer of the course")
+    parser.add_argument('version', help="Grady version that is deployed")
+    parser.add_argument(
+        'path',
+        default=DEFAULT_FOLDER_PATH,
+        nargs='?',
+        help="Path where the instance folder is created. "
+             "Folder name is autogenerated and should not be part of the path"
+    )
+
+    args = parser.parse_args()
+    create_instance(args)
+
+
+def create_instance(args):
+    instance_folder = create_folder(args)
+
+    shutil.copy2(DOCKER_COMPOSE_PATH, os.path.join(instance_folder, 'docker-compose.yml'))
+    with open(os.path.join(instance_folder, 'secret'), 'x'):
+        pass
+    create_env_file(args, instance_folder)
+    print("Created instance at: {}\n"
+          "Run 'docker-compose pull' and 'docker-compose up' to start the instance".format(instance_folder))
+
+
+def create_folder(args):
+    folder_name = "{}_{}_{}_{}".format(args.semester, args.year, args.course, args.lecturer)
+    folder_name = os.path.join(args.path, folder_name)
+    try:
+        os.mkdir(folder_name)
+    except OSError:
+        print("The folder {} already exists. Please enter different parameters".format(folder_name))
+        exit(1)
+    return folder_name
+
+
+def create_env_file(args, instance_folder):
+    env_template = "INSTANCE={}\n" \
+                   "URLPATH={}\n" \
+                   "VERSION={}\n"
+    urlpath = "/{}/{}{}".format(args.course, args.semester, args.year)
+    env_content = env_template.format(os.path.basename(instance_folder), urlpath, args.version)
+    with open(os.path.join(instance_folder, '.env'), 'x') as env_file:
+        env_file.write(env_content)
+
+
+if __name__ == '__main__':
+    main()
diff --git a/example.docker-compose.yml b/example.docker-compose.yml
new file mode 100644
index 0000000000000000000000000000000000000000..a7ac3667b5b2af2caacca33171ed9896ef40c601
--- /dev/null
+++ b/example.docker-compose.yml
@@ -0,0 +1,42 @@
+version: "3"
+
+services:
+
+  postgres:
+    image: postgres:9.6
+    restart: always
+    labels:
+      traefik.enable: "false"
+    networks:
+      - internal
+    volumes:
+      - ./database:/var/lib/postgresql/data
+
+  grady:
+    image: docker.gitlab.gwdg.de/j.michal/grady:${VERSION}
+    restart: always
+    entrypoint:
+      - ./deploy.sh
+    volumes:
+      - ./secret:/code/secret
+    environment:
+      GRADY_INSTANCE: ${INSTANCE}
+      SCRIPT_NAME: ${URLPATH}
+    networks:
+      - internal
+      - proxy
+    labels:
+      traefik.backend: ${INSTANCE}
+      traefik.enable: "true"
+      traefik.frontend.rule: Host:grady.informatik.uni-goettingen.de;PathPrefix:${URLPATH}
+      traefik.docker.network: proxy
+      traefik.port: "8000"
+    depends_on:
+      - postgres
+
+networks:
+  proxy:
+    external: true
+  internal:
+    external: false
+
diff --git a/example.env b/example.env
new file mode 100644
index 0000000000000000000000000000000000000000..a25bcd950c9bed5647f672d1b25ea0ef253eeeea
--- /dev/null
+++ b/example.env
@@ -0,0 +1,6 @@
+# This is an example .env file which is not use for the instance generation
+
+INSTANCE=sose_18_ckurs_brosenne
+URLPATH=/ckurs/sose18
+VERSION=1.0.0
+