123 lines
2.5 KiB
Bash
123 lines
2.5 KiB
Bash
#!/bin/bash
|
|
|
|
BASE_DIR="/mnt/data"
|
|
CONTAINERS_DIR="$BASE_DIR/containers"
|
|
VOLUMES_DIR="$BASE_DIR/volumes"
|
|
|
|
# Ensure base dirs exist
|
|
mkdir -p "$CONTAINERS_DIR"
|
|
mkdir -p "$VOLUMES_DIR"
|
|
|
|
function create_container() {
|
|
echo "Enter container name (e.g. dockhand, grafana):"
|
|
read NAME
|
|
|
|
if [ -z "$NAME" ]; then
|
|
echo "❌ Name cannot be empty"
|
|
return
|
|
fi
|
|
|
|
CONTAINER_PATH="$CONTAINERS_DIR/$NAME"
|
|
VOLUME_PATH="$VOLUMES_DIR/$NAME/data"
|
|
|
|
if [ -d "$CONTAINER_PATH" ]; then
|
|
echo "⚠️ Container already exists!"
|
|
return
|
|
fi
|
|
|
|
echo "🚀 Creating structure..."
|
|
|
|
mkdir -p "$CONTAINER_PATH"
|
|
mkdir -p "$VOLUME_PATH"
|
|
|
|
COMPOSE_FILE="$CONTAINER_PATH/docker-compose.yml"
|
|
|
|
cat <<EOF > "$COMPOSE_FILE"
|
|
version: "3.9"
|
|
|
|
services:
|
|
$NAME:
|
|
image: your-image-here
|
|
container_name: $NAME
|
|
restart: unless-stopped
|
|
|
|
ports:
|
|
- "PORT:PORT"
|
|
|
|
volumes:
|
|
- /var/run/docker.sock:/var/run/docker.sock
|
|
- $VOLUME_PATH:/app/data
|
|
|
|
environment:
|
|
- TZ=Australia/Melbourne
|
|
|
|
logging:
|
|
driver: "json-file"
|
|
options:
|
|
max-size: "10m"
|
|
max-file: "3"
|
|
|
|
# networks:
|
|
# ${NAME}_net:
|
|
# driver: bridge
|
|
EOF
|
|
|
|
echo "✅ Created:"
|
|
echo "📁 $CONTAINER_PATH"
|
|
echo "📁 $VOLUME_PATH"
|
|
echo "📄 docker-compose.yml"
|
|
|
|
echo ""
|
|
echo "👉 Opening docker-compose.yml for editing..."
|
|
sleep 1
|
|
|
|
nano "$COMPOSE_FILE"
|
|
}
|
|
|
|
function start_container() {
|
|
echo "Enter container name to start:"
|
|
read NAME
|
|
|
|
CONTAINER_PATH="$CONTAINERS_DIR/$NAME"
|
|
|
|
if [ ! -d "$CONTAINER_PATH" ]; then
|
|
echo "❌ Container not found!"
|
|
return
|
|
fi
|
|
|
|
cd "$CONTAINER_PATH" || return
|
|
docker compose up -d
|
|
|
|
echo "✅ Container started"
|
|
}
|
|
|
|
function list_containers() {
|
|
echo "📦 Available containers:"
|
|
ls "$CONTAINERS_DIR"
|
|
}
|
|
|
|
function main_menu() {
|
|
while true; do
|
|
clear
|
|
echo "======================================"
|
|
echo " 🚀 Container Management Menu"
|
|
echo "======================================"
|
|
echo "1. Create New Container"
|
|
echo "2. Start Container"
|
|
echo "3. List Containers"
|
|
echo "4. Exit"
|
|
echo "======================================"
|
|
echo "Choose an option:"
|
|
read OPTION
|
|
|
|
case $OPTION in
|
|
1) create_container ;;
|
|
2) start_container ;;
|
|
3) list_containers; read -p "Press enter to continue..." ;;
|
|
4) exit 0 ;;
|
|
*) echo "❌ Invalid option"; sleep 1 ;;
|
|
esac
|
|
done
|
|
}
|
|
|
|
main_menu |