Czym jest obraz w kontekście konteneryzacji i jakie poziomy (warstwy) istnieją w obrazie?
sobes.tech AI
Odpowiedź od AI
Obraz (obraz) w konteneryzacji to niezmienny, lekki, autonomiczny, wykonywalny pakiet oprogramowania, który zawiera wszystko, co jest niezbędne do uruchomienia aplikacji: kod, środowisko uruchomieniowe, narzędzia systemowe, biblioteki i ustawienia. W istocie jest to "migawka" systemu plików i konfiguracji, z której tworzone są kontenery.
Poziomy (warstwy) obrazu to oddzielne, tylko do odczytu systemy plików, które składają się na obraz. Każda warstwa reprezentuje zbiór zmian w porównaniu do poprzedniej warstwy. Są one budowane jedna na drugiej, tworząc pełny system plików obrazu. Zalety warstw:
- Wydajność: Warstwy są buforowane i wielokrotnie wykorzystywane między obrazami, co zmniejsza przestrzeń dyskową i przyspiesza budowę.
- Modularność: Zmiany w aplikacji lub podstawowym systemie operacyjnym wpływają tylko na górną warstwę, nie naruszając warstw niższych.
- Współdzielenie: Wiele obrazów może korzystać z wspólnych warstw bazowych, np. warstwy systemu operacyjnego.
Typowa struktura warstw:
- Warstwa bazowa: Często zawiera minimalny obraz systemu operacyjnego (np. Alpine, Ubuntu Base).
- Warstwy zależności: Dodają pakiety, takie jak biblioteki, interpretery (np. Python, Node.js).
- Warstwa aplikacji: Dodaje kod aplikacji.
- Warstwa konfiguracji/metadanych: Opisuje, jak aplikacja powinna być uruchomiona (ENTRYPOINT, CMD).
Każda instrukcja w Dockerfile zazwyczaj tworzy nową warstwę obrazu. Na przykład, polecenie RUN wykonuje polecenia i zapisuje wynik jako nową warstwę.
# Warstwa bazowa
FROM ubuntu:latest
# Warstwy zależności
RUN apt-get update && apt-get install -y curl
# Warstwa aplikacji
COPY . /app
WORKDIR /app
# Warstwa konfiguracji
CMD ["node", "app.js"]