Ahelyett, hogy minden projektnél emlékezni kellene a pontos docker / docker compose parancsokra (image név, portok, env fájl, volume-ok), praktikus egy egységes app.sh scriptet tenni minden projekt mappájába, amely egyszerű, jól megjegyezhető parancsokkal (build, run, dev, start, stop, logs) vezérli a konténert.
Cél és felépítés
- build — image építése a Dockerfile-ból
- run — egyszeri, előtérben futó konténer indítása (gyors teszteléshez)
- dev — fejlesztői mód: élő kód-mount, automatikus restart, kibontott logok
- start — háttérben (detached) induló, újraindításkor is visszatérő konténer
- stop — a konténer leállítása és eltávolítása
- logs — a futó konténer logjainak követése
A script — /project/app.sh
#!/bin/bash
set -euo pipefail
APP_NAME="[projekt_neve]"
IMAGE_NAME="${APP_NAME}:latest"
CONTAINER_NAME="${APP_NAME}"
HOST_PORT="[host_port]"
CONTAINER_PORT="[konteiner_port]"
ENV_FILE=".env"
cmd="${1:-}"
case "$cmd" in
build)
docker build -t "$IMAGE_NAME" .
;;
run)
# Egyszeri, előtérben futó, kilépéskor automatikusan törlődő konténer
docker run --rm -it \
--name "$CONTAINER_NAME" \
-p "${HOST_PORT}:${CONTAINER_PORT}" \
--env-file "$ENV_FILE" \
"$IMAGE_NAME"
;;
dev)
# Fejlesztői mód: élő forráskód bemountolva, kód-változás azonnal látszik
docker run --rm -it \
--name "${CONTAINER_NAME}-dev" \
-p "${HOST_PORT}:${CONTAINER_PORT}" \
--env-file "$ENV_FILE" \
-v "$(pwd):/app" \
-w /app \
"$IMAGE_NAME" \
npm run dev
;;
start)
# Háttérben futó, újraindításkor (reboot) is automatikusan visszatérő konténer
docker run -d \
--name "$CONTAINER_NAME" \
--restart unless-stopped \
-p "${HOST_PORT}:${CONTAINER_PORT}" \
--env-file "$ENV_FILE" \
"$IMAGE_NAME"
echo "$APP_NAME elindult: http://localhost:${HOST_PORT}"
;;
stop)
docker stop "$CONTAINER_NAME" 2>/dev/null || true
docker rm "$CONTAINER_NAME" 2>/dev/null || true
;;
restart)
"$0" stop
"$0" start
;;
logs)
docker logs -f "$CONTAINER_NAME"
;;
*)
echo "Használat: ./app.sh {build|run|dev|start|stop|restart|logs}"
exit 1
;;
esac
Használat
chmod +x app.sh
./app.sh build # image összeépítése
./app.sh dev # fejlesztés, élő kód-mounttal
./app.sh start # éles indítás, háttérben, restart-policy-vel
./app.sh logs # logok követése
./app.sh stop # leállítás
Megjegyzés: A 'set -euo pipefail' sor a script elején biztosítja, hogy bármilyen hiba (sikertelen parancs, definiálatlan változó) azonnal megállítsa a scriptet ahelyett, hogy csendben tovább futna — ez kifejezetten ajánlott minden bash deploy/management scripthez.
docker-compose alapú változat (több konténeres projektekhez)
Ha a projekt több konténerből áll (pl. app + adatbázis + cache), a fenti logika docker compose paranccsal is megvalósítható, hasonló parancskészlettel:
start)
docker compose up -d
;;
stop)
docker compose down
;;
dev)
docker compose -f docker-compose.yml -f docker-compose.dev.yml up
;;
logs)
docker compose logs -f
;;
Megjegyzés: Két compose fájl (alap + dev override) elkülönítésével a fejlesztői mód (élő mount, debug port nyitva) és az éles mód (optimalizált build, csak a szükséges portok) tisztán szétválasztható, anélkül hogy két teljesen külön konfigurációt kellene karbantartani.