Gdzie uruchamiać kontenery: jak wybrać runtime (ECS, Fargate, Kubernetes, serverless)

Devopsity 15 lipca 2022 Aktualizacja 07 października 2026 7 min czytania
Contents

Gdzie uruchamiać kontenery: jak wybrać runtime

Gdy aplikacja jest już spakowana w kontener, pojawia się kolejne pytanie: gdzie go uruchomić? Opcje sięgają od pojedynczego hosta Docker, przez usługę zarządzaną w rodzaju Amazon ECS na Fargate, po pełny klaster Kubernetes albo serverless. Ten przewodnik daje neutralne ramy decyzyjne - ile każda opcja kosztuje w pieniądzach i w nakładzie operacyjnym oraz kiedy jest właściwym wyborem.

Sama konteneryzacja to problem rozwiązany. Jeśli potrzebujesz jeszcze podstaw - czym jest kontener i jaki silnik kontenerowy wybrać (Docker, LXC/LXD, runtime’y OCI) - zacznij tam i wróć. Ten artykuł zakłada, że masz już Dockerfile i obraz, a zadajesz kolejne pytanie: co ma to uruchomić na produkcji?

Zły wybór kosztuje w obie strony. Sięgniesz po Kubernetes za wcześnie i płacisz za złożoność klastra, której nie potrzebujesz. Zostaniesz na pojedynczym hoście Docker za długo i uderzasz w problemy ze skalowaniem, dostępnością i wdrożeniami, które orkiestrator by rozwiązał. Celem jest dopasowanie runtime’u do rzeczywistego kształtu obciążenia.

 

Cztery modele uruchamiania

Niemal każdy sposób uruchomienia kontenera mieści się w jednym z czterech modeli. Tworzą drabinę rosnących możliwości - i rosnącego kosztu operacyjnego.

1. Własny host Docker

Pojedyncza maszyna wirtualna (EC2, Azure VM, droplet) z daemonem Dockera, często z docker compose dla aplikacji wielokontenerowych. Twoje są system operacyjny, patchowanie, backupy i dostępność.

Dobre do: projektu pobocznego, narzędzia wewnętrznego, maszyny staging albo naprawdę małej, jednousługowej aplikacji bez wymogu wysokiej dostępności.

Przestaje wystarczać, gdy: potrzebujesz wdrożeń bez przestoju, więcej niż jednego węzła albo automatycznego restartu po awarii hosta. Nie ma wbudowanego schedulera - jeśli maszyna padnie, aplikacja leży, dopóki ktoś nie zareaguje.

2. Zarządzana usługa kontenerowa (ECS / Fargate / Container Apps / Cloud Run)

Dostawca chmury prowadzi warstwę sterującą; ty podajesz obraz kontenera i trochę konfiguracji. Amazon ECS planuje kontenery; z typem uruchomienia Fargate nie zarządzasz serwerami w ogóle. Azure Container Apps i Google Cloud Run zajmują tę samą niszę.

Dobre do: zdecydowanej większości produkcyjnych aplikacji webowych i API - od jednej do kilku usług, zmienny ruch, zespół, który chce kontenerów na produkcji bez zostawania operatorami klastra.

Przestaje wystarczać, gdy: potrzebujesz drobnoziarnistej kontroli nad schedulingiem, bogatego ekosystemu operatorów (service mesh, własne kontrolery) albo przenośności między chmurami na poziomie orkiestracji.

3. Kubernetes (EKS / AKS / GKE lub self-managed)

Pełny orkiestrator. Ogromne możliwości - deklaratywny stan, samonaprawianie, autoskalowanie poziome/pionowe/klastra, rozległy ekosystem - kosztem realnej złożoności operacyjnej. Zarządzane warstwy sterujące (EKS, AKS, GKE) zdejmują najtrudniejszą część, ale nie krzywą uczenia.

Dobre do: 5+ mikrousług komunikujących się ze sobą, ostrych wymogów zero-downtime i elastyczności, workflow GitOps albo świadomej strategii multi-cloud.

Przestaje wystarczać, gdy: masz 1-3 usługi bez planu wzrostu albo zespół nie ma jeszcze doświadczenia operacyjnego z kontenerami. Narzut przeważa korzyść. Kiedy i jak - opisujemy szczegółowo w praktycznym wprowadzeniu do Kubernetes.

4. Serverless (Lambda / Cloud Functions, oparte na obrazie kontenera)

Kontener jest tu szczegółem implementacyjnym; wdrażasz funkcję, a platforma uruchamia ją na żądanie, skalując do zera w bezczynności. AWS Lambda obsługuje obrazy kontenerów do 10 GB.

Dobre do: pracy sterowanej zdarzeniami, zadań zaplanowanych, skokowych lub niskowolumenowych API, kodu spajającego usługi. Płacisz tylko za czas wykonania.

Przestaje wystarczać, gdy: masz stały wysoki ruch (rozliczenie za żądanie przestaje być tanie powyżej kilku milionów żądań miesięcznie), długo działające procesy albo obciążenia wrażliwe na opóźnienia, gdzie zimne starty bolą.

 

Tabela decyzyjna

ModelNakład operacyjnySkaluje do zera?Najlepsze dopasowanieOrientacyjny koszt minimalny / mies.
Własny host DockerWysoki (Twój system operacyjny)NieProjekty poboczne, narzędzia wewnętrzne, stagingKoszt 1 VM (~$10-40)
Usługa zarządzana (Fargate / Cloud Run / Container Apps)NiskiCloud Run / Container Apps: tak; Fargate: nieWiększość produkcyjnych aplikacji webowych i API~$15-50 za małą usługę działającą ciągle
Kubernetes (EKS / AKS / GKE)WysokiDomyślnie nie (wymaga strojenia)5+ mikrousług, HA, multi-cloud~$350-450 za minimalny klaster 3-węzłowy
Serverless (Lambda / Cloud Functions)Bardzo niskiTakZdarzeniowe, zaplanowane, skokowe, niskowolumenowe$0 w bezczynności; płatność za wykonanie

Kwoty są orientacyjnymi punktami wyjścia do planowania, nie wycenami - realny koszt zależy od rozmiarów instancji, ruchu, pamięci masowej i transferu danych.

 

Prosty sposób na wybór

Przejdź przez listę i zatrzymaj się na pierwszym „tak”:

  1. Czy to zdarzeniowe, zaplanowane albo niskowolumenowe? → Serverless (Lambda / Cloud Functions). Niech skaluje do zera.
  2. Czy to 1-3 usługi, które muszą być dostępne, przy zmiennym ruchu? → Zarządzana usługa kontenerowa. Fargate (AWS), Cloud Run (GCP) albo Container Apps (Azure). To domyślna odpowiedź dla większości zespołów.
  3. Czy masz 5+ powiązanych usług, ostre wymogi HA/elastyczności albo mandat multi-cloud? → Kubernetes. Zarządzana warstwa sterująca, chyba że compliance wymusza self-managed.
  4. Czy to obciążenie jednorazowe, wewnętrzne albo staging, gdzie przestój jest OK? → Pojedynczy host Docker jest uczciwy i tani.

Najczęstszy błąd, jaki widzimy, to przeskok od razu do kroku 3. Kubernetes to platforma, nie ustawienie domyślne. Jeśli pasują kroki 1 lub 2, wybierz je - do Kubernetes zawsze możesz awansować później, a wykonana już praca nad konteneryzacją przenosi się bezpośrednio.

 

Wybór między chmurami

Gdy już wybierzesz model, konkretna usługa zależy od chmury. Mapowanie jest zbliżone, ale nie identyczne - AWS ECS/Fargate/EKS ustawiają się naprzeciw Azure Container Apps/ACI/AKS oraz Google Cloud Run/GKE, z istotnymi różnicami w cenniku, sieci i ekosystemie. Porównujemy je obok siebie, wraz z pełną tabelą mapowania usług, w artykule AWS vs Azure - strategie wdrażania kontenerów.

Kontenery są też fundamentem architektury mikrousług oraz aplikacji cloud native - jeśli w tę stronę zmierzasz, wybór runtime’u powyżej jest pierwszą decyzją infrastrukturalną na tej ścieżce.

 

Podsumowanie

Nie ma jednego „najlepszego” miejsca na uruchomienie kontenera - jest najlepsze dopasowanie do kształtu Twojego obciążenia. Serverless do pracy zdarzeniowej i skokowej. Zarządzana usługa kontenerowa (Fargate, Cloud Run, Container Apps) do większości aplikacji produkcyjnych. Kubernetes, gdy skala i złożoność naprawdę to uzasadniają. Zwykły host Docker do małych i jednorazowych rzeczy. Dopasuj model do obciążenia, odłóż złożoność do momentu, gdy będzie potrzebna, i pozwól, by wykonana już praca nad konteneryzacją przenosiła się wraz z rosnącymi wymaganiami.

 

Najczęściej zadawane pytania

Czy potrzebuję Kubernetes, żeby uruchamiać kontenery na produkcji?

Nie. Dla 1-3 usług zarządzana usługa kontenerowa jak AWS Fargate, Google Cloud Run czy Azure Container Apps uruchamia kontenery na produkcji przy znacznie mniejszym nakładzie operacyjnym. Kubernetes zaczyna się opłacać przy mniej więcej 5+ powiązanych usługach albo gdy potrzebujesz jego ekosystemu i przenośności multi-cloud.

Jaka jest różnica między ECS a Fargate?

ECS to scheduler kontenerów Amazona. Fargate to typ uruchomienia dla ECS (i EKS), w którym AWS prowadzi za Ciebie serwery, więc nie zarządzasz instancjami EC2. ECS możesz uruchomić na EC2 (zarządzasz hostami) albo na Fargate (nie zarządzasz).

Czy mogę uruchomić kontener jako funkcję serverless?

Tak. AWS Lambda, Google Cloud Functions i Azure Functions pozwalają wdrożyć obraz kontenera jako paczkę funkcji. Pasuje to do obciążeń zdarzeniowych i niskowolumenowych, które korzystają ze skalowania do zera, ale słabo nadaje się do stałego wysokiego ruchu lub długo działających procesów.

Jak przejść z pojedynczego hosta Docker do czegoś bardziej skalowalnego?

Obraz kontenera, który już masz, jest przenośny. Następnym krokiem jest zwykle zarządzana usługa kontenerowa (Fargate, Cloud Run, Container Apps) - podajesz ten sam obraz plus niewielką konfigurację. Przejście na Kubernetes to większy krok, który dodaje manifesty, Ingress oraz zarządzanie konfiguracją i sekretami; zobacz nasze wprowadzenie do Kubernetes.

containers containerization ECS Fargate serverless devopstools