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:
- Zainstaluj Docker Desktop (Windows/macOS) albo Docker Engine (Linux).
- Uruchom pierwszy gotowy kontener z Docker Hub - klasyczny
hello-worldalbo lekki serwer WWW, żeby zobaczyć, że wszystko chodzi. - Napisz własny Dockerfile dla prostej aplikacji - naucz się budować obraz z przepisu.
- 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.