8.1 Тегування в Docker
Тегування в Docker — це процес присвоєння мітки образу, який спрощує управління версіями. Це робить розгортання і оновлення застосунків більш зручним і керованим. У цій лекції ми детально розглянемо, що таке теги, як їх використовувати і які рекомендації допоможуть вам працювати з ними ефективніше.
Тег (tag) в Docker — мітка, яка дозволяє ідентифікувати конкретну версію образу. Теги спрощують відстеження змін і допомагають обирати потрібні версії для різних середовищ, таких як розробка, тестування і продакшн.
Основні концепції тегів:
- Унікальність: тег однозначно ідентифікує конкретну версію образу.
- Версіонування: за допомогою тегів позначають версії образів, наприклад, v1.0, v2.0, latest.
- Гнучкість: теги використовуються для створення образів, що відповідають певним етапам розробки, наприклад,
beta,stable,prod.
8.2 Як використовувати теги
1. Призначення тегів під час зборки образу
Ви можете присвоїти тег образу під час його зборки за допомогою параметру -t команди docker build.
Приклад:
У цьому прикладі образу призначається ім'я myapp і тег 1.0.
docker build -t myapp:1.0 .
2. Призначення додаткових тегів існуючому образу
Ви можете додати теги вже існуючому образу за допомогою команди docker tag.
Приклад:
Цей приклад призначає образу myapp:1.0 додатковий тег latest.
docker tag myapp:1.0 myapp:latest
3. Використання тегів під час запуску контейнерів
Коли ви запускаєте контейнер, ви можете вказати конкретний тег образу, який хочете використовувати.
Приклад:
Цей приклад запускає контейнер на основі образу myapp з тегом 1.0.
docker run -d myapp:1.0
8.3 Практика тегування
Використання семантичного версіонування
Семантичне версіонування (Semantic Versioning) — це стандартна практика присвоєння версій, яка допомагає зрозуміти рівень змін в образі.
Формат семантичного версіонування:
<major>.<minor>.<patch>
Де:
-
major: Основні зміни, несумісні з попередніми версіями. -
minor: Нові функції, сумісні з попередніми версіями. -
patch: Виправлення помилок та інші незначні зміни.
Приклад:
docker build -t myapp:2.1.3 .
Використання додаткових міток
Додаткові мітки допомагають позначити стан образу, наприклад, beta, alpha, stable або prod.
Приклад:
docker build -t myapp:1.0-beta .
docker build -t myapp:1.0-stable .
Оновлення тегів
При оновленні образу рекомендується змінювати теги для зручності відстеження змін. Тег latest часто використовується для позначення останньої версії образу.
Приклад:
docker build -t myapp:2.0 .
docker tag myapp:2.0 myapp:latest
8.4 Приклади використання тегів
Приклади використання тегів у різних середовищах:
Приклад 1: Розробка
Для розробки часто використовуються образи з тегами, що позначають поточну версію або стан розробки, наприклад, dev.
docker build -t myapp:dev .
docker run -d myapp:dev
Приклад 2: Тестування
У тестових середовищах використовують образи з тегами, які позначають конкретні версії або стани, такі як beta.
docker build -t myapp:1.1-beta .
docker run -d myapp:1.1-beta
Приклад 3: Продакшн
У продакшн-середовищах важливо використовувати стабільні та перевірені версії образів, позначені тегами stable, prod, або семантичними версіями, такими як 1.1.0-stable.
docker build -t myapp:1.1.0-stable .
docker run -d myapp:1.1.0-stable
8.5 Кращі практики
1. Завжди використовуй семантичне версіонування
Дотримуйся семантичного версіонування для всіх образів. Це допомагає чітко розрізняти рівні змін і полегшує управління версіями.
2. Використовуй зрозумілі та осмислені теги
Використовуй теги, які чітко відображають стан або мету образу (наприклад, beta, stable, prod).
3. Уникай використання latest у продакшені
Тег latest може бути корисним для розробки і тестування, але у продакшені краще використовувати конкретні версії, щоб уникнути непередбачуваних змін.
4. Документуй використання тегів
Документуй, як і для чого використовуються теги у твоєму проекті. Це допоможе команді краще розуміти процес версіонування і зменшить ймовірність помилок.
Приклади Dockerfile з використанням тегів
Приклад 1: Створення та присвоєння тегів
# Dockerfile для версії 1.0.0
FROM node:14
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["node", "app.js"]
Команди для збірки і тегування
docker build -t myapp:1.0.0 .
docker tag myapp:1.0.0 myapp:stable
Приклад 2: Оновлення образу і тегування
# Dockerfile для версії 1.1.0 з новою функцією
FROM node:14
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
RUN rm -rf /app/tests /app/docs
ENV NODE_ENV=production
EXPOSE 3000
CMD ["node", "app.js"]
Команди для збірки і тегування
docker build -t myapp:1.1.0 .
docker tag myapp:1.1.0 myapp:latest
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ