Docker to otwartoźródłowa platforma, która pakuje aplikację razem z całym jej środowiskiem — kodem, bibliotekami, zależnościami i konfiguracją — w jeden lekki, przenośny pakiet zwany kontenerem. Taki kontener uruchomisz na swoim laptopie, na serwerze kolegi i na maszynie w chmurze i wszędzie zachowa się identycznie. To właśnie Docker jest odpowiedzialny za pogrzebanie klasycznego tekstu „u mnie działa”, którym programiści tłumaczyli się od początku świata.
Jak to działa i do czego służy
Kontener nie jest pełną maszyną wirtualną. Zamiast emulować cały system operacyjny z własnym kernelem, kontenery współdzielą jądro systemu hosta i izolują się od siebie za pomocą mechanizmów Linuksa — namespaces (izolacja widoczności procesów, sieci, plików) i cgroups (limity na CPU i pamięć). Dzięki temu kontener startuje w ułamku sekundy i waży megabajty, a nie gigabajty jak osobna VM.
Punktem wyjścia jest obraz (image) — niezmienny szablon zbudowany z przepisu zapisanego w pliku Dockerfile. Z obrazu tworzysz uruchomione kontenery. Obrazy trzymasz i pobierasz z rejestru, najczęściej Docker Hub. W skrócie: Dockerfile to przepis, image to upieczone ciasto, a container to kawałek, który właśnie jesz.
Przykład z praktyki
Masz aplikację w Node.js i chcesz ją odpalić bez instalowania niczego „na brudno” w systemie. Tworzysz Dockerfile, budujesz obraz i uruchamiasz kontener:
docker build -t moja-apka .— buduje obraz z bieżącego katalogudocker run -p 3000:3000 moja-apka— uruchamia kontener i mapuje port 3000 na zewnątrzdocker ps— pokazuje, co aktualnie chodzi
Gdy aplikacja składa się z kilku usług (np. backend + baza danych + Redis), zamiast żonglować komendami używasz Docker Compose i jednego pliku compose.yaml, a potem odpalasz wszystko jednym docker compose up.
Częste błędy i mity
Najpopularniejszy mit: „Docker to to samo co maszyna wirtualna”. Nie jest — kontener współdzieli kernel hosta, dlatego jest lekki, ale też dlatego natywne obrazy Linuksa potrzebują warstwy pośredniej na macOS i Windows. Częste wpadki początkujących:
- Wrzucanie sekretów (haseł, kluczy API) na stałe do obrazu — obraz nie jest sejfem, każdy go rozpakuje.
- Trzymanie danych w kontenerze zamiast w wolumenach — po
docker rmdane znikają bezpowrotnie. - Tag
latestw produkcji — pewnego dnia „latest” to już coś zupełnie innego i nic nie działa. - Obrazy ważące gigabajty, bo bazujesz na pełnym systemie zamiast na wariancie
slimczyalpine.
Pojęcia powiązane
Warto skojarzyć Dockera z: konteneryzacja, wirtualizacja, Dockerfile, Docker Compose, Docker Hub, Kubernetes (orkiestracja wielu kontenerów na skalę), CI/CD oraz DevOps.