Czego szukasz?

Wpisz temat, narzędzie lub problem do rozwiązania.

← Wszystkie artykuły

Docker: co to jest, jak działa i do czego służy?

Techniczna ilustracja trzech odseparowanych aplikacji na wspólnej platformie serwerowej

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.

Schemat prowadzący od pliku Dockerfile przez obraz do kontenera aplikacji

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.

Porównanie maszyn wirtualnych z osobnymi jądrami i kontenerów współdzielących jądro Linux

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-demo nadaje kontenerowi nazwę używaną w kolejnych poleceniach.
  • -d uruchamia go w tle.
  • -p 127.0.0.1:8080:80 kieruje ruch z lokalnego portu 8080 do portu 80 kontenera.
  • docker/welcome-to-docker wskazuje 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.

Stary i nowy kontener połączone z tym samym wolumenem przechowującym dane

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ń:

  1. Z jakiego obrazu korzystam i jak będę go aktualizować?
  2. Które dane muszą przetrwać wymianę kontenera?
  3. Które porty rzeczywiście powinny być dostępne z zewnątrz?
  4. Jak sprawdzę, czy aplikacja działa poprawnie?
  5. 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

Źródła zweryfikowano: 23.09.2026.

KP
O AUTORZE

Krystian Proć

Tworzę narzędzia do pracy z danymi, systemy backendowe i automatyzacje. Pracuję z SQL, PHP, TypeScriptem i Dockerem; rozwijam m.in. dragon-island.com. AI pomaga mi przyspieszać pracę, a architekturę, weryfikację i decyzje techniczne biorę na siebie. Na Trybie Technicznym dzielę się doświadczeniami z budowania i utrzymywania własnych projektów.

Dyskusja

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Wymagane pola są oznaczone *