- Docker Compose zjednodušuje lokálne prostredia a testovanie; Kubernetes riadi pracovné zaťaženie vo veľkom meradle pomocou automatického škálovania, priebežných aktualizácií a samoopravy.
- Compose funguje na jednom hostiteľovi a s Dockerom; K8s podporuje viacero runtime prostredí, viacuzlové klastre a cloudové nasadenia.
- Kompose urýchľuje migráciu z Compose do Kubernetes; podporuje poskytovateľov, alternatívne objekty a značky na doladenie služieb.
- Prípady použitia: Compose pre vývoj/CI; Kubernetes pre produkciu, IoT/edge, big data/ML a scenáre multi/hybridného cloudu.
Ak pracujete s kontajnermi, skôr či neskôr vyvstane veľká otázka: Docker Compose alebo Kubernetes? Oba nástroje sa používajú v životnom cykle kontajnerových aplikácií , ale nie sú určené na riešenie úplne rovnakých problémov alebo v rovnakom kontexte. V tomto článku ich podrobne porovnáme s praktickými príkladmi, reálnymi scenármi a tipmi na bezproblémovú migráciu z jedného na druhý.
Okrem technologického zabezpečenia má toto rozhodnutie vplyv na každodennú prevádzku: časy nasadenia, škálovateľnosť , odolnosť, bezpečnosť a náklady . Ovplyvňuje aj typické prípady použitia dátového inžinierstva – dátové kanály, databázy, streamovanie, dávkové spracovanie, dátové formáty a riadenie – kde orchestrácia zohráva kľúčovú úlohu v produktivite.
Čo sú Docker a Docker Compose (a na čo vlastne slúžia)?
Keď hovoríme o Dockeri, v skutočnosti hovoríme o ekosystéme: Docker Engine, Docker Hub, Dockerfile, Docker Compose … Engine vytvára a spúšťa kontajnery z obrazov; Hub umožňuje jednoduché zdieľanie; a Compose vám umožňuje definovať niekoľko častí zásobníka v súbore YAML a spustiť ich jedným príkazom.
Compose bol vytvorený, aby nás ušetril od nekonečného množstva skriptov a izolovaných príkazov. Pomocou jediného súboru docker-compose.yml popíšete služby, siete a zväzky a všetko spustíte a spustíte jediným príkazom „docker compose up“ (alebo „docker-compose up“ vo V1). Ideálne pre lokálny vývoj, integrované testovanie, demoverzie alebo prostredia CI.
Kanonickým príkladom Compose by mohol byť tento, s API a databázou Postgres. Všimnite si, ako sú závislosti, premenné a porty deklarované v čitateľnom bloku:
version: '3.8'
services:
db:
image: postgres:latest
restart: always
environment:
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=postgres
- POSTGRES_DB=postgres
ports:
- '5432:5432'
volumes:
- db:/var/lib/postgresql/data
networks:
- mynet
my-api:
container_name: my-api
build:
context: ./
image: my-api
depends_on:
- db
ports:
- '8080:8080'
environment:
DB_HOST: db
DB_PORT: 5432
DB_USER: postgres
DB_PASSWORD: postgres
DB_NAME: postgres
networks:
- mynet
networks:
mynet:
driver: bridge
volumes:
db:
driver: local
Na manuálne škálovanie v Compose môžete použiť možnosť škálovania danej služby. V Compose V2 sa to bežne robí pomocou `up --scale` (vo V1 to bolo `docker-compose scale`):
docker compose up -d --scale my-api=3
Dajte si pozor na obmedzenia: Compose je navrhnutý pre jedného hostiteľa , nevyrovnáva záťaž medzi uzlami ani sa neškáluje automaticky a aktualizácie sú zvyčajne manuálne rekonštrukcie kontajnerov s „build“ a „up -d“.
Čo je Kubernetes a čo ponúka oproti Compose?
Kubernetes (K8s) je distribuovaná platforma pre orchestráciu kontajnerov. Spravuje nasadenia vo veľkom meradle naprieč viacuzlovými klastrami pomocou konceptov ako Pody, Nasadenia a Služby na prevádzku produkčných úloh.
V Kubernetes nespravujete jednotlivé kontajnery; spravujete Pody (ktoré môžu obsahovať jeden alebo viac kontajnerov). Riadiaca rovina plánuje, kde sa každý Pod spúšťa , sprístupňuje služby, distribuuje prevádzku, horizontálne škáluje a monitoruje stav pracovných záťaží.
Základné nasadenie môže vyzerať takto s 3 replikami webovej služby. Definujte šablóny, označenia a exponované porty :
apiVersion: apps/v1
kind: Deployment
metadata:
name: web-deployment
spec:
replicas: 3
selector:
matchLabels:
app: web
template:
metadata:
labels:
app: web
spec:
containers:
- name: web
image: my-web-image
ports:
- containerPort: 8000
Na jeho sprístupnenie pomocou vyrovnávania záťaže je v cloude typická služba LoadBalancer. Selektor porovnáva označenia podu s smerovaním prevádzky.
apiVersion: v1
kind: Service
metadata:
name: web-service
spec:
selector:
app: web
ports:
- protocol: TCP
port: 80
targetPort: 8000
type: LoadBalancer
V produkčnom prostredí Kubernetes vyniká funkciami, ako je vysokovýkonná automatizácia (HPA), priebežné aktualizácie a samoobnova. HPA upravuje repliky na základe metrík (napr. využitie CPU) :
apiVersion: autoscaling/v2beta2
kind: HorizontalPodAutoscaler
metadata:
name: web-hpa
spec:
minReplicas: 1
maxReplicas: 10
scaleTargetRef:
apiVersion: apps/v1
kind: Deployment
name: web-deployment
metrics:
- type: Resource
resource:
name: cpu
target:
type: Utilization
averageUtilization: 50
Stav kontajnera sa monitoruje pomocou sond; ak zlyhajú, K8s reštartuje kontajner. Toto je základ „samoopravy“ :
apiVersion: v1
kind: Pod
metadata:
name: web-pod
spec:
containers:
- name: web
image: my-web-image
ports:
- containerPort: 8000
livenessProbe:
httpGet:
path: /healthcheck
port: 8000
initialDelaySeconds: 15
periodSeconds: 15

Kľúčové podobnosti a rozdiely (základné informácie bez zahmlievania)
Čo majú spoločné: pracujú s kontajnermi a definujú nasadenia prostredníctvom YAML. Obe riešenia sú užitočné pre vývojárov aj operátorov a veľmi dobre sa dopĺňajú v pracovnom postupe dev→prod.
Zásadný rozdiel spočíva v rozsahu: Compose je zameraný na Docker a je určený pre jedného hostiteľa ; Kubernetes podporuje viacero runtime prostredí a klastre s viacerými uzlami s priamou integráciou do cloudov a spravovaných služieb.
Dôležitejšie rozdiely: Kubernetes ponúka automatické škálovanie, priebežné aktualizácie a samoopravu ; Compose to neponúka. Kubernetes sa spája s Podmi; Compose interaguje priamo s Docker kontajnermi.
Kubernetes navyše obsahuje úlohy Jobs a CronJob pre jednorazové alebo plánované úlohy. Tým sa zabráni systémovým cron úlohám a dodatočným kontajnerizovaným procesom , čím sa platforma udržiava ako prirodzené miesto na definovanie automatizácií.
V lokálnych prostrediach Compose vyhráva z hľadiska rýchlosti a jednoduchosti. Pre škálovanie na stovky uzlov alebo multicloudové prostredia je Kubernetes logickou voľbou . Compose môže využiť Docker Swarm pre nasadenie na viacerých hostiteľoch, ale jeho miera prijatia a možnosti nezodpovedajú ekosystému a vyspelosti Kubernetes.
Prečo potrebujete orchestráciu (a kedy sa ktorá z nich najlepšie hodí)
Dobrý orchestrátor vám poskytuje: jednotné poskytovanie a nasadzovanie, plánované spustenia, komunikáciu medzi službami , vyrovnávanie záťaže a zvýšenú bezpečnosť prostredníctvom dodatočnej správy nad každou službou.
Compose pokrýva základy zjednodušeným a čitateľným spôsobom, vďaka čomu je skvelým nástrojom pre vývoj, testovanie a ukážky. Jeho obmedzenia sa však prejavia, keď potrebujete viacero uzlov, natívne vyvažovanie záťaže a automatické škálovanie alebo prírastkové nasadenie bez prestojov.
Kubernetes je na druhej strane „platforma“, keď záťaž rastie: viacuzlové, automatické škálovanie, vysoká dostupnosť a gigantický ekosystém s natívnou podporou AWS, Azure, GCP a spravovaných možností.
Prípady použitia v reálnom svete (vývoj, dáta a ďalšie)
Compose vyniká v: reprodukovateľných lokálnych prostrediach, E2E testovaní, CI/CD a školení . Definovanie celého stacku v YAML a jeho spustenie jedným príkazom eliminuje veľa šumu.
Kubernetes je ideálny pre: produkčné aplikácie, IoT a edge computing, big data a strojové učenie a multi/hybridné cloudové prostredia. Spravuje distribuované pracovné záťaže, kde záleží na latencii, odolnosti a pozorovateľnosti.
V dátovom inžinierstve je K8s ideálny pre streamovacie a dávkové spracovanie dát, databázy, fronty a analytické nástroje s riadením zdrojov pre jednotlivé pody a automatickým škálovaním pri špičkách.
Ak je váš projekt malý a zmestí sa na jedného hostiteľa, Compose to zvládne bez problémov. Ale keď vaša používateľská základňa rastie a potrebujete serióznu odolnosť voči chybám a vyvažovanie záťaže , je čas zvážiť Kubernetes.
Siete, škálovanie a aktualizácie: praktické porovnanie
Compose vytvára sieť pre každý projekt a prekladá názvy pre každú službu. Komunikácia s kontajnermi je v rámci projektu triviálna a bezpečná , ale externé vyvažovanie záťaže a multihosting nie sú natívne funkcie.
V Kubernetes ponúkajú služby vyhľadávanie DNS a vyvažovanie záťaže v rámci klastra; smerom von môžete na smerovanie HTTP/S prevádzky použiť LoadBalancer, NodePort alebo Ingress.
Škálovanie: Compose sa škáluje manuálne a iba na jednom hostiteľovi. Kubernetes sa škáluje horizontálne pomocou HPA a programovo pomocou metrík a/alebo udalostí. Ak to klaster umožňuje, môže sa rozšíriť aj na viac uzlov.
Aktualizácie: V Compose sa zvyčajne jedná o manuálne reprodukcie. K8s vykonáva priebežné aktualizácie s kontrolou priebehu (zavádzanie kubectl) a možnosťou vrátiť sa späť, ak sa niečo pokazí, čím sa minimalizuje dopad.
Samooprava: Compose dokáže reštartovať kontajnery, ale nerieši pády hostiteľa alebo runtime. Kubernetes presúva Pody na zdravé uzly , transparentne pre používateľov.
Produktivita vývojárov a prevádzkové skúsenosti
Compose je tenká vrstva nad Dockerom. Rýchlo sa učí a jeho spätná väzba je okamžitá , ideálna na iterácie.
Kubernetes pridáva nové koncepty (Pody, Nasadenia, Služby, Ingress, ConfigMaps, PVC atď.). Je síce potrebné sa učiť, ale na oplátku získate podrobnú kontrolu nad nasadeniami, bezpečnosťou, pozorovateľnosťou a škálovateľnosťou.
Pokiaľ ide o kompatibilitu, Compose je „Docker-first“. Kubernetes podporuje rôzne runtime prostredia a integruje sa s poskytovateľmi cloudu , čo je kľúčové pre spoločnosti s multicloudovými alebo hybridnými stratégiami.
Migrácia z Docker Compose na Kubernetes bez zbláznenia sa
Kedy migrovať? Keď vaša aplikácia už nie je „malá“, potrebujete viacuzlové nasadenie, pozorovateľnosť, škálovateľnosť a vysokú dostupnosť , alebo sa od vás žiadajú kanárkové a modro-zelené nasadenia.
Typické výzvy: mapovanie servisnej siete, návrh úložiska s PV/PVC , rozdelenie konfigurácie do ConfigMaps/Secrets a kontrola vzorcov stavu a pripravenosti každého kontajnera.
Architektúra sa tiež musí prehodnotiť: Pod ako jednotka nasadenia , služby na sprístupnenie koncových bodov a zdroje na kontajner (CPU/Mem), aby plánovač mohol vykonávať svoju prácu.
Kompose: od Compose ku K8s v niekoľkých krokoch
Kompose konvertuje súbory docker-compose.yml do manifestov Kubernetes alebo OpenShift. Je to najpriamejší spôsob, ako spustiť migráciu bez manuálneho prepisovania celého YAML.
Pred začatím potrebujete klaster Kubectl a nakonfigurovaný kubectl. Ak testujete niečo stavové, odporúčajú sa aspoň dva pracovné uzly (nie riadiace roviny). Skontrolujte si verziu pomocou `kubectl version`.
Inštalácia: Odporúčanou metódou je stiahnuť si binárny súbor z najnovšej verzie GitHub. Môžete tiež použiť tarball, Homebrew v systéme macOS alebo „go get“ (táto posledná možnosť používa master so zmenami vo vývoji).
Základná konverzia: prejdite do adresára docker-compose.yml a spustite :
kompose convert
kubectl apply -f <archivos-generados>
Kompose štandardne generuje nasadenia a služby. V protokole sa zvyčajne uvádza každý vytvorený súbor a po jeho použití sa v klastri zobrazia nasadenia a služby ako „vytvorené“.
Prístup: Ak používate Minikube, môžete jednoducho sprístupniť alebo dotazovať služby. V cloude začiarknite políčko „LoadBalancer Ingress“ , aby ste získali verejnú IP adresu služby LoadBalancer; s NodePort budete mať na uzloch otvorený port.
Čistenie: Po dokončení testu odstráňte použité prostriedky. Udržujte klaster čistý, aby ste predišli konfliktom medzi iteráciami.
Rozšírené možnosti Kompose (poskytovatelia, objekty a značky)
Kompose podporuje Kubernetes a OpenShift. Ak nezadáte „--provider“, štandardne použije Kubernetes . S OpenShift dokáže generovať DeploymentConfigs a ImageStreams a dokonca aj BuildConfigs, ak použijete direktívy zostavovania.
Podporuje tiež rôzne výstupy: JSON s „-j“, ReplicationControllers, DaemonSets alebo Helm Charts . Príznak „--replicas“ umožňuje zmeniť počet replík v RC; pre Helm generuje základnú štruktúru grafu.
Značky špecifické pre Kompose v procese písania ovplyvňujú konverziu. Môžete napríklad definovať typ služby alebo to, či sa má koncový bod sprístupniť prostredníctvom vstupu/trasy.
| Štítok | hodnoty |
|---|---|
| typ.služby.kompose | nodeport/clusterip/loadbalancer |
| kompose.service.expose | true / názov hostiteľa |
Detaily, ktoré treba mať na pamäti: názvy s „_“ sa prevedú na „-“ (K8s nepovoľuje podčiarkovníky) a ak služba používa zväzky, stratégia nasadenia sa zmení na „Znovu vytvoriť“, aby sa predišlo konfliktom s viacerými zapisovačmi.
Kompose podporuje viacero verzií a súborov
Kompose podporuje Compose V1, V2 a V3 (s obmedzenou podporou pre verzie 2.1 a 3.2 kvôli ich experimentálnej povahe). Ak odovzdáte viacero súborov docker-compose naraz, zlúčia sa a spoločné prvky sa prepíšu najnovším, rovnako ako pri prepísaní.
Počas konverzie Kubernetes sa zobrazia správy ako „WARN Unsupported key build – ignoring“, ak existujú nekompatibilné kľúče. Nebojte sa, nástroj bude pokračovať s tým, čo rozumie , a zvyšok ponechá na neskoršie manuálne úpravy.
Viac než Kompose: Move2Kube a manuálna migrácia
Ak potrebujete väčšiu kontrolu, existujú nástroje ako Move2Kube, ktoré analyzujú vaše správy Compose a generujú prepracovanejšie artefakty Kubernetes. Sú užitočné, keď chcete prispôsobiť obchodné vzory alebo šablóny z vašej platformy.
Manuálna migrácia je úplne platná a takmer vždy sa odporúča po počiatočnej migrácii. Medzi typické kroky patrí: konverzia služieb na Deployments/StatefulSets , sietí na Services/Ingress a zväzkov na PV/PVC s triedami úložiska.
Minimálny príklad prevodu služby Compose na Deployment môže vyzerať takto: prenos portov, obrázka a štítkov do šablóny Pod:
# docker-compose.yml
version: '3'
services:
web:
build: .
ports:
- '8000:8000'
depends_on:
- db
# Kubernetes
apiVersion: apps/v1
kind: Deployment
metadata:
name: web-deployment
spec:
replicas: 1
selector:
matchLabels:
app: web
template:
metadata:
labels:
app: web
spec:
containers:
- name: web
image: my-web-image
ports:
- containerPort: 8000
Pre stav (databázy, fronty) zvážte StatefulSets a PersistentVolumes. Nie všetko, čo išlo „spolu“ v Compose, by malo ísť do toho istého Podu ; oddeľte zodpovednosti a na komunikáciu medzi komponentmi použite Services.
Dátové scenáre: streamovanie, dávkové spracovanie a riadenie
V komplexných dátových kanáloch sa K8s hodí ako uliaty: úlohy pre dávkové procesy, CronJob pre časové okná , nasadenia pre API a operátory pre systémy ako Kafka, Spark alebo Flink.
Pre streamovanie a databázy uľahčujú spustenie operátori komunity a grafy. Sieť Service Mesh a riadenie zdrojov zabezpečujú predvídateľnejšie latencie a SLO v porovnaní s riešením s jedným hostiteľom.
V oblasti správy a bezpečnosti údajov ponúka Kubernetes menné priestory, politiky a kontrolu RBAC pre audit a oddelenie prostredí. To je praktická výhoda oproti lokálnemu prístupu Compose.
Najlepšie postupy a malé prevádzkové triky
V Compose: udržujte svoj YAML malý a modulárny ; používajte premenné prostredia a súbory .env; dokumentujte porty a závislosti; a v CI zohľadnite, čo spúšťate lokálne.
V Kubernetes: definujte požiadavky/limity CPU a pamäte , použite sondy pripravenosti/aktivity, oddeľte konfiguráciu do ConfigMaps/Secrets a aplikujte vhodné stratégie nasadenia na každú službu.
Pre aktualizácie Kubecku: použite `kubectl set image` a `kubectl rollout status` na sledovanie priebehu a vrátenie zmien, ak sa niečo pokazí. Tým sa zabráni prestojom v produkcii.
Ak potrebujete v Compose špecifické úlohy, môžete ich simulovať, ale v Kubernetes je to s CronJobs/Jobs prehľadnejšie ; nezahlcujete kontajnery ďalšími procesmi ani hostiteľskými cronmi.
Stručné najčastejšie otázky, aby ste sa vyhli zmätku
Nahrádza Compose Kubernetes? Nie. Compose zjednodušuje viackontajnerové zásobníky na jednom hostiteľovi; Kubernetes orchestruje v klastrovom meradle s vysokou dostupnosťou.
Používa sa ešte Compose? Áno, veľmi často. Je to ideálny vývojový a testovací nástroj na nastavenie kompletných prostredí len s niekoľkými príkazmi.
Je Kubernetes „lepší“ ako Docker? Sú to rôzne veci: Docker je kontajnerová platforma ; Kubernetes ich organizuje v klastri a pridáva pokročilé operácie.
Môžem preniesť svoj Compose do Kubernetes bez manuálneho prepisovania? Áno, s integráciou Kompose alebo Docker Desktop. Poskytne vám to rýchly prvý krok , ktorý môžete potom spresniť.
Jemné detaily: programovanie, OpenShift a alternatívne konverzie
K8s nie je len kontinuálne nasadzovanie: úlohy a CronJob pokrývajú jednorazové alebo plánované úlohy bez toho, aby ste museli spravovať systémové crony.
V OpenShift dokáže Kompose generovať DeploymentConfigs a ImageStreams, a dokonca aj BuildConfigs, ak Compose mal zostavenie priradené k repozitáru Git. Príznaky „--build-repo“ a „--build-branch“ sa používajú na úpravu zdroja.
Ak chcete iný výstup, Kompose umožňuje použiť DaemonSets, ReplicationControllers alebo Helm Charts namiesto predvolených Deployments a Services. Dokáže tiež generovať JSON, nielen YAML.
Kompatibilita, upozornenia a menšie problémy
Kompose podporuje Compose V1/V2/V3 (s obmedzeniami vo verziách 2.1 a 3.2). Nepodporované klávesy sú ignorované s chybou WARN , čo ponecháva priestor na manuálne úpravy.
Ak má vaša služba zväzky, Kompose zmení stratégiu na „Znovu vytvoriť“, aby sa predišlo súbežnosti na rovnakom zväzku . Toto je bežné pre stavové služby.
Podčiarkovníky v názvoch sa konvertujú na pomlčky. Ide o obmedzenie Kubernetes týkajúce sa názvov objektov , preto sa uistite, že ich v nástroji Compose pomenujete správne, aby ste sa vyhli prekvapeniam počas konverzie.
Pre prístup zvonku začiarknite typ služby: ClusterIP (interná), NodePort (port na uzloch) alebo LoadBalancer (verejná IP adresa v cloude). S Ingressom budete mať čisté trasy HTTP/S a centralizované TLS.
Ak testujete v Minikube, príkazy ako „minikube service <svc> –url“ vrátia rýchlu URL adresu . V Cloude sa pri popise služby pozrite na pole „LoadBalancer Ingress“.
Jeden zaujímavý bod: v komunite nájdete zmienky o platoch pre profily Kubernetes a miere prijatia takmer 88 % v produkčných prostrediach. Nič nezvyčajné: je to de facto štandard.
Aby sme doplnili obraz, Kubernetes ponúka viac než len HTTP: Service Mesh, operátory a CRD rozširujú dosah Kubernetes. Ak prechádzate z Compose, je normálne, že sa na začiatku budete cítiť zahltení, ale tento dodatočný výkon sa premieta do robustnejších operácií.
Politiky resetovania: užitočné ekvivalencie
Compose umožňuje „reštart: vždy/pri zlyhaní/nie“. V Kubernetes budete mať v závislosti od prípadu jednotlivé Pody alebo ovládače (Deployments alebo RC) s príslušnými politikami reštartu.
| reštart docker-compose | Objekt v K8s | reštartPolicy |
|---|---|---|
| «» / vždy | Riadiaci pracovník (nasadenie/RC) | Vždy |
| pri zlyhaní | Struk | OnFailure |
| žiadny | Struk | Nikdy |
Ak ste v Compose mali kontajnery na „výpočty“ alebo prchavé úlohy (ako napríklad rýchle „pí“), jednoducho ich implementujte v K8s ako úlohu alebo CronJob s príslušnou politikou a máte hotovo.
Pre rýchle lokálne nasadenie zvoľte Compose a pre Kubernetes, keď vaše prostredie vyžaduje vyšší výkon: podporu viacerých uzlov, automatické škálovanie, bezproblémové nasadenie a skutočnú odolnosť . S Compose, Move2Kube a trochou starostlivosti je prechod plynulý.
Výber v konečnom dôsledku závisí od rozsahu a komplexnosti: Compose sa skvele hodí na vývoj, testovanie a single-host stacky ; Kubernetes je najlepšou voľbou pre podniky, multicloudové nasadenia a tímy, ktoré potrebujú pokročilú automatizáciu, vysokú dostupnosť a ekosystém s tisíckami integrácií.
