Artykuł Serwery

Docker - co to jest, jak działa i po co komu konteneryzacja

Docker to narzędzie do konteneryzacji - pakuje aplikację razem z jej zależnościami w lekki, przenośny kontener, który działa tak samo na każdym komputerze i serwerze. Rozwiązuje klasyczny problem "u mnie działa, a u ciebie nie", i robi to bez ciężaru pełnej maszyny wirtualnej.

Co to jest Docker - definicja bez żargonu

Docker to otwarte oprogramowanie (open source), które pozwala spakować aplikację wraz ze wszystkim, czego ona potrzebuje do działania - kodem, bibliotekami, plikami konfiguracyjnymi - w jeden zamknięty pakiet zwany kontenerem. Ten sam pakiet uruchamia się identycznie na Twoim laptopie, na maszynie kolegi z zespołu i na produkcyjnym serwerze to udawany, pełny komputer działający wewnątrz Twojego komputera - z własnym systemem operacyjnym, własnym jądrem, wirtualnym dyskiem i pamięcią. Żeby uruchomić jedną aplikację, dokładasz do niej cały system, który zżera kilka gigabajtów RAM i startuje minutami.

Kontener działa inaczej. Nie nosi ze sobą własnego systemu operacyjnego - współdzieli jądro Linuksa z maszyną, na której jest uruchomiony (to jest host). Startuje jako zwykły, odizolowany proces. Dzięki temu zajmuje ułamek zasobów, które zajęłaby pełna maszyna wirtualna, i włącza się w ułamku sekundy zamiast w minucie.

Trade-off: maszyna wirtualna daje mocniejszą izolację, bo każda ma osobne jądro - to bywa istotne przy twardych wymaganiach bezpieczeństwa albo gdy musisz uruchomić inny system niż host (np. Windows na serwerze Linux). Kontener daje lekkość i szybkość, ale dzieli jądro z hostem, więc granica izolacji jest cieńsza. W codziennej praktyce - jeden serwer, dziesiątki usług webowych - kontenery wygrywają zasobami i prędkością bez dyskusji.

Cecha Maszyna wirtualna Kontener Docker
Własny system operacyjny tak, pełny nie, dzieli jądro hosta
Zużycie zasobów wysokie (GB RAM na VM) niskie (ułamek zasobów VM)
Czas startu dziesiątki sekund / minuty ułamek sekundy
Izolacja mocna (osobne jądro) procesowa (wspólne jądro)
Typowe zastosowanie różne systemy na jednym hoście wiele usług na jednym systemie

Pro tip admina: to nie jest wybór "albo-albo". W realnych wdrożeniach kontenery bardzo często chodzą wewnątrz maszyny wirtualnej - VM daje twardą granicę na poziomie infrastruktury, a Docker w środku daje wygodę pakowania i skalowania usług.

Obraz kontra kontener - dwa pojęcia, które trzeba rozdzielić

Początkujący mylą te dwa terminy najczęściej, a różnica jest prosta i warto ją zapamiętać.

Obraz (image) to szablon - zamrożony przepis na środowisko. To gotowy plik opisujący dokładnie, co ma się znaleźć w środku: system bazowy, zainstalowane biblioteki, Twoja aplikacja, konfiguracja. Obraz jest statyczny i niezmienny; pobierasz go, kopiujesz, wersjonujesz. Można go porównać do pliku instalacyjnego albo do formy do odlewania.

Kontener to żywa, uruchomiona instancja obrazu. Bierzesz obraz i "odpalasz" go - powstaje działający proces z Twoją aplikacją w środku. Z jednego obrazu możesz uruchomić dziesięć identycznych kontenerów naraz, tak jak z jednej formy odlejesz dziesięć takich samych elementów. Kontenery można włączać, zatrzymywać, przenosić i usuwać, a obraz zostaje nietknięty.

Do tego dochodzi Dockerfile - zwykły plik tekstowy, w którym krok po kroku zapisujesz, jak zbudować obraz: od jakiego systemu bazowego zacząć, co doinstalować, co skopiować, jak uruchomić aplikację. Docker czyta ten plik i buduje z niego obraz. To ważny szczegół: całe środowisko masz opisane w wersjonowalnym pliku, a nie w głowie ani w nieudokumentowanych komendach na serwerze.

Do czego służy Docker w praktyce

Teoria teorią, ale po co Ci to realnie. Kilka scenariuszy, w których Docker naprawdę zarabia na siebie:

  • Spójne środowisko całego zespołu. Nowy programista klonuje projekt, uruchamia jedną komendę i ma identyczne środowisko co reszta - bez dnia traconego na "u mnie się nie instaluje".
  • Testy bez zaśmiecania komputera. Chcesz sprawdzić aplikację na trzech różnych wersjach bazy danych (na przykład MySQL i PostgreSQL naraz)? Odpalasz je jako kontenery, a po testach kasujesz - na głównym systemie nie zostaje nic.
  • Powtarzalne wdrożenia na serwer. Ten sam obraz, który działał u Ciebie lokalnie, ląduje na serwerze produkcyjnym. Zero rozjazdu między "u mnie" a "na produkcji". Deploy zwykle sprowadza się do pobrania nowego obrazu przez połączenie SSH, a ruch z internetu rozdziela między nie nginx w roli reverse proxy.

Ekosystem Dockera - pojęcia, które spotkasz od razu

Wokół samego silnika narosło kilka nazw, które padają w każdym poradniku. Krótko, co jest czym:

  • Docker Engine - właściwy silnik działający w tle (daemon), który buduje obrazy i uruchamia kontenery. To serce całości.
  • Docker Desktop - aplikacja na Windows i macOS z graficznym interfejsem, która pod spodem odpala Dockera w lekkiej maszynie wirtualnej z Linuksem. Dla początkującego na Windowsie to najprostszy start.
  • Docker Hub - publiczne repozytorium gotowych obrazów. Zamiast budować obraz Ubuntu, bazy czy serwera WWW od zera, pobierasz sprawdzony obraz jedną komendą.
  • Docker Compose - narzędzie do uruchamiania środowisk wielokontenerowych z jednego pliku. Opisujesz w nim wszystkie usługi (aplikacja, baza, cache), a Compose stawia je razem jedną komendą. To naturalny kolejny krok po opanowaniu pojedynczego kontenera.
  • Docker Swarm i Kubernetes - narzędzia do orkiestracji, czyli zarządzania wieloma kontenerami na wielu maszynach naraz. Swarm jest prostszy i wbudowany w Dockera; Kubernetes to standard w większych wdrożeniach. Na początek nie są Ci potrzebne.

Sprawdź jedno, zanim ruszysz dalej: Docker jest darmowy do użytku osobistego, w edukacji i w mniejszych firmach - płatne plany wchodzą przy większych organizacjach korzystających z Docker Desktop. Sam silnik i obrazy z Docker Hub uruchomisz bez opłat.

Od czego zacząć z Dockerem

Ścieżka, która działa i nie przytłacza:

  1. Zainstaluj Docker Desktop (Windows/macOS) albo Docker Engine (Linux).
  2. Uruchom pierwszy gotowy kontener z Docker Hub - klasyczny hello-world albo lekki serwer WWW, żeby zobaczyć, że wszystko chodzi.
  3. Napisz własny Dockerfile dla prostej aplikacji - naucz się budować obraz z przepisu.
  4. Poznaj Docker Compose, gdy zaczniesz potrzebować więcej niż jednego kontenera naraz (aplikacja plus baza danych).

Konkret: nie musisz od razu ogarniać Kubernetes ani orkiestracji. Dwa dni skupionej praktyki wystarczą, żeby swobodnie budować obrazy, uruchamiać kontenery i spinać kilka usług przez Compose. Reszta przychodzi z realnymi projektami.

FAQ

Czy Docker to to samo co maszyna wirtualna?

Nie. Maszyna wirtualna emuluje pełny komputer z własnym systemem operacyjnym i jądrem, przez co jest ciężka i wolno startuje. Kontener Docker współdzieli jądro systemu hosta i działa jako lekki, odizolowany proces. Efekt: kontener zużywa ułamek zasobów VM i uruchamia się w ułamku sekundy.

Czym różni się obraz od kontenera?

Obraz to niezmienny szablon - gotowy przepis na środowisko z aplikacją, bibliotekami i konfiguracją. Kontener to uruchomiona, żywa instancja tego obrazu, w której faktycznie działa program. Z jednego obrazu uruchomisz wiele identycznych kontenerów naraz, a sam obraz pozostaje nietknięty.

Czy Docker działa tylko na Linuksie?

Docker opiera się na mechanizmach jądra Linuksa, ale uruchomisz go też na Windows i macOS. Docker Desktop odpala wtedy pod spodem lekką maszynę wirtualną z Linuksem, w której chodzą kontenery. Z punktu widzenia użytkownika obsługa jest taka sama na każdym z tych systemów.

Czy Docker jest darmowy?

Tak, do użytku osobistego, edukacyjnego i w mniejszych firmach Docker jest darmowy. Sam silnik Docker Engine, obrazy z Docker Hub i Docker Compose nie kosztują nic. Płatne plany dotyczą Docker Desktop w większych organizacjach - warto sprawdzić aktualne warunki licencji na stronie producenta.

Czym jest Docker Compose i kiedy go potrzebuję?

Docker Compose to narzędzie do uruchamiania kilku kontenerów naraz z jednego pliku konfiguracyjnego. Opisujesz w nim wszystkie usługi (na przykład aplikację, bazę danych i cache), a Compose stawia je razem jedną komendą. Potrzebujesz go, gdy Twój projekt to więcej niż jeden kontener.

Czym różni się Docker od Kubernetes?

Docker buduje i uruchamia pojedyncze kontenery na jednej maszynie. Kubernetes to orkiestrator - zarządza setkami kontenerów rozłożonych na wielu maszynach, dba o skalowanie, samonaprawę i rozkład ruchu. To nie konkurenci: najczęściej Kubernetes zarządza kontenerami zbudowanymi w standardzie zapoczątkowanym przez Dockera.