Wprowadzenie do Dockera
Czym jest Docker?
Docker to platforma open-source, która umożliwia automatyzację wdrażania aplikacji wewnątrz kontenerów. Kontenery pozwalają programistom pakować aplikacje ze wszystkimi potrzebnymi częściami (biblioteki, frameworki, zależności) i wysyłać je jako jeden pakiet.
Kontenery vs Maszyny Wirtualne
| Kontenery | Maszyny wirtualne |
|---|---|
| Współdzielą jądro z hostem | Pełna wirtualizacja sprzętu |
| Lekkie (MB) | Ciężkie (GB) |
| Uruchamiają się w sekundy | Uruchamiają się w minuty |
| Mniej izolowane | Bardziej izolowane |
| Idealny dla mikrousług | Idealny dla pełnych systemów |
Architektura Dockera
- Docker Engine - główny komponent,
składający się z:
- Docker Daemon (dockerd) - usługa działająca w tle
- REST API - interfejs do komunikacji z demonem
- Docker CLI - interfejs wiersza poleceń
- Docker Registry - magazyn obrazów
Dockera
- Docker Hub - publiczny rejestr obrazów
- Docker Images - szablony tylko do odczytu
- Docker Containers - uruchomione instancje obrazów
Podstawowe pojęcia
- Obraz (Image) - niemodyfikowalny szablon zawierający kod, środowisko uruchomieniowe, biblioteki, zmienne środowiskowe i pliki konfiguracyjne
- Kontener (Container) - uruchomiona instancja obrazu
- Dockerfile - skrypt zawierający instrukcje budowania obrazu
- Docker Hub - rejestr przechowujący obrazy Docker
- Volume - trwały mechanizm przechowywania danych przez kontenery
Podstawowe komendy
Pobieranie i zarządzanie obrazami
# Pobranie obrazu z Docker Hub
docker pull nazwa_obrazu:tag
# Lista pobranych obrazów
docker images
# Usunięcie obrazu
docker rmi nazwa_obrazuUruchamianie i zarządzanie kontenerami
# Uruchomienie kontenera
docker run nazwa_obrazu
# Uruchomienie kontenera w tle (detached mode)
docker run -d nazwa_obrazu
# Uruchomienie kontenera z mapowaniem portów (host_port:container_port)
docker run -p 8080:80 nazwa_obrazu
# Uruchomienie kontenera z montowaniem wolumenu
docker run -v /ścieżka/na/hoście:/ścieżka/w/kontenerze nazwa_obrazu
# Uruchomienie kontenera z ustawieniem zmiennych środowiskowych
docker run -e ZMIENNA=wartość nazwa_obrazu
# Uruchomienie kontenera z nadaniem mu nazwy
docker run --name mój_kontener nazwa_obrazu
# Lista uruchomionych kontenerów
docker ps
# Lista wszystkich kontenerów (również zatrzymanych)
docker ps -a
# Zatrzymanie kontenera
docker stop id_lub_nazwa_kontenera
# Uruchomienie zatrzymanego kontenera
docker start id_lub_nazwa_kontenera
# Usunięcie kontenera
docker rm id_lub_nazwa_kontenera
# Wyświetlenie logów kontenera
docker logs id_lub_nazwa_kontenera
# Uruchomienie powłoki w działającym kontenerze
docker exec -it id_lub_nazwa_kontenera bashPraktyczne ćwiczenia - pierwsze kroki z Dockerem
Ćwiczenie 1: Hello World
# Uruchom kontener hello-world
docker run hello-worldWynik powinien pokazać komunikat potwierdzający poprawne działanie Dockera.
Ćwiczenie 2: Uruchomienie Node.js w kontenerze
# Pobierz obraz Node.js
docker pull node:18-alpine
# Uruchom kontener i wyświetl wersję Node.js
docker run --rm node:18-alpine node -vĆwiczenie 3: Uruchomienie serwera WWW
# Pobierz obraz Nginx
docker pull nginx
# Uruchom serwer WWW na porcie 8080
docker run -d -p 8080:80 --name moj-nginx nginxOtwórz przeglądarkę i wejdź na adres http://localhost:8080
Ćwiczenie 4: Interakcja z kontenerem
# Uruchom powłokę w kontenerze
docker exec -it moj-nginx bash
# W kontenerze wykonaj:
ls -la /usr/share/nginx/html
cat /etc/nginx/conf.d/default.conf
exitĆwiczenie 5: Przeglądanie logów i zatrzymanie kontenera
# Wyświetl logi serwera
docker logs moj-nginx
# Zatrzymaj kontener
docker stop moj-nginx
# Sprawdź, czy kontener jest na liście zatrzymanych
docker ps -a
# Usuń kontener
docker rm moj-nginxRejestry Docker
- Docker Hub - publiczny rejestr obrazów
Docker
- Oficjalne obrazy (weryfikowane przez Docker)
- Obrazy społeczności
- Prywatne repozytoria (ograniczone w darmowym planie)
Aby szukać obrazów, odwiedź Docker Hub.
Zasoby do nauki
- Oficjalna dokumentacja Docker
- Play with Docker - środowisko do nauki Dockera w przeglądarce
- Docker Curriculum
- Kurs Docker na Katacoda
Przydatne skróty i wskazówki
- Użyj
-daby uruchomić kontener w tle - Użyj
--rmaby automatycznie usunąć kontener po zatrzymaniu - Użyj
docker system pruneaby wyczyścić nieużywane zasoby (zatrzymane kontenery, nieużywane sieci, niepodłączone wolumeny) - Użyj
docker exec -it [id_kontenera] shjeśli bash nie jest dostępny w kontenerze