Konteneryzacja to technika pakowania aplikacji razem z wszystkimi jej zależnościami — bibliotekami, plikami konfiguracyjnymi, runtime’em — w jeden lekki, odizolowany paczek zwany kontenerem. Dzięki temu Twój kod uruchamia się tak samo na laptopie, na serwerze testowym i na produkcji. Koniec z klasycznym „u mnie działa”, bo cokolwiek aplikacja potrzebuje do życia, wędruje razem z nią w środku kontenera.
Kluczowa różnica w stosunku do maszyny wirtualnej: kontener nie zawiera własnego systemu operacyjnego. Współdzieli jądro (kernel) systemu gospodarza i izoluje procesy za pomocą mechanizmów jądra Linuksa — głównie namespaces (izolacja widoczności: procesy, sieć, system plików) i cgroups (limity zasobów: CPU, RAM). Efekt jest taki, że kontener waży megabajty zamiast gigabajtów i startuje w ułamku sekundy, a nie w minuty jak pełna VM.
Jak to działa w praktyce
Najpopularniejszym narzędziem jest Docker. Zaczynasz od Dockerfile — przepisu opisującego, co ma znaleźć się w obrazie (image). Obraz to zamrożony szablon, kontener to jego uruchomiona instancja. Typowy cykl wygląda tak:
- Budujesz obraz:
docker build -t moja-aplikacja . - Uruchamiasz kontener:
docker run -p 8080:80 moja-aplikacja - Wrzucasz obraz do rejestru (np. Docker Hub), żeby koledzy lub serwer produkcyjny mogli go pobrać.
Gdy kontenerów robi się dużo — bo każdy mikroserwis siedzi we własnym — wkracza orkiestracja. Tu króluje Kubernetes: dba o skalowanie, restart padniętych kontenerów i load balancing. Na mniejszą skalę wystarczy docker compose, żeby jednym plikiem YAML postawić aplikację, bazę i cache naraz.
Częste błędy i mity
- „Kontener to mała maszyna wirtualna” — nie. Brak własnego kernela to fundamentalna różnica, a nie szczegół.
- Dane w kontenerze są trwałe — nie są. Usuwasz kontener, znikają dane. Do trwałego stanu używaj
volumes. - Trzymanie sekretów w obrazie — hasła i klucze API wbite w
Dockerfilezostają w warstwach obrazu na zawsze. Przekazuj je zmiennymi środowiskowymi lub menedżerem sekretów. - Obraz na bazie pełnego systemu — zamiast ciężkiego
ubuntusięgaj po wariantyalpineczyslim. Mniejszy obraz to szybszy deploy i mniejsza powierzchnia ataku.
Pojęcia powiązane: Docker, Kubernetes, obraz (image), Dockerfile, mikroserwisy, wirtualizacja, CI/CD, DevOps, orkiestracja, namespaces, cgroups.