Kontener

Lekka, izolowana paczka zawierająca aplikację wraz z jej zależnościami i konfiguracją. Działa identycznie niezależnie od środowiska, w którym jest uruchomiona.

Kontener to lekka, izolowana paczka, która zawiera Twoją aplikację razem ze wszystkim, czego potrzebuje do działania: kodem, bibliotekami, zależnościami, plikami binarnymi i konfiguracją. Kluczowa obietnica jest prosta: skoro spakowałeś środowisko razem z aplikacją, to działa ono tak samo na Twoim laptopie, na serwerze kolegi i na produkcji. Koniec z klasycznym „u mnie działa”.

Najważniejsze, żebyś nie mylił kontenera z maszyną wirtualną. VM uruchamia własny, pełny system operacyjny z osobnym kernelem — to ciężkie i wolne. Kontenery natomiast współdzielą kernel systemu gospodarza i izolują się od siebie mechanizmami Linuksa: namespaces (osobny widok procesów, sieci, systemu plików) oraz cgroups (limity na CPU i pamięć). Dlatego kontener startuje w ułamku sekundy i waży megabajty, a nie gigabajty.

Jak to działa w praktyce

Punktem wyjścia jest obraz (image) — niezmienny szablon zbudowany z warstw, opisany w pliku Dockerfile. Z jednego obrazu uruchamiasz dowolnie wiele identycznych kontenerów. Obraz wrzucasz do rejestru (np. Docker Hub czy GitHub Container Registry), a potem pobierasz go gdziekolwiek chcesz. To właśnie ta powtarzalność sprawia, że kontenery są fundamentem CI/CD i mikroserwisów.

Najpopularniejszym narzędziem jest Docker, ale standard obrazów (OCI) jest otwarty, więc równie dobrze użyjesz Podmana czy containerd. Prosty scenariusz: chcesz odpalić lokalnie bazę PostgreSQL bez instalowania jej na czysto w systemie.

docker run --name baza -e POSTGRES_PASSWORD=tajne -p 5432:5432 -d postgres:16

Jedna komenda i masz działającą bazę w wersji 16, którą po pracy usuniesz przez docker rm -f baza nie zostawiając śmieci. Gdy aplikacja składa się z kilku usług (baza, backend, cache), opisujesz je w docker-compose.yml i podnosisz wszystko przez docker compose up.

Częste błędy i mity

  • „Kontener jest sam w sobie bezpieczny” — nie jest. Współdzieli kernel, więc dziurawy obraz albo uruchamianie wszystkiego jako root to realne ryzyko. Skanuj obrazy i nie ufaj losowym tagom latest.
  • Dane w kontenerze są trwałe — nie są. Po usunięciu kontenera znikają. Jeśli chcesz je zachować, użyj wolumenów (volumes).
  • Pakowanie wszystkiego w jeden obraz — dobra praktyka to jeden proces na kontener i lekka warstwa bazowa (np. alpine albo obrazy slim), żeby nie ciągnąć setek megabajtów niepotrzebnych pakietów.

Pojęcia powiązane, które warto poznać dalej: Docker, obraz (image), Dockerfile, Kubernetes (orkiestracja wielu kontenerów), konteneryzacja, wirtualizacja i mikroserwisy. Gdy ogarniesz kontenery, orkiestracja będzie naturalnym kolejnym krokiem.