Docker pomaga uruchamiać aplikację z właściwymi zależnościami bez ręcznego odtwarzania całego środowiska na każdym komputerze. Nie naprawia jednak błędów programu i nie sprawia, że konfiguracja serwera przestaje mieć znaczenie. Najwięcej nieporozumień zaczyna się wtedy, gdy kontener traktujesz jak małą maszynę wirtualną albo zakładasz, że razem z aplikacją automatycznie zabezpieczasz jej dane.
W tym poradniku poznasz różnicę między obrazem a kontenerem, uruchomisz przykładową aplikację i zobaczysz, gdzie przydają się porty, wolumeny oraz Docker Compose. Przykłady dotyczą kontenerów linuksowych i są przeznaczone do nauki na własnym komputerze.
Docker - co to jest i jaki problem rozwiązuje?
Docker to platforma i zestaw narzędzi do budowania, dystrybucji oraz uruchamiania aplikacji w kontenerach. Zamiast instalować wszystkie biblioteki bezpośrednio w systemie, przygotowujesz środowisko programu jako obraz, a następnie tworzysz z niego kontener. Podstawowe elementy tej architektury opisuje oficjalne wprowadzenie do Dockera.
Wyobraź sobie dwa projekty wymagające różnych wersji tego samego środowiska uruchomieniowego. Przy instalacji wszystkiego na jednym systemie musisz pilnować, który projekt korzysta z których plików. W podejściu kontenerowym każdy może otrzymać własny zestaw zależności.
Praktyczna korzyść nie polega więc na samym uruchomieniu programu. Chodzi o możliwość opisania środowiska, przekazania go drugiej osobie i odtworzenia bez zgadywania, co wcześniej zainstalowano ręcznie.
Warto rozdzielić trzy nazwy:
- Docker Engine wykonuje operacje związane z kontenerami.
- Docker Desktop dostarcza środowisko pracy z Dockerem na komputerze użytkownika.
- Docker Hub jest rejestrem, z którego możesz pobierać obrazy.
To różne elementy ekosystemu. Korzystanie z kontenerów na serwerze nie oznacza konieczności instalowania tam graficznej aplikacji Desktop.
Obraz, kontener i Dockerfile - trzy różne rzeczy
Obraz jest pakietem, a kontener jest utworzoną z niego instancją środowiska aplikacji. Obraz może zawierać kod, biblioteki, programy pomocnicze i domyślną konfigurację uruchomienia. Jego zawartość jest niezmienna; nowa zawartość oznacza nowy obraz. Obrazy składają się z warstw, które mogą być współdzielone. Tak opisuje je dokumentacja obrazów kontenerowych.
| Pojęcie | Co oznacza | Przykład zastosowania |
|---|---|---|
| Dockerfile | Instrukcje budowania obrazu | Dodanie kodu aplikacji i instalacja zależności |
| Obraz | Gotowy pakiet potrzebny do utworzenia kontenera | Wydanie aplikacji przygotowane do wdrożenia |
| Kontener | Instancja utworzona z obrazu | Działająca aplikacja albo zakończone zadanie |
| Rejestr obrazów | Miejsce przechowywania i udostępniania obrazów | Docker Hub lub prywatny rejestr |
Jeden obraz może posłużyć do utworzenia kilku kontenerów. Nie oznacza to, że będą współdzieliły wszystkie zmiany w plikach. Każdy otrzymuje własną warstwę zapisu, chyba że świadomie udostępnisz im wspólne dane.
Dockerfile nie jest natomiast opisem całej infrastruktury. Odpowiada na pytanie, jak zbudować obraz. Połączenia między usługami, porty i miejsca przechowywania danych wygodniej opisać osobno, na przykład w Compose.

Jak działa Docker po wydaniu polecenia?
Gdy wpisujesz docker run, klient Dockera przekazuje żądanie do demona, czyli usługi zarządzającej kontenerami. Demon może działać lokalnie lub na innym komputerze. Jeśli potrzebnego obrazu nie ma lokalnie, standardowe uruchomienie może poprzedzić jego pobranie. Następnie powstaje kontener i rozpoczyna się wykonanie wskazanego programu. Ten podział klient-serwer opisuje architektura Dockera.
W kontenerach linuksowych izolacja wykorzystuje mechanizmy jądra. Przestrzenie nazw, czyli namespaces, oddzielają między innymi widok procesów i sieci. Grupy kontrolne, czyli cgroups, umożliwiają rozliczanie i ograniczanie zasobów. Nie jest to osobny komputer ukryty w katalogu. To procesy działające w wydzielonym środowisku. Szczegóły mechanizmu przedstawia dokumentacja bezpieczeństwa Docker Engine.
Wniosek praktyczny: sam fakt użycia kontenera nie przydziela aplikacji dowolnej ilości pamięci. Nadal korzysta ona z zasobów maszyny, na której działa.
Docker a maszyna wirtualna
Maszyna wirtualna ma własny system operacyjny z własnym jądrem. Kontenery linuksowe współdzielą jądro środowiska, w którym są uruchamiane. Dzięki temu nie trzeba uruchamiać osobnego systemu dla każdej aplikacji. Różnicę tę wyjaśnia porównanie kontenerów i maszyn wirtualnych.
| Cecha | Kontener linuksowy | Maszyna wirtualna |
|---|---|---|
| Jądro systemu | Współdzielone z hostem kontenerów | Własne jądro systemu gościa |
| Podstawowa jednostka | Środowisko procesu aplikacji | Cały system operacyjny |
| Typowe zastosowanie | Uruchamianie usług i zadań | Oddzielenie pełnych systemów |
| Koszt dodatkowego środowiska | Zwykle mniejszy | Obejmuje kolejny system gościa |
Oba rozwiązania mogą działać razem. Przykładowo VPS może być maszyną wirtualną, wewnątrz której uruchamiasz kilka kontenerów.
Nie należy też czytać tej tabeli jako obietnicy, że Docker nigdy nie korzysta z wirtualizacji. Uruchamianie kontenerów linuksowych na systemie z innym jądrem wymaga odpowiedniego środowiska linuksowego. Dokumentacja opisuje między innymi maszynę wirtualną używaną przez Docker Desktop. Obsługa różnych platform.

Do czego służy Docker w codziennej pracy?
Najłatwiej ocenić przydatność Dockera przez zadanie, które chcesz wykonać. Samo przeniesienie programu do kontenera nie jest jeszcze usprawnieniem.
Środowiska developerskie i testowe
Jeżeli projekt wymaga aplikacji, bazy danych i dodatkowej usługi, wspólny opis środowiska ogranicza liczbę ręcznych instrukcji dla nowych osób. Zamiast prośby o odtworzenie konfiguracji z pamięci przekazujesz pliki projektu.
Praktyczny przykład: testujesz zmianę w aplikacji korzystającej z bazy. Przygotowujesz osobne środowisko z testowymi danymi, zamiast eksperymentować na bazie używanej przez działającą stronę. Kontenery ułatwiają taki podział, ale poprawny wybór danych nadal należy do Ciebie.
Własny serwer i self-hosting
Możesz podzielić projekt na usługę aplikacji, bazę i proces wykonujący zadania w tle. Dzięki temu opisujesz ich konfigurację oddzielnie. Taki model wielousługowej aplikacji pokazuje przewodnik Docker Compose.
Dla początkującego administratora istotne są konkretne pytania: gdzie aplikacja zapisuje pliki, jak komunikuje się z bazą i co trzeba zachować przy aktualizacji. Dopiero odpowiedzi na nie pozwalają sensownie zaplanować wdrożenie.
Automatyzacja i zadania jednorazowe
Kontener nie musi działać bez przerwy. Możesz użyć go do wykonania skryptu, wygenerowania pliku albo przetworzenia danych. Po zakończeniu głównego procesu kontener może pozostać zatrzymany. Nie jest to automatycznie awaria. Cykl uruchomienia zależy od polecenia wykonywanego w środku. Uruchamianie kontenerów.
Dobrym kryterium jest powtarzalność: jeżeli często odtwarzasz te same zależności na różnych maszynach, warto rozważyć opisanie tego środowiska jako obrazu.
Pierwszy kontener Docker krok po kroku
Przykład zakłada lokalnie działającego Dockera w trybie kontenerów linuksowych, dostęp do internetu i wolny port 8080. Na komputerze możesz użyć Docker Desktop, a na Linuxie również Docker Engine. Szczegóły instalacji zależą od systemu; poniżej zaczynamy od sprawdzenia gotowego środowiska.
1. Sprawdź połączenie z Dockerem
W terminalu wykonaj:
docker version
Zwróć uwagę na informacje o kliencie i serwerze. Jeżeli klient nie może połączyć się z demonem, najpierw uruchom odpowiednią usługę albo Docker Desktop. Ponawianie polecenia tworzącego kontener nie rozwiąże braku połączenia.
2. Uruchom aplikację demonstracyjną
Wpisz jako jedną linię:
docker run --name tt-demo -d -p 127.0.0.1:8080:80 docker/welcome-to-docker
Poszczególne elementy oznaczają:
--name tt-demonadaje kontenerowi nazwę używaną w kolejnych poleceniach.-duruchamia go w tle.-p 127.0.0.1:8080:80kieruje ruch z lokalnego portu8080do portu80kontenera.docker/welcome-to-dockerwskazuje obraz demonstracyjny używany w dokumentacji Dockera.
Otwórz w przeglądarce http://127.0.0.1:8080. Powinna pojawić się strona demonstracyjna. To lokalna aplikacja, nie opublikowana strona internetowa. Oficjalny przykład z tym obrazem znajdziesz w przewodniku uruchamiania kontenera.
3. Sprawdź stan i logi
docker ps
docker logs tt-demo
Jeżeli aplikacja nie odpowiada, sprawdź również zatrzymane kontenery:
docker ps -a
Przy konflikcie portu możesz użyć mapowania 127.0.0.1:8081:80. Wtedy w przeglądarce wpisz port 8081. Jeśli nazwa tt-demo jest już zajęta, sprawdź istniejący kontener przed utworzeniem kolejnego.
4. Zakończ przykład
Poniższe polecenia dotyczą wyłącznie utworzonego kontenera demonstracyjnego:
docker stop tt-demo
docker rm tt-demo
Zatrzymanie i usunięcie to różne operacje. Pierwsza kończy działanie procesu, druga usuwa kontener. Pobrany obraz może pozostać na dysku.
Porty: dlaczego aplikacja nie zawsze jest dostępna?
Port aplikacji w kontenerze i port na komputerze to dwa różne punkty. Mapowanie 8080:80 oznacza: połącz port 8080 hosta z portem 80 kontenera. Nie zmienia konfiguracji samej aplikacji na port 8080.
Pomijając adres hosta w mapowaniu, domyślnie publikujesz port na wszystkich jego adresach. Dlatego w przykładzie używamy 127.0.0.1. Wyjaśnia to dokumentacja publikowania portów, która wskazuje również historyczny wyjątek dla wersji Engine starszych niż 28.0.0. Ćwiczenie wykonuj na aktualnej instalacji i przy standardowej konfiguracji sieci.
W typowej sieci Compose kontenery odnajdują się po nazwach usług. Jeżeli baza ma nazwę db, aplikacja łączy się z usługą db na porcie bazy, a nie z localhost swojego kontenera. Nie trzeba publikować portu bazy na hoście wyłącznie po to, by korzystała z niej druga usługa w tej samej sieci. Sieci w Docker Compose.
Gdzie Docker przechowuje dane?
Dane zapisane wyłącznie w zapisywalnej warstwie kontenera znikają przy jego usunięciu. Samo zatrzymanie kontenera ich nie kasuje. Do trwałego przechowywania danych możesz użyć wolumenu, którego cykl życia jest oddzielny od kontenera. Dokumentacja wolumenów.
W praktyce rozdziel:
- Obraz aplikacji, który można pobrać lub zbudować ponownie.
- Konfigurację, potrzebną do poprawnego uruchomienia.
- Dane użytkowników, których nie odtworzysz z samego obrazu.
Wolumen jest zarządzany przez Dockera. Inna możliwość, bind mount, udostępnia kontenerowi konkretny plik lub katalog hosta. Wybór zależy między innymi od tego, czy potrzebujesz bezpośrednio pracować na tych plikach poza kontenerem.
Trwałość nie oznacza jednak kopii zapasowej. Jeśli wolumen i baza działają na tym samym serwerze, utrata tego serwera może oznaczać utratę danych. Zaplanuj osobny backup i sprawdź odtwarzanie. Dla bazy danych sposób wykonania spójnej kopii dobierz do używanego silnika.

Docker Compose: konfiguracja zapisana w pliku
Przy kolejnych usługach ręczne polecenia stają się trudniejsze do utrzymania. Docker Compose pozwala opisać aplikację w YAML i zarządzać jej usługami razem. W pliku zapisujesz między innymi używane obrazy i mapowania portów. Sposób pracy przedstawia oficjalny przewodnik Compose.
Po zakończeniu poprzedniego ćwiczenia utwórz osobny katalog. Zapisz w nim plik compose.yaml:
services:
web:
image: docker/welcome-to-docker
ports:
- "127.0.0.1:8080:80"
Uruchom polecenia z tego katalogu:
docker compose -p tt-nauka config
docker compose -p tt-nauka up -d
docker compose -p tt-nauka ps
docker compose -p tt-nauka logs web
Pierwsze polecenie pozwala sprawdzić interpretację konfiguracji. Kolejne uruchamia usługę, pokazuje stan i odczytuje logi. Nazwa projektu tt-nauka oddziela to ćwiczenie od innych projektów Compose. Aplikacja jest dostępna pod tym samym lokalnym adresem co wcześniej.
Po ćwiczeniu usuń jego kontener i sieć projektu:
docker compose -p tt-nauka down
Jedna usługa wystarcza do poznania składni. Rozbudowując projekt, pamiętaj jednak, że uruchomiony kontener bazy nie musi jeszcze oznaczać gotowej bazy. Samo określenie kolejności startu nie wystarcza; Compose obsługuje oczekiwanie na poprawny healthcheck przy warunku service_healthy. Kontrola kolejności uruchamiania.
Czego Docker nie rozwiązuje automatycznie?
Zgodność platformy i wersji
Obraz przygotowany dla jednej architektury procesora nie zawsze zadziała natywnie na innej. Potrzebujesz odpowiedniego wariantu obrazu albo emulacji, która może obniżać wydajność. Obrazy wieloplatformowe pozwalają udostępnić kilka wariantów pod wspólnym odwołaniem. Budowanie dla wielu platform.
W przykładach pominęliśmy tag obrazu, więc używane jest domyślne latest. To wygodne w ćwiczeniu, ale nie identyfikuje niezmiennej zawartości. W kontrolowanym wdrożeniu określ wersję, a gdy potrzebujesz jednoznacznie wskazać zawartość, użyj identyfikatora digest. Odwołania do obrazów.
Bezpieczeństwo i utrzymanie
Kontener nie jest gwarancją bezpiecznego wykonania dowolnego kodu. Dostęp do demona Dockera oraz zbyt szerokie udostępnienie plików hosta mogą dać bardzo duże uprawnienia. Dlatego sprawdzaj pochodzenie obrazu i zakres wymaganych uprawnień. Model bezpieczeństwa Docker Engine.
Przed pierwszym wdrożeniem przygotuj odpowiedzi na pięć pytań:
- Z jakiego obrazu korzystam i jak będę go aktualizować?
- Które dane muszą przetrwać wymianę kontenera?
- Które porty rzeczywiście powinny być dostępne z zewnątrz?
- Jak sprawdzę, czy aplikacja działa poprawnie?
- Jak odtworzę usługę i dane po awarii?
Jeżeli nie znasz odpowiedzi, konteneryzacja jedynie przeniesie niejasności do nowego narzędzia. Dla pojedynczego skryptu uruchamianego raz na własnym komputerze dodatkowa konfiguracja może być niepotrzebna. Docker ma większą wartość wtedy, gdy środowisko trzeba utrzymywać, odtwarzać lub przekazywać dalej.
Czy Docker jest darmowy?
Trzeba odróżnić otwarte komponenty, takie jak Docker Engine, od warunków korzystania z Docker Desktop. Według dokumentacji Desktop jest bezpłatny między innymi do użytku osobistego, edukacji, niekomercyjnych projektów open source oraz dla małych firm spełniających oba warunki: mniej niż 250 pracowników i mniej niż 10 mln USD rocznego przychodu.
Użycie zawodowe poza bezpłatnym zakresem oraz przez podmioty rządowe wymaga płatnej subskrypcji. Przed wdrożeniem firmowym sprawdź aktualne zasady licencjonowania Docker Desktop. Te warunki nie oznaczają automatycznej opłaty za każdy kontener uruchomiony na serwerze z Docker Engine.
Najczęstsze pytania
Od czego zacząć naukę Dockera?
Zacznij od jednej aplikacji demonstracyjnej. Uruchom ją, sprawdź port, odczytaj logi, zatrzymaj i usuń kontener. Dopiero potem przenieś konfigurację do Compose i dodaj trwałe dane. Taka kolejność pozwala oddzielić problemy z Dockerem od problemów konkretnego projektu.
Czy Docker zastępuje VPS?
Nie. VPS dostarcza maszynę, na której mogą działać aplikacje. Docker organizuje ich uruchamianie w kontenerach. Możesz więc korzystać z Dockera na VPS-ie, ale nadal potrzebujesz zasobów obliczeniowych, miejsca na dysku i połączenia sieciowego. Kontenery i maszyny wirtualne mogą się uzupełniać. Kontenery a VM.
Dlaczego kontener od razu się zatrzymuje?
Możliwe, że główny proces zakończył zadanie albo wystąpił błąd aplikacji. Sprawdź docker ps -a oraz docker logs NAZWA_KONTENERA. Dla zadania jednorazowego zakończenie może być prawidłowe; dla serwera WWW wymaga wyjaśnienia. Zachowanie kontenera zależy od uruchomionego polecenia. Cykl uruchomienia.
Czy usunięcie kontenera usuwa bazę danych?
Może ją usunąć, jeśli pliki bazy były zapisane tylko w warstwie kontenera. Przy poprawnie podłączonym nazwanym wolumenie usunięcie samego kontenera nie usuwa wolumenu. Nadal możesz jednak skasować go osobną operacją, dlatego potrzebujesz również kopii zapasowej. Cykl życia wolumenów.
Dlaczego aplikacja nie widzi bazy pod localhost?
W typowej konfiguracji Compose localhost wewnątrz kontenera wskazuje ten kontener, nie oddzielną usługę bazy. Jeśli obie usługi są w tej samej sieci Compose, użyj nazwy usługi bazy i jej wewnętrznego portu, na przykład db:5432 dla tak skonfigurowanego PostgreSQL. Komunikacja usług Compose.
Czy Docker Compose wystarczy na początek?
Do poznania konfiguracji usług w jednym projekcie jest dobrym punktem startowym. Zacznij od małego środowiska, którego dane i połączenia rozumiesz. Jeśli później pojawią się wymagania dotyczące wielu serwerów lub odporności na awarie, oceniaj narzędzia pod te konkretne potrzeby, zamiast rozbudowywać infrastrukturę na zapas.
Źródła
- What is Docker? - architektura i podstawowe pojęcia, Docker Docs
- What is an image? - obrazy i warstwy, Docker Docs
- What is a container? - kontenery i maszyny wirtualne, Docker Docs
- Running containers - polecenia i odwołania do obrazów, Docker Docs
- Port publishing and mapping - publikowanie portów, Docker Docs
- Volumes - trwałe dane i cykl życia wolumenów, Docker Docs
- Docker Compose Quickstart - konfiguracja projektu, Docker Docs
- Networking in Compose - połączenia między usługami, Docker Docs
- Control startup and shutdown order in Compose, Docker Docs
- Docker Engine security - izolacja i uprawnienia, Docker Docs
- Multi-platform builds - zgodność systemów i architektur, Docker Docs
- Docker Desktop license agreement - warunki korzystania, Docker Docs
Źródła zweryfikowano: 23.09.2026.

Dyskusja