Sobes.tech
Junior

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:

  1. Warstwa bazowa: Często zawiera minimalny obraz systemu operacyjnego (np. Alpine, Ubuntu Base).
  2. Warstwy zależności: Dodają pakiety, takie jak biblioteki, interpretery (np. Python, Node.js).
  3. Warstwa aplikacji: Dodaje kod aplikacji.
  4. 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"]