1.1 Podstawy Docker Images
Docker Images (obrazy Docker) — to szablony dla kontenerów Docker. Zawierają wszystko, co jest potrzebne do uruchamiania aplikacji: kod, biblioteki, zależności, narzędzia i pliki konfiguracyjne. Zrozumienie, czym są Docker Images i jak są zbudowane, jest ważne dla efektywnego korzystania z Docker.
Docker Image — to niezmienny
szablon, który jest używany do tworzenia kontenerów. Zawiera wszystkie niezbędne komponenty do uruchamiania aplikacji w izolowanym środowisku. Gdy uruchamiasz kontener, Docker tworzy instancję obrazu i uruchamia go.
Kluczowe cechy Docker Images:
- Niezmienność: obrazy Docker są niezmienne. Wszelkie zmiany dokonane w kontenerze nie wpływają na oryginalny obraz. Aby zmienić zawartość obrazu, trzeba stworzyć nowy obraz.
- Warstwowa struktura: Docker Images składają się z kilku warstw. Każda warstwa reprezentuje zmianę w stosunku do poprzedniej. Pozwala to na efektywne wykorzystanie miejsca dzięki ponownemu użyciu warstw.
- Identyfikacja: każdy obraz ma unikalny identyfikator (SHA256-hash), a także może mieć jeden lub więcej tagów, które ułatwiają zarządzanie wersjami obrazów.
Struktura Docker Images:
Docker Images mają warstwową strukturę, gdzie każda warstwa jest systemem plików. Te warstwy są przechowywane w pamięci podręcznej Docker i mogą być ponownie używane przez inne obrazy. Warstwowa struktura sprawia, że obrazy Docker są lekkie i wydajne. Na przykład, pierwszą warstwą jest system operacyjny, drugą — Python, trzecią — twoja aplikacja.
Główne komponenty struktury Docker Images:
- Warstwa bazowa (Base Layer): początkowa warstwa obrazu, która jest często używana jako podstawa do tworzenia innych obrazów. Na przykład, może to być minimalna wersja systemu operacyjnego, takiego jak Ubuntu lub Alpine Linux.
- Warstwy pośrednie (Intermediate Layers): te warstwy tworzone są na podstawie poleceń wykonanych w Dockerfile (na przykład instalacja pakietów, kopiowanie plików itp.). Każda warstwa dodaje zmiany do poprzedniej.
- Warstwa końcowa (Final Layer): ostatnia warstwa tworzona na podstawie instrukcji CMD, ENTRYPOINT lub zmian we wnętrzu kontenera, nazywana jest "warstwą kontenerową". Ta warstwa jest tymczasowa i istnieje tylko podczas działania kontenera.
1.2 Jak działają warstwy Docker Images
Każda warstwa obrazu Docker przedstawia zestaw zmian w stosunku do poprzedniej warstwy. Kiedy Docker tworzy obraz, wykonuje każdą instrukcję z Dockerfile i dodaje nową warstwę dla każdej zmiany.
Przykład tworzenia warstw:
- Podstawowy obraz: zaczynamy od podstawowego obrazu, na przykład
ubuntu:20.04
. To będzie pierwsza warstwa. - Instalacja pakietów: polecenie
RUN apt-get update && apt-get install -y python3
stworzy nową warstwę z zainstalowanym Pythonem. - Kopiowanie plików: polecenie
COPY . /app
doda pliki aplikacji do nowej warstwy. - Ustawienie katalogu roboczego: polecenie
WORKDIR /app
stworzy warstwę, która ustawi katalog roboczy dla kolejnych poleceń.
Zalety użycia warstw:
- Ponowne wykorzystanie: warstwy mogą być ponownie wykorzystywane przez inne obrazy. Na przykład, jeśli dwa obrazy używają tej samej podstawowej warstwy, Docker załaduje ją tylko raz, oszczędzając miejsce i czas.
- Cache: Docker przechowuje w pamięci podręcznej warstwy, co przyspiesza proces budowania obrazów. Jeśli warstwa się nie zmieniła, Docker użyje jej z pamięci podręcznej zamiast tworzyć od nowa.
- Modularność: struktura warstw pozwala na modułowe projektowanie obrazów. Możesz aktualizować lub zmieniać poszczególne warstwy bez wpływu na cały obraz.
Identyfikacja i tagi Docker Images:
Każdy Docker Image jest identyfikowany za pomocą unikalnego hasha (SHA256), który jest generowany na podstawie zawartości obrazu i wszystkich jego warstw. Dla wygody zarządzania i wersjonowania Docker Images mogą również mieć tagi.
Przykład identyfikacji obrazu:
Następujące polecenie pokaże listę wszystkich obrazów w twoim systemie, w tym ich repozytorium, tagi, identyfikatory i rozmiary:
docker images
1.3 Praca z Docker Images
Docker oferuje wiele poleceń do pracy z obrazami. Oto główne z nich:
- Tworzenie obrazu:
docker build
- Uruchomienie kontenera z obrazu:
docker run
- Lista obrazów:
docker images
- Usuwanie obrazu:
docker rmi
- Wyszukiwanie obrazów w Docker Hub:
docker search
- Pobieranie obrazu z Docker Hub:
docker pull
- Wysyłanie obrazu do Docker Hub:
docker push
Przykład tworzenia i używania Docker Image:
1. Tworzenie Dockerfile:
# Używamy bazowego obrazu Ubuntu
FROM ubuntu:20.04
# Instalujemy Python
RUN apt-get update && apt-get install -y python3
# Kopiujemy pliki aplikacji do kontenera
COPY . /app
# Ustawiamy katalog roboczy
WORKDIR /app
# Określamy polecenie do uruchomienia aplikacji
CMD ["python3", "app.py"]
2. Budowanie obrazu:
Następujące polecenie stworzy obraz o nazwie my_python_app
, używając Dockerfile z bieżącego katalogu:
docker build -t my_python_app .
3. Uruchamianie kontenera z obrazu:
Użyj następującego polecenia, aby uruchomić kontener z utworzonego obrazu my_python_app
w trybie background:
docker run -d my_python_app
GO TO FULL VERSION