Runbook: Docker

Trajanje: ~15 minuta
Uloga: DevOps, Razvojni programeri
Preduvjet: Docker Engine 20+

Data Gateway kao Docker container.


Tijek rada

flowchart TD A[Start] --> B[Dockerfile kreirati] B --> C[Image buildati] C --> D[Container pokrenuti] D --> E[Health Check] E --> F{OK?} F -->|Da| G[Gotovo] F -->|Ne| H[docker logs provjeriti] style G fill:#e8f5e9 style H fill:#ffebee


1. Dockerfile

# Dockerfile
FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS runtime
WORKDIR /app
 
# Gateway datoteke kopirati
COPY publish/ .
 
# Non-Root korisnik
RUN useradd --system --no-create-home appuser
USER appuser
 
# Port
EXPOSE 5000
 
# Healthcheck
HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \
    CMD curl -f http://localhost:5000/health || exit 1
 
# Start
ENTRYPOINT ["dotnet", "WvdS.WebAPI.Data.Gateway.Api.dll"]

2. Image buildati

# Image buildati
docker build -t data-gateway:latest .
 
# Image tagirati (za Registry)
docker tag data-gateway:latest registry.example.com/data-gateway:v3.0

3. Container pokrenuti

Jednostavan start:

docker run -d \
    --name gateway \
    -p 5000:5000 \
    -v $(pwd)/appsettings.json:/app/appsettings.json:ro \
    -v $(pwd)/data:/app/data \
    data-gateway:latest

Sa svim opcijama:

docker run -d \
    --name gateway \
    --restart unless-stopped \
    -p 5000:5000 \
    -v $(pwd)/config/appsettings.json:/app/appsettings.json:ro \
    -v $(pwd)/data:/app/data \
    -v $(pwd)/logs:/app/logs \
    -e ASPNETCORE_ENVIRONMENT=Production \
    -e TZ=Europe/Berlin \
    --memory=512m \
    --cpus=1 \
    --health-cmd="curl -f http://localhost:5000/health || exit 1" \
    --health-interval=30s \
    data-gateway:latest

4. Docker Compose

# docker-compose.yml
version: '3.8'

services:
  gateway:
    image: data-gateway:latest
    build:
      context: .
      dockerfile: Dockerfile
    container_name: data-gateway
    restart: unless-stopped
    ports:
      - "5000:5000"
    volumes:
      - ./config/appsettings.json:/app/appsettings.json:ro
      - ./data:/app/data
      - gateway-logs:/app/logs
    environment:
      - ASPNETCORE_ENVIRONMENT=Production
      - TZ=Europe/Berlin
    deploy:
      resources:
        limits:
          memory: 512M
          cpus: '1'
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:5000/health"]
      interval: 30s
      timeout: 5s
      retries: 3
      start_period: 10s
    networks:
      - gateway-net
 
  # Opcionalno: Baza podataka za Demo
  demo-db:
    image: postgres:16-alpine
    container_name: demo-db
    restart: unless-stopped
    environment:
      - POSTGRES_USER=gateway
      - POSTGRES_PASSWORD=gateway123
      - POSTGRES_DB=demo
    volumes:
      - postgres-data:/var/lib/postgresql/data
    networks:
      - gateway-net

volumes:
  gateway-logs:
  postgres-data:

networks:
  gateway-net:
    driver: bridge

Pokretanje:

# Sve servise pokrenuti
docker-compose up -d
 
# Logove prikazati
docker-compose logs -f gateway
 
# Zaustaviti
docker-compose down

5. Health Check

# Container status
docker ps
 
# Health status
docker inspect --format='{{.State.Health.Status}}' gateway
 
# API test
curl http://localhost:5000/health
curl http://localhost:5000/api/v1/dsn/demo/tables

6. Container upravljanje

Naredba Opis
——–————–
docker start gateway Pokretanje
docker stop gateway Zaustavljanje
docker restart gateway Ponovno pokretanje
docker logs gateway Prikaz logova
docker logs -f gateway Live logovi
docker exec -it gateway sh Shell u containeru

7. Kontrolna lista

# Provjera Da/Ne
———–
1 Dockerfile kreiran -
2 Image buildan -
3 appsettings.json mountan -
4 Container pokrenut -
5 Health Check OK -
6 Logovi bez gresaka -

Rjesavanje problema

Problem Uzrok Rjesenje
————————–
Container se ne pokrece Config greska docker logs gateway
Port vec zauzet Host-port zauzet koristiti drugi port
Permission denied Volume prava chmod na hostu
Cannot connect to DB Mrezni problem Docker mrezu provjeriti

Container-Shell za debugging:

# Shell u aktivnom containeru
docker exec -it gateway sh
 
# Ili s bash (ako je dostupan)
docker exec -it gateway bash
 
# Datoteke u containeru provjeriti
docker exec gateway ls -la /app/
docker exec gateway cat /app/appsettings.json

Multi-Stage Build (optimizirano)

# Multi-Stage Dockerfile
FROM mcr.microsoft.com/dotnet/sdk:8.0 AS build
WORKDIR /src
COPY *.csproj .
RUN dotnet restore
COPY . .
RUN dotnet publish -c Release -o /app/publish
 
FROM mcr.microsoft.com/dotnet/aspnet:8.0 AS runtime
WORKDIR /app
COPY --from=build /app/publish .
RUN useradd --system --no-create-home appuser
USER appuser
EXPOSE 5000
HEALTHCHECK --interval=30s --timeout=5s CMD curl -f http://localhost:5000/health || exit 1
ENTRYPOINT ["dotnet", "WvdS.WebAPI.Data.Gateway.Api.dll"]

Povezani runbookovi


« <- systemd | -> Kubernetes »


Wolfgang van der Stille @ EMSR DATA d.o.o. - Data Gateway Professional

Zuletzt geändert: 29.01.2026. u 23:36