4.1 Основи команди docker build
Команда docker build — це основний спосіб створити Docker-образ із Dockerfile. Вона бере інструкції з Dockerfile і крок за кроком виконує їх, формуючи образ із шарів. У цій лекції ми розберемо, як працює команда docker build, які в неї є параметри і як її використовувати на практиці.
Команда docker build збирає образ із Dockerfile і так званого контексту збірки. Контекст збірки — це файли, які Docker використовує для створення образу. Це може бути локальна папка на вашій машині або, наприклад, репозиторій на GitHub.
Синтаксис
docker build [OPTIONS] PATH | URL | -
Де:
-
PATH: шлях до директорії, яка містить Dockerfile і контекст збірки. URL: URL-адреса віддаленого репозиторію.-: читання Dockerfile зі стандартного вводу (stdin).
Приклад базового використання
У цьому прикладі Docker буде використовувати Dockerfile із поточної директорії (.) і створить образ з ім’ям myimage і тегом latest.
docker build -t myimage:latest .
4.2 Кастомізація команди build
Основні параметри команди docker build
Команда docker build підтримує багато опцій, які дозволяють налаштувати процес побудови.
1. Параметри -t, --tag
Параметр -t або --tag використовується для присвоєння імені та тегу створюваному образу.
docker build -t myimage:latest .
2. Параметри -f, --file
Параметр -f або --file дозволяє вказати альтернативний Dockerfile, якщо він відрізняється від стандартного Dockerfile.
docker build -f Dockerfile.dev -t myimage:dev .
3. Параметр --build-arg
Параметр --build-arg використовується для передачі аргументів збірки, визначених за допомогою інструкції ARG у Dockerfile.
docker build --build-arg APP_VERSION=1.0 -t myimage:1.0 .
4. Параметр --no-cache
Параметр --no-cache дозволяє виконати побудову без використання кешу. Це корисно, якщо потрібно переконатися, що всі команди виконуються заново.
docker build --no-cache -t myimage:latest .
5. Параметр --target
Параметр --target використовується для вказання цільового етапу у багатостадійній збірці.
docker build --target builder -t myimage:builder .
6. Параметр --rm
Параметр --rm вказує Docker видалити проміжні контейнери після успішної побудови образу (за замовчуванням увімкнено).
docker build --rm -t myimage:latest .
4.3 Приклади docker build
Приклад 1: Базова збірка
Припустимо, у тебе є простий додаток на Node.js, і ти хочеш створити Docker-образ для його деплою.
Dockerfile:
FROM node:14
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["node", "app.js"]
Команда збірки:
docker build -t mynodeapp:latest .
У цьому прикладі Docker створить образ mynodeapp з тегом latest, використовуючи Dockerfile з поточної директорії.
Приклад 2: Збірка з використанням аргументів
Аргументи збірки дозволяють передавати змінні в Dockerfile під час збірки.
Dockerfile
FROM node:14
ARG APP_VERSION
ENV APP_VERSION=${APP_VERSION}
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["node", "app.js"]
Команда збірки:
docker build --build-arg APP_VERSION=1.0 -t mynodeapp:1.0 .
У цьому прикладі аргумент APP_VERSION передається в Dockerfile, що дозволяє задавати версію додатку під час збірки.
Приклад 3: Багатостадійна збірка
Багатостадійна збірка використовується для створення образів, які включають лише необхідні компоненти. Це дозволяє зменшити розмір фінального образу.
Dockerfile
# Стадія збірки
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
Команда збірки:
docker build -t mywebapp:latest .
У цьому прикладі спочатку створюється проміжний образ builder, у якому відбувається складання додатку. Після збірки додаток переноситься у фінальний образ, який використовує Nginx для обслуговування готового контенту.
4.4 Практичні поради
1. Оптимізація порядку інструкцій
Для ефективного використання кешу Docker важливо правильно упорядкувати інструкції. Наприклад, спочатку копіюйте файли, які рідко змінюються, такі як package.json, щоб мінімізувати пересбірку залежностей. Потім виконуйте копіювання решти файлів.
COPY package*.json ./
RUN npm install
COPY . .
2. Використання .dockerignore
Додайте файл .dockerignore, щоб виключити непотрібні файли та директорії з контексту збірки. Це зменшить розмір контексту і пришвидшить збірку образу.
Приклад .dockerignore:
node_modules
dist
*.log
3. Багатоступенева збірка
Використовуйте багатоступеневу збірку для створення мінімалістичних і легковагових образів. Цей підхід дозволяє включати лише ті файли та залежності, які дійсно необхідні для роботи додатку, виключаючи з фінального образу зайві дані, такі як тимчасові файли або вихідний код.
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ