Sinlege / VPS / VPS Docker

VPS Docker - kontenery na KVM z NVMe

Compose na KVM, nie shared Docker host u providera. cgroup limity, bo jeden kontener z memory leak zabije cały node. NVMe pod warstwy obrazów.

AS219481 własny ASN
WAW Tier III
10 Gbps burst shared
KVM pełna wirtualizacja

Docker na własnym VPS vs PaaS

Masz kernel gościa. Instalujesz Docker Engine sam. Brak limitu „tylko 3 kontenery” z taniego hostingu.

Odpowiadasz za aktualizację silnika, za CVE w obrazach, za socket /var/run/docker.sock nigdy nie wystawionego na świat.

KVM daje granicę — sąsiad to inna maszyna, nie ten sam daemon.

Limity pamięci i CPU

deploy.resources.limits w Compose — obowiązkowe na produkcji.

Bez limitu kontener zjadnie RAM hosta i OOM zabije też bazę obok.

cpu_shares vs cpus — zrozum różnicę. Throttling lepszy niż kill całego hosta.

docker.sock

Mount do kontenera = root na hoście. Tylko lokalnie, tylko zaufane obrazy.

Compose w produkcji

Jeden plik compose na środowisko. Sekrety w .env poza git — albo Docker secrets / vault.

healthcheck w serwisach — orchestrator wie, kiedy restartować.

log-driver z rotation — json-file bez max-size zapełni NVMe w tydzień.

Wolumeny i I/O

Named volumes na NVMe Gen4 — szybkie. Bind mount z hosta — uważaj na uprawnienia UID.

Baza w kontenerze — OK na start. Przy wzroście I/O wydziel volume albo osobny VPS pod DB.

Shared storage hosta — variance IOPS. iostat podczas deploy.

Sieć kontenerów

Reverse proxy (Traefik/Caddy) w kontenerze — publikujesz 80/443, reszta w sieci internal.

Transfer VPS w planie. Duży docker pull co deploy — liczy ingress, egress przy registry prywatnym.

AS219481, Anti-DDoS L3/L4 — nie zastępuje firewalla na hoście.

Aktualizacje obrazów

latest tag to antywzor. Pinuj digest albo semver.

Watchtower na produkcji — ostrożnie. Lepiej pipeline z testem.

CVE scan (trivy) w CI — obraz z 2023 to dziura.

Backup kontenerów

Backup wolumenów, nie tylko compose.yml. restic na /var/lib/docker/volumes.

Stan w DB — spójny dump, nie kopiuj plików mysql w trakcie write.

Sieci Docker: bridge, macvlan, overlay

Default bridge — OK na lab. Produkcja: user-defined bridge z nazwą.

Published ports — tylko wymagane. 0.0.0.0:6379 redis = incydent.

IPv6 docker — test przed wdrożeniem; często pomijane.

Registry prywatny i pull secrets

GHCR, GitLab registry — login w cron deploy, nie w compose plain text.

docker pull co deploy — egress liczy się do transferu planu.

Pin digest obrazu — tag latest to ruletka.

Logi i metryki kontenerów

docker logs --tail nie zastępuje centralnego Loki.

cAdvisor + Prometheus — zobacz który kontener zjada CPU.

Healthcheck bez restart policy — bezużyteczny.

Seccomp, cap drop, read-only rootfs

cap_drop: ALL + cap_add minimum — wzór hardeningu.

read_only: true z tmpfs na /tmp gdzie możliwe.

Non-root USER w Dockerfile — nie root w kontenerze na prod.

Od Compose do wielu VPS

Jeden VPS z compose — prosty start. DB rośnie — wydziel na drugi VPS.

Sieć między VPS — WireGuard mesh, nie publiczne porty DB.

IP Transit gdy potrzebujesz własnego ASN obok stacku — osobna usługa.

Compose na produkcji — checklist

restart: unless-stopped, limits, healthcheck, logging driver z max-size.

Secrets nie w git. .env w .gitignore.

Osobny compose override dla prod — nie ten sam plik co dev.

Ship kontenerów bez niespodzianek

Build w CI, pull na VPS — mniej CPU steal na prod. Obraz pin digest.

Limity pamięci w compose — obowiązkowe. Jeden leak zabija host gościa KVM.

NVMe — warstwy obrazów rosną. docker system prune w cron z rozwagą.

Transfer — pull z registry, push logów offsite.

KVM izolacja — docker.sock nigdy publicznie. Anti-DDoS nie filtruje błędnego publish portu 6379.

Ryzen — wystarczy dla typowego stacku web. DB ciężka — osobny VPS.

CI/CD a VPS

GitHub Actions buduje obraz, VPS pull z registry — mniej narzędzi na prod.

Deploy przez ssh docker compose pull && up -d — loguj wersję digest.

Rollback = poprzedni digest w compose — test przed potrzebą.

Host KVM pod Docker

Ryzen + NVMe — sensowny duet. Shared steal przy build na prod — unikaj.

Transfer pull obrazów — pierwszy deploy duży, potem warstwy cache.

Anti-DDoS nie naprawia publish 0.0.0.0:9200 elasticsearch.

Po pierwszym deploy prod

docker ps --format sprawdzone — tylko oczekiwane porty.

Compose hash wersji w git tag.

restic backup wolumenów zakończony sukcesem — alert na fail.

Images pin digest w compose committed.

Steal podczas build na prod — przenieś build do CI.

Produkcja compose — twardy checklist

Osobny użytkownik linux do deploy — nie root.

CI secrets — nie w compose na serwerze.

Network internal default — tylko reverse proxy published.

Healthcheck failing — alert, nie silent restart loop.

Image vulnerability scan w pipeline.

Disaster: compose.yml + env backup offsite.

Kontenery na KVM — finał

Compose z limitami — zawsze.

docker.sock lokalnie — nigdy publicznie.

Ryzen build w CI, nie na prod VPS.

NVMe — obrazy i logi rotowane.

Transfer pull/push w planie VPS.

Anti-DDoS nie zamyka published portów.

AS219481 WAW Tier III — DC nie backup.

Backup wolumenów restic offsite.

KVM izolacja od sąsiada container host.

IP Transit WireGuard per TB — projekt sieciowy osobno.

Jak o tym myśleć

VPS Docker ma sens, gdy chodzi o: compose, workers, pełna kontrola silnika.

To nadal VPS na współdzielonej infrastrukturze: masz root, KVM i transfer w cenie planu, ale CPU steal, IOPS i uplink zależą od realnego obciążenia hosta. Jeśli potrzebujesz stałego heavy loadu 24/7, policz osobną architekturę zamiast zakładać, że większy plan VPS załatwi wszystko.

FAQ

Swarm czy Kubernetes?

Na jednym VPS — zwykle Compose wystarczy. K8s to kolejny poziom ops.

Podman?

Działa na KVM tak samo. Wybór narzędzia po Twojej stronie.

Ile RAM na stack?

Suma limitów kontenerów + 1–2 GB na host. Zostaw margines.

IPv6 dla kontenerów?

Zależy od konfiguracji docker0 i sieci DC. Test przed produkcją.

Rootless Docker?

Możliwe, mniejsze ryzyko. Niektóre porty <1024 wymagają dodatków.

Docker Compose v2?

Tak — plugin compose. Stary docker-compose binary deprecated.

Build on VPS czy CI?

CI buduje, VPS pulluje — mniej CPU steal na prod.

Wolumen na NFS?

Możliwe — latency wyższa. DB na lokalnym NVMe VPS.

SELinux + Docker?

label: disable ostrożnie — lepsze polityki volume.

Ile kontenerów na 2 GB?

Mało — nginx + app + redis może już ciasno. Mierz.

Automatyczny cleanup?

docker system prune w cron — uważaj na dangling volumes.

Secrets w env file?

chmod 600, poza git. Lepsze Docker secrets / vault.

Portainer?

OK na lab — nie wystawiaj publicznie bez VPN.

Rootless Docker?

Mniejsze ryzyko — niektóre porty wymagają sysctl.

Backup bind mount?

Backup host path albo volume — oba wymagają spójności aplikacji.

Czy docker compose wystarczy na prod?

Na jednym VPS często tak — z limitami zasobów, healthcheck, rotacją logów i backupem wolumenów offsite. Kubernetes to kolejny poziom operacyjny; nie komplikuj bez potrzeby. KVM daje izolację od sąsiada lepszą niż shared docker host u taniego providera.

Jak backupować named volumes?

restic na ścieżkę wolumenu z zatrzymaniem kontenera albo spójny hook aplikacji. Kopiowanie plików postgres w trakcie write bez dump — uszkodzona baza po restore.

Publish ports a Anti-DDoS?

Filtr L3/L4 nie zastępuje zamknięcia 0.0.0.0:6379. Sprawdź ss -tlnp na hoście po każdym deploy compose. Transfer planu VPS liczy też docker pull z registry.

Dalej

Linux · KVM · Proxmox lab