diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..30bcfa4
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1 @@
+.build/
diff --git a/README.md b/README.md
index d6d6370..b6f1b8f 100644
--- a/README.md
+++ b/README.md
@@ -6,11 +6,41 @@ Collection of Dockerfiles created to build & pack various tools.
-- [1. Tools](#1-tools)
+- [1. How to use](#1-how-to-use)
+ - [1.1. CLI](#11-cli)
+- [2. Tools](#2-tools)
-# 1. Tools
+# 1. How to use
+
+Run the build-script `script/build.sh` with the path to the tool you want to build.
+
+
+
+The docker-image will be tagged with `default` and the detected version/commit-hash.
+
+You can add more tags or change the existing tag-naming-scheme using the environment-variable `TAG`.
+
+
+
+## 1.1. CLI
+
+`script/build.sh [extra-args for docker build ..]`
+
+
+
+### 1.1.1. Environment-Variables
+
+Variable | Description | Default
+-|-|-
+`TAG` | Tag for Docker-building | `TAGPREFIX` + `NAME`
+`TAGPREFIX` | Set a prefix to the default-tag | -
+`NAME` | Change the name used in the tag | *FolderName*
+
+
+
+# 2. Tools
Nothing yet
diff --git a/scripts/build.sh b/scripts/build.sh
new file mode 100755
index 0000000..10ff367
--- /dev/null
+++ b/scripts/build.sh
@@ -0,0 +1,31 @@
+#!/bin/sh
+
+scriptPath_file=$(dirname "${BASH_SOURCE[0]}")
+scriptPath_folder=$(realpath "${scriptPath_file}")
+utils_path="${scriptPath_folder}/utils"
+
+WORKDIR=${1:-$PWD}
+WORKDIR=$(realpath "$WORKDIR")
+
+# -- VARIABLES --
+# Store original path
+ORIGINALDIR=$PWD
+
+# Get args without path
+EXTRA_ARGS="${@:2}"
+
+TAG=${TAG:-"${TAG_PREFIX}${NAME}"}
+
+
+# Call prepare
+printf "# PREPARE\n"
+source ${utils_path}/prepare.sh
+
+# Call build
+printf "# BUILD\n"
+build_type=${BUILD:-"ownarch"}
+source ${utils_path}/build-${build_type}.sh
+
+
+# Switch back to original path
+cd $ORIGINALDIR
diff --git a/scripts/utils/build-multiarch.sh b/scripts/utils/build-multiarch.sh
new file mode 100755
index 0000000..56794c4
--- /dev/null
+++ b/scripts/utils/build-multiarch.sh
@@ -0,0 +1,9 @@
+#!/bin/bash
+PLATFORM=${PLATFORM:-"linux/amd64,linux/arm64/v8,linux/arm/v7"}
+
+docker buildx build \
+--platform $PLATFORM \
+--tag $TAG:latest \
+--tag "${TAG}:${VERSION}" \
+$EXTRA_ARGS \
+$WORKDIR
diff --git a/scripts/utils/build-ownarch.sh b/scripts/utils/build-ownarch.sh
new file mode 100755
index 0000000..1f43303
--- /dev/null
+++ b/scripts/utils/build-ownarch.sh
@@ -0,0 +1,7 @@
+#!/bin/bash
+
+docker build \
+--tag $TAG:latest \
+--tag $TAG:$VERSION \
+$EXTRA_ARGS \
+"$WORKDIR"
diff --git a/scripts/utils/prepare.sh b/scripts/utils/prepare.sh
new file mode 100755
index 0000000..19fad32
--- /dev/null
+++ b/scripts/utils/prepare.sh
@@ -0,0 +1,55 @@
+#!/bin/sh
+
+# --- VARIABLES ---
+# Load variables
+source $WORKDIR/info.env
+
+# Check if certain vars are overwritten, set them if missing
+if [ "${NAME}" = "" ]; then
+ NAME="$(basename $WORKDIR)"
+fi
+export NAME
+printf "Name: ${NAME}\n"
+
+repositoryFolder="$WORKDIR/.build/repository"
+
+# --- SOURCES ---
+# Get sources locally
+if ! [ -d "$repositoryFolder" ]; then
+ git clone "${GIT_REPOSITORY}" .
+ cloned=True
+fi
+
+# Change into repository
+cd "$repositoryFolder"
+
+if [ "$cloned" != True ]; then
+ # Checkout default-branch in case GIT_CHECKOUT was different
+ defaultBranch=$(git symbolic-ref refs/remotes/origin/HEAD | sed 's@^refs/remotes/origin/@@')
+ git checkout "${defaultBranch}"
+
+ git pull # Get changes
+fi
+
+# Checkout when set
+if [ "$GIT_CHECKOUT" != "" ]; then
+ # Handle special directives
+ if [ "$GIT_CHECKOUT" = "latest-tag" ]; then
+ GIT_CHECKOUT=$(git describe --tags `git rev-list --tags --max-count=1`) # Get latest tag
+ fi
+
+ git checkout $GIT_CHECKOUT
+fi
+
+
+# --- VERSION ---
+# Get current version to build
+VERSION=$(git describe --tags --long)
+if [ $? -ne 0 ]; then
+ VERSION=$(git rev-parse HEAD)
+fi
+export VERSION
+printf "Version: ${VERSION}\n"
+
+TAG=${TAG:-"${TAG_PREFIX}${NAME}"}
+printf "> ${TAG}\n"