Jeśli konfigurujesz, testujesz i debugujesz rozwiązania sieciowe, Docker może znacząco uprościć Twoją codzienną pracę. Zapomnij o czasochłonnym stawianiu maszyn wirtualnych czy ręcznym odtwarzaniu środowisk – kontenery pozwalają Ci w kilka sekund uruchomić izolowane środowiska, które pozwalają znacznie efektywniej wykorzystać dostępne zasoby.
Czym jest Docker?
Docker to platforma, która umożliwia tworzenie, wdrażanie i zarządzanie aplikacjami w kontenerach. Technologia ta pozwala na „opakowanie” aplikacji oraz wszystkich jej zależności w jeden spójny pakiet. Zawiera on wszystko, co jest potrzebne do uruchomienia aplikacji — od kodu po biblioteki i inne zależności. Dzięki temu każdy kontener jest i działa identycznie jak jego twórca go przygotował. Zapomnij o "u mnie działa" 😉
Czym jest kontener?
Kontener Docker to lekka, izolowana jednostka działająca bezpośrednio na jądrze systemu operacyjnego hosta, tworząca odrębne środowisko dla aplikacji i jej zależności. Dzięki temu aplikacje uruchamiane w kontenerach działają identycznie w różnych środowiskach. W przeciwieństwie do maszyny wirtualnej, która wymaga własnego systemu operacyjnego i większych zasobów, kontener działa jak proces na hoście — jest szybki, zajmuje mniej miejsca i zużywa mniej pamięci, zapewniając jednocześnie niezbędną izolację.
Różnica między kontenerem a maszyną wirtualną (VM)
Cecha | Kontener | Maszyna wirtualna (VM) |
---|---|---|
Jądro systemu | Współdzielone z hostem | Własne jądro, niezależny system OS |
Uruchamianie | Szybkie, jako proces na hoście | Wolniejsze, wymaga pełnego OS |
Zasoby | Mniejsze zużycie (CPU, RAM) | Większe zużycie zasobów |
Izolacja | Izolacja na poziomie procesów | Izolacja na poziomie sprzętowym |
Wielkość obrazu | Mała, tylko niezbędne pliki | Duża, cały system operacyjny |

Maszyny wirtualne mogą pełnić podobną funkcję jak kontenery, ale w wielu przypadkach są po prostu zbyt ciężkie:
- długi czas startu (minuty vs. sekundy),
- duży narzut zasobów (pełny system operacyjny),
- trudniejsza automatyzacja i zarządzanie.
Jak Docker działa w praktyce?
Docker działa na zasadzie klient-serwer. Demon Docker Engine działa w tle, a Ty komunikujesz się z nim przez API lub narzędzie CLI.
Podstawowe komponenty Docker
Obraz (image)
Obraz Dockera to nieruchoma, read-only (tylko do odczytu) szablonowa warstwa, która zawiera wszystkie pliki, konfiguracje i zależności potrzebne do uruchomienia aplikacji. Można go porównać do „fotografii” środowiska uruchomieniowego. Obrazy są tworzone na podstawie plików Dockerfile, które definiują krok po kroku, jakie elementy mają się znaleźć w obrazie.
- Warstwowa struktura: Obrazy składają się z wielu warstw, co pozwala na efektywne zarządzanie i ponowne wykorzystywanie wspólnych elementów pomiędzy różnymi obrazami.
- Wersjonowanie: Każdy obraz może mieć tagi (np.
ubuntu:20.04
), które ułatwiają zarządzanie wersjami. - Źródła obrazów: Obrazy można pobierać z publicznych rejestrów (np. Docker Hub) lub tworzyć własne, dostosowane do potrzeb projektu.
Kontener (container)
Kontener to działająca instancja obrazu, czyli uruchomiony proces lub zestaw procesów izolowanych od reszty systemu operacyjnego. To właśnie w kontenerze działa Twoja aplikacja.
- Izolacja: Kontener ma własną przestrzeń procesów, system plików, sieć i inne zasoby, co zapobiega konfliktom z innymi aplikacjami.
- Szybkie uruchamianie i zatrzymywanie: Kontenery startują praktycznie natychmiast, ponieważ korzystają ze współdzielonego jądra systemu operacyjnego.
- Tymczasowość: Kontenery są zazwyczaj efemeryczne – po zatrzymaniu lub usunięciu ich stan jest tracony, chyba że dane są przechowywane w wolumenach.
Wolumen (volume)
Wolumeny to specjalne obszary dyskowe przeznaczone do trwałego przechowywania danych używanych przez kontenery. Są niezależne od cyklu życia kontenera.
- Trwałość danych: Dane zapisane w wolumenach pozostają nawet po usunięciu kontenera.
- Dzielenie danych: Wolumeny mogą być współdzielone między wieloma kontenerami, co umożliwia wymianę danych.
- Bezpieczeństwo i wydajność: Używanie wolumenów pozwala na lepszą kontrolę nad danymi oraz często zwiększa wydajność operacji dyskowych w porównaniu do zapisu bezpośrednio w kontenerze.
Sieć (network)
Sieci Dockera umożliwiają komunikację pomiędzy kontenerami oraz z zewnętrznym światem.
- Typy sieci:
- Bridge (most): Domyślna sieć izolowana dla kontenerów na tym samym hoście.
- Host: Kontener korzysta z sieci hosta bez izolacji.
- Overlay: Umożliwia komunikację między kontenerami na różnych hostach (np. w klastrze).
- Konfiguracja: Sieci można konfigurować pod kątem bezpieczeństwa (firewalle, reguły dostępu) oraz routingu.
- DNS i nazwy kontenerów: Docker automatycznie zarządza nazwami DNS dla kontenerów, co ułatwia ich wzajemną komunikację.
Dockerfile
Plik tekstowy definiujący instrukcje budowy obrazu Docker. Zawiera polecenia takie jak:
FROM
– bazowy obraz,RUN
– komendy do wykonania podczas budowania,COPY
/ADD
– kopiowanie plików,CMD
/ENTRYPOINT
– domyślna komenda uruchamiana w kontenerze.
Rejestr (registry)
Miejsce przechowywania obrazów Docker.
- Publiczne rejestry: np. Docker Hub, GitHub Container Registry.
- Prywatne rejestry: Firmowe serwery do bezpiecznego przechowywania obrazów.
- Umożliwia łatwe pobieranie i publikowanie obrazów.
Instalacja Dockera
Ze względu na specyfikę zastosowania, Docker był pierwotnie przeznaczony głównie dla systemów Linux, jednak podjęto wiele działań, aby zapewnić jego działanie także na platformach Windows i macOS.
Ubuntu
# Add Docker's official GPG key:
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
# Add the repository to Apt sources:
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu \
$(. /etc/os-release && echo "${UBUNTU_CODENAME:-$VERSION_CODENAME}") stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
Windows/MacOS
- Pobierz Docker Desktop ze strony Docker
Docker domyślnie jest instalowany z obrazem hello-world
, który pozwala na sprawdzenie, czy instalacja przebiegła poprawnie.
docker run hello-world
To proste polecenie uruchomi kontener testowy, który wyświetli krótki komunikat potwierdzający poprawność instalacji.
Najważniejsze polecenia Docker
Poniżej znajdziesz zestaw podstawowych komend, które będziesz używać niemal codziennie pracując z Dockerem:
- docker pull
Pobiera obraz Dockera z rejestru, np. Docker Hub.
docker pull ubuntu
- docker images
Wyświetla listę wszystkich pobranych obrazów Dockera.
docker images

- docker run
Uruchamia kontener na podstawie obrazu.-d
- oznacza detached, czyli kontener będzie działał w tle.--name
- nazwa kontenera.n8nio/n8n
- to nazwa obrazu, z którego ma zostać uruchomiony kontener.
docker run -d --name my_container n8nio/n8n

- docker stop
Zatrzymuje uruchomiony kontener.
Musisz znać nazwę lub ID kontenera, które znajdziesz przezdocker ps
.
docker stop my_container

- docker ps
Wyświetla listę aktualnie działających kontenerów.
Aby zobaczyć wszystkie kontenery, także zatrzymane, użyj:
docker ps -a

- docker rmi
Usuwa obraz Dockera, którego już nie potrzebujesz. Operacja jest nieodwracalna.
docker rmi 9f9d60171cff

- docker rm
Usuwa kontener. Operacja jest nieodwracalna – dane w kontenerze zostaną utracone.
docker rm my_container
Wejście do działającego kontenera (docker exec)
Czasem potrzebujesz wejść do środka kontenera, np. aby wykonać polecenia w jego środowisku.
docker exec -it my_container /bin/bash
-it
— interaktywny tryb terminala,/bin/bash
— powłoka bash (jeśli dostępna w obrazie).
W przypadku nginx
może być konieczne użycie /bin/sh
, jeśli bash nie jest zainstalowany.
Podsumowanie
Docker to potężne narzędzie, które znacznie przyspiesza tworzenie i uruchamianie aplikacji oraz całych stacków. Dzięki niemu możesz oszczędzać zarówno czas, jak i zasoby, a także znacznie usprawnić proces testowania i wdrażania aplikacji.
Powodzenia w nauce i wykorzystywaniu Dockera w swoich projektach! To narzędzie, które może znacznie poprawić efektywność Twojej pracy.