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:
- Bridge (Domyślny): Prywatna sieć wewnątrz hosta. Kontenery mogą się komunikować, jeśli są w tej samej sieci.
- Host: Kontener korzysta bezpośrednio z sieci hosta (brak izolacji portów).
- Overlay: Komunikacja między kontenerami na różnych hostach (używane w Docker Swarm).
- None: Całkowita izolacja sieciowa.
Scenariusz: Izolacja Frontendu i Backend-u
-
Tworzenie sieci:
Bash
docker network create FENetwork docker network create BENetwork -
Podpinanie kontenerów:
fe(Frontend) -> podłączony doFENetwork.be(Backend) -> podłączony doFENetworkorazBENetwork.db(Baza danych) -> podłączona tylko doBENetwork.
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/dawidw 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 doroot.