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.

← Vissza: Linux