Docker - Podstawy Konteneryzacji

Praktyczny przewodnik po podstawach Dockera - komendy, sieci, wolumeny

Published on Mar 29, 2026

Reading time: 2 minutes.


Docker 

1. Podstawowe Komendy

Zarządzanie kontenerami i obrazami.

Komenda Opis
docker ps Lista uruchomionych kontenerów.
docker ps -a Lista wszystkich kontenerów (również zatrzymanych).
docker run hello-world Uruchomienie testowego obrazu.
docker run -it ubuntu bash Uruchomienie interaktywne (-it) kontenera Ubuntu z powłoką bash.
docker stop <nazwa> Zatrzymanie kontenera.
docker start <nazwa> Uruchomienie istniejącego, zatrzymanego kontenera.
docker inspect <nazwa> Szczegółowe informacje o kontenerze (JSON).
docker rm $(docker ps -a -q) --force Usunięcie wszystkich kontenerów (wymuszone).
docker exec -it <nazwa> sh Wejście do środka działającego kontenera.

Przykład PostgreSQL:

docker run --name my-postgres -e POSTGRES_PASSWORD=password -p 5432:5432 -d postgres:latest

  • -e: Zmienna środowiskowa (hasło).
  • -p: Mapowanie portów (Host:Kontener).
  • -d: Tryb detached (działa w tle).

2. Docker Networks (Sieci)

Docker używa modeli sieciowych do izolacji lub komunikacji między kontenerami.

Standardy i Sterowniki

  • CNM (Container Network Model): Standard używany przez Docker.
  • CNI (Container Network Interface): Standard używany m.in. przez Kubernetes.

Typy sieci:

  1. Bridge (Domyślny): Prywatna sieć wewnątrz hosta. Kontenery mogą się komunikować, jeśli są w tej samej sieci.
  2. Host: Kontener korzysta bezpośrednio z sieci hosta (brak izolacji portów).
  3. Overlay: Komunikacja między kontenerami na różnych hostach (używane w Docker Swarm).
  4. None: Całkowita izolacja sieciowa.

Scenariusz: Izolacja Frontendu i Backend-u

  1. Tworzenie sieci:

    Bash

    docker network create FENetwork
    docker network create BENetwork
    
  2. Podpinanie kontenerów:

    • fe (Frontend) -> podłączony do FENetwork.
    • be (Backend) -> podłączony do FENetwork oraz BENetwork.
    • db (Baza danych) -> podłączona tylko do BENetwork.

Dzięki temu Frontend nie ma bezpośredniego dostępu do Bazy Danych, co zwiększa bezpieczeństwo.


3. Porty (Mapping)

Domyślnie porty kontenera nie są dostępne z zewnątrz (hosta).

  • Błąd: docker run --name web1 nginx -> curl localhost (zwróci błąd połączenia).
  • Poprawnie: docker run --name web1 -p 8081:80 nginx -> curl localhost:8081 (działa).

4. Przechowywanie Danych (Volumes & Bind Mounts)

Problem trwałości danych

Kontenery są efemeryczne – po poleceniu docker rm wszystkie dane zapisane wewnątrz nich znikają.

Wolumeny (Docker Volumes)

Zarządzane w pełni przez Docker (/var/lib/docker/volumes/).

Bash

docker volume create my-volume
docker run -d -it --name my-container -v my-volume:/data alpine
  • Danych nie tracisz po usunięciu kontenera.
  • Możesz podpiąć ten sam wolumen do wielu kontenerów jednocześnie.
  • docker volume prune: Usuwa nieużywane wolumeny (uwaga: czyści tylko te, które nie są przypięte do żadnego kontenera).

Bind Mounting (Mapowanie katalogów)

Mapowanie konkretnego folderu z Twojego komputera do kontenera.

Bash

docker run -d -it --name my-node-app -v ./:/home/dawid -w /home/dawid --user $(id -u):$(id -g) node:21
  • -v ./:/home/dawid: Mapuje obecny folder (./) do /home/dawid w kontenerze.
  • -w: Ustawia katalog roboczy (working directory).
  • --user $(id -u):$(id -g): Bardzo ważne! Powoduje, że pliki utworzone przez kontener należą do Twojego użytkownika, a nie do root.