161 lines
3.3 KiB
Bash
Executable File
161 lines
3.3 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
|
|
set -Eeuo pipefail
|
|
|
|
RED="\e[31m"
|
|
GREEN="\e[32m"
|
|
YELLOW="\e[33m"
|
|
BLUE="\e[34m"
|
|
RESET="\e[0m"
|
|
|
|
log_info() { echo -e "${BLUE}[INFO]${RESET} $1"; }
|
|
log_success() { echo -e "${GREEN}[OK]${RESET} $1"; }
|
|
log_warn() { echo -e "${YELLOW}[WARN]${RESET} $1"; }
|
|
log_error() { echo -e "${RED}[ERROR]${RESET} $1"; }
|
|
|
|
trap 'log_error "Fehler in Zeile $LINENO"' ERR
|
|
|
|
if [[ "$EUID" -ne 0 ]]; then
|
|
log_error "Script muss als root laufen!"
|
|
exit 1
|
|
fi
|
|
|
|
exec 9>/var/lock/docker-control.lock
|
|
flock -n 9 || { log_error "Script läuft bereits!"; exit 1; }
|
|
|
|
docker_up() {
|
|
|
|
local CONTAINER="$1"
|
|
|
|
if [[ "$CONTAINER" == "all" ]]; then
|
|
log_info "Starte alle gestoppten Container"
|
|
docker start $(docker ps -aq)
|
|
else
|
|
log_info "Starte Container: $CONTAINER"
|
|
docker start "$CONTAINER"
|
|
fi
|
|
|
|
log_success "Start abgeschlossen"
|
|
}
|
|
|
|
docker_stop() {
|
|
|
|
local CONTAINER="$1"
|
|
|
|
if [[ "$CONTAINER" == "all" ]]; then
|
|
log_info "Stoppe alle Container"
|
|
docker stop $(docker ps -q)
|
|
else
|
|
log_info "Stoppe Container: $CONTAINER"
|
|
docker stop "$CONTAINER"
|
|
fi
|
|
|
|
log_success "Stop abgeschlossen"
|
|
}
|
|
|
|
docker_restart() {
|
|
|
|
local CONTAINER="$1"
|
|
|
|
if [[ "$CONTAINER" == "all" ]]; then
|
|
log_info "Restart aller Container"
|
|
docker restart $(docker ps -q)
|
|
else
|
|
log_info "Restart Container: $CONTAINER"
|
|
docker restart "$CONTAINER"
|
|
fi
|
|
|
|
log_success "Restart abgeschlossen"
|
|
}
|
|
|
|
docker_recreate() {
|
|
|
|
local CONTAINER="$1"
|
|
|
|
if [[ "$CONTAINER" == "all" ]]; then
|
|
log_info "Rebuild aller Container"
|
|
docker compose -f /data/docker-compose.yml up -d --force-recreate
|
|
else
|
|
log_info "Rebuild Container: $CONTAINER"
|
|
docker compose -f /data/docker-compose.yml up -d "$CONTAINER" --force-recreate
|
|
fi
|
|
|
|
log_success "Recreate abgeschlossen"
|
|
}
|
|
|
|
docker_build() {
|
|
|
|
local CONTAINER="$1"
|
|
|
|
if [[ "$CONTAINER" == "all" ]]; then
|
|
log_info "Baue alle Container"
|
|
docker compose -f /data/docker-compose.yml --build
|
|
else
|
|
log_info "Baue Container: $CONTAINER"
|
|
docker compose -f /data/docker-compose.yml "$CONTAINER" --build
|
|
fi
|
|
|
|
log_success "Build abgeschlossen"
|
|
}
|
|
|
|
docker_remove() {
|
|
|
|
local CONTAINER="$1"
|
|
|
|
if [[ "$CONTAINER" == "all" ]]; then
|
|
log_info "Loesche aller Container"
|
|
docker stop $(docker ps -q)
|
|
docker rm $(docker ps -q)
|
|
else
|
|
log_info "Loesche Container: $CONTAINER"
|
|
docker stop "$CONTAINER"
|
|
docker rm "$CONTAINER"
|
|
fi
|
|
|
|
log_success "Loeschen abgeschlossen"
|
|
}
|
|
|
|
########################################
|
|
# CLI
|
|
########################################
|
|
|
|
ACTION="${1:-}"
|
|
TARGET="${2:-}"
|
|
|
|
case "$ACTION" in
|
|
|
|
up)
|
|
docker_up "$TARGET"
|
|
;;
|
|
|
|
stop)
|
|
docker_stop "$TARGET"
|
|
;;
|
|
|
|
restart)
|
|
docker_restart "$TARGET"
|
|
;;
|
|
|
|
remove)
|
|
docker_remove "$TARGET"
|
|
;;
|
|
|
|
build)
|
|
docker_build "$TARGET"
|
|
;;
|
|
|
|
recreate)
|
|
docker_recreate "$TARGET"
|
|
;;
|
|
|
|
*)
|
|
echo "Usage:"
|
|
echo " $0 up <container|all>"
|
|
echo " $0 stop <container|all>"
|
|
echo " $0 build <container|all>"
|
|
echo " $0 remove <container|all>"
|
|
echo " $0 restart <container|all>"
|
|
echo " $0 recreate <container|all>"
|
|
exit 1
|
|
;;
|
|
esac |