Runbook: Docker

Trajanje: ~15 minut
Vloga: DevOps, razvijalci
Predpogoj: Docker Engine 20+

Poganjanje Data Gateway kot Docker kontejner.


Potek dela

flowchart TD A[Začetek] --> B[Ustvari Dockerfile] B --> C[Zgradi sliko] C --> D[Zaženi kontejner] D --> E[Health Check] E --> F{V redu?} F -->|Da| G[Končano] F -->|Ne| H[Preveri docker logs] style G fill:#e8f5e9 style H fill:#ffebee


1. Dockerfile

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

2. Gradnja slike

# Zgradi sliko
docker build -t data-gateway:latest .
 
# Označi sliko (za register)
docker tag data-gateway:latest registry.example.com/data-gateway:v3.0

3. Zagon kontejnerja

Enostaven zagon:

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

Z vsemi možnostmi:

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/Ljubljana \
    --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/Ljubljana
    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
 
  # Neobvezno: Podatkovna baza 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

Zagon:

# Zaženi vse storitve
docker-compose up -d
 
# Prikaži dnevnike
docker-compose logs -f gateway
 
# Ustavi
docker-compose down

5. Health Check

# Status kontejnerja
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. Upravljanje kontejnerja

Ukaz Opis
——–————–
docker start gateway Zaženi
docker stop gateway Ustavi
docker restart gateway Ponovno zaženi
docker logs gateway Prikaži dnevnike
docker logs -f gateway Live dnevniki
docker exec -it gateway sh Lupina v kontejnerju

7. Kontrolni seznam

# Točka preverjanja V
———–
1 Dockerfile ustvarjen
2 Slika zgrajena
3 appsettings.json pripet
4 Kontejner zagnan
5 Health Check v redu
6 Dnevniki brez napak

Odpravljanje težav

Težava Vzrok Rešitev
————————–
Kontejner se ne zažene Napaka v konfiguraciji docker logs gateway
Vrata že zasedena Gostiteljska vrata zasedena Uporabi druga vrata
Permission denied Pravice volumnov chmod na gostitelju
Cannot connect to DB Težava z omrežjem Preveri Docker omrežje

Lupina kontejnerja za razhroščevanje:

# Lupina v delujočem kontejnerju
docker exec -it gateway sh
 
# Ali z bash (če je na voljo)
docker exec -it gateway bash
 
# Preveri datoteke v kontejnerju
docker exec gateway ls -la /app/
docker exec gateway cat /app/appsettings.json

Multi-Stage Build (optimiziran)

# 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 Runbooks


« <- systemd | -> Kubernetes »


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

Zuletzt geändert: dne 29.01.2026 ob 23:33