Inhaltsverzeichnis
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
- Kubernetes - Namestitev v gruči
- Prometheus - Izvoz metrik
- systemd - Bare-Metal alternativa
« <- systemd | -> Kubernetes »
Wolfgang van der Stille @ EMSR DATA d.o.o. - Data Gateway Professional
Zuletzt geändert: dne 29.01.2026 ob 23:33