Sobes.tech
Junior

Какво е образ (имидж) в контекста на контейнеризацията и кои нива (слоеве) съществуват в образа?

sobes.tech AI

Отговор от AI

Образът (или изображението) в контейнеризацията е неизменяем, лек, автономен, изпълним пакет софтуер, който включва всичко необходимо за стартиране на приложение: код, среда за изпълнение, системни инструменти, библиотеки и настройки. По същество, това е "снимка" на файловата система и конфигурацията, от която се създават контейнерите.

Нивата (слоевете) на образа са отделни, само за четене файлови системи, които съставляват образа. Всяко ниво представлява набор от промени спрямо предходното. Те се изграждат едно върху друго, образувайки пълна файловата система на образа. Предимствата на слоевете:

  • Ефективност: Слоевете се кешират и се използват повторно между образите, което намалява дисковото пространство и ускорява изграждането.
  • Модулност: Промените в приложението или базовата операционна система засягат само горното ниво, без да засягат долните.
  • Споделяне: Няколко образа могат да използват общи базови слоеве, например слой на операционната система.

Типична структура на слоевете:

  1. Базов слой: Често съдържа минимален образ на ОС (например Alpine, Ubuntu Base).
  2. Зависимостни слоеве: Добавят се пакети като библиотеки, интерпретатори (например Python, Node.js).
  3. Слой на приложението: Добавя се кодът на приложението.
  4. Конфигурационен/метаданни слой: Описва как трябва да се стартира приложението (ENTRYPOINT, CMD).

Всяка инструкция в Dockerfile обикновено създава нов слой на образа. Например, командата RUN изпълнява команди и запазва резултата като нов слой.

# Базов слой
FROM ubuntu:latest

# Зависимостни слоеве
RUN apt-get update && apt-get install -y curl

# Слой на приложението
COPY . /app
WORKDIR /app

# Конфигурационен слой
CMD ["node", "app.js"]