7.1 Базовий образ
Базові образи відіграють важливу роль у створенні Docker-образів, адже вони надають початкову точку для збірки та визначають середовище, в якому працюватиме твій додаток. Правильний вибір і налаштування базових образів можуть суттєво вплинути на продуктивність, розмір і безпеку кінцевого образу. У цій лекції ми розглянемо, як вибрати та налаштувати базові образи для Docker.
Базовий образ (або образ-основа) — це Docker-образ, який використовується як початковий шар для створення нового Docker-образу. Він може включати мінімальну операційну систему, необхідні інструменти та бібліотеки, або навіть бути порожнім (scratch-образ). Вибір базового образу визначає, які ресурси й пакети будуть доступні у твоєму контейнері за замовчуванням.
Вибір базового образу
Під час вибору базового образу потрібно враховувати кілька факторів:
- Розмір образу: Менші образи завантажуються швидше, займають менше місця на диску і можуть прискорити розгортання додатків.
- Підтримка та оновлення: Використання офіційних образів із регулярними оновленнями забезпечує вищий рівень безпеки, виправлення вразливостей і стабільність роботи.
- Сумісність: Базовий образ має включати необхідні бібліотеки та залежності, які потрібні твоєму додатку для коректної роботи.
Популярні базові образи
1. Alpine Linux
Дуже легковажний образ, що займає близько 5 MB. Він ідеально підходить для додатків, яким потрібна мінімальна операційна система. Однак розробникам потрібно враховувати, що в Alpine відсутні багато стандартних бібліотек, тому для деяких додатків може знадобитися додаткове налаштування.
FROM alpine:3.12
2. Debian/Ubuntu
Більш функціональні образи, які включають широкий набір інструментів і бібліотек. Вони підходять для складних додатків, що потребують більш повноцінного середовища або знайомої стандартної бібліотеки Linux.
FROM ubuntu:20.04
3. Official Language Images
Офіційні образи для мов програмування, такі як Node.js, Python, Ruby та інші. Ці образи вже містять необхідне середовище для розробки та виконання додатків відповідною мовою, що спрощує налаштування.
FROM node:14
7.2 Налаштування базового образу
Після вибору базового образу, його потрібно налаштувати відповідно до вимог вашого застосунку. Налаштування включає встановлення необхідних пакетів, копіювання файлів застосунку та налаштування середовища.
Приклад: Налаштування базового образу на основі Alpine Linux
# Використовуємо базовий образ Alpine Linux
FROM alpine:3.12
# Встановлюємо необхідні пакети
RUN apk add --no-cache python3 py3-pip
# Встановлюємо робочу директорію
WORKDIR /app
# Копіюємо файли застосунку
COPY . .
# Встановлюємо залежності
RUN pip3 install -r requirements.txt
# Вказуємо команду для запуску застосунку
CMD ["python3", "app.py"]
У цьому прикладі використовується базовий образ alpine:3.12, встановлюються необхідні пакети, копіюються файли застосунку та встановлюються залежності. Фінальна команда alpine:3.12 вказує, як запускати застосунок.
Приклад: Налаштування базового образу на основі Ubuntu
# Використовуємо базовий образ Ubuntu
FROM ubuntu:20.04
# Оновлюємо і встановлюємо необхідні пакети
RUN apt-get update && apt-get install -y \
python3 \
python3-pip \
&& rm -rf /var/lib/apt/lists/*
# Встановлюємо робочу директорію
WORKDIR /app
# Копіюємо файли застосунку
COPY . .
# Встановлюємо залежності
RUN pip3 install -r requirements.txt
# Вказуємо команду для запуску застосунку
CMD ["python3", "app.py"]
Цей Dockerfile використовує образ ubuntu:20.04 і встановлює Python та pip. Потім копіюються файли застосунку та встановлюються залежності, аналогічно попередньому прикладу.
7.3 Найкращі практики
Як правильно обирати та налаштовувати базові образи:
1. Обирайте мінімальні образи: починайте з найменших образів, які відповідають вимогам вашого додатку. Це зменшить розмір кінцевого образу та підвищить його безпеку.
2. Не встановлюйте зайві пакети: додавайте лише ті залежності, які реально потрібні вашому додатку. Це зменшить розмір образу та знизить кількість потенційних вразливостей.
3. Чистіть кеш пакетних менеджерів: після встановлення пакетів видаляйте тимчасові файли та кеш, щоб зробити образ легшим.
RUN apt-get update && apt-get install -y python3 python3-pip && rm -rf /var/lib/apt/lists/*
4. Використовуйте багатоступеневу збірку: вона дозволяє розділити етапи збірки та виконання, що допомагає створити більш легковісні та безпечні образи.
# Етап збірки
FROM node:14 AS builder
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN npm run build
# Фінальний етап
FROM nginx:alpine
COPY --from=builder /app/build /usr/share/nginx/html
5. Регулярно оновлюйте образи: використовуйте свіжі версії базових образів, щоб включати останні виправлення безпеки та оновлення.
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ