JavaRush /Курси /Модуль 2: Fullstack /Збірка образу

Збірка образу

Модуль 2: Fullstack
Рівень 13 , Лекція 3
Відкрита

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.

Terminal

docker build -t myimage:latest .

4.2 Кастомізація команди build

Основні параметри команди docker build

Команда docker build підтримує багато опцій, які дозволяють налаштувати процес побудови.

1. Параметри -t, --tag

Параметр -t або --tag використовується для присвоєння імені та тегу створюваному образу.

Terminal

docker build -t myimage:latest .

2. Параметри -f, --file

Параметр -f або --file дозволяє вказати альтернативний Dockerfile, якщо він відрізняється від стандартного Dockerfile.

Terminal

docker build -f Dockerfile.dev -t myimage:dev .

3. Параметр --build-arg

Параметр --build-arg використовується для передачі аргументів збірки, визначених за допомогою інструкції ARG у Dockerfile.

Terminal

docker build --build-arg APP_VERSION=1.0 -t myimage:1.0 .

4. Параметр --no-cache

Параметр --no-cache дозволяє виконати побудову без використання кешу. Це корисно, якщо потрібно переконатися, що всі команди виконуються заново.

Terminal

docker build --no-cache -t myimage:latest .

5. Параметр --target

Параметр --target використовується для вказання цільового етапу у багатостадійній збірці.

Terminal

docker build --target builder -t myimage:builder .

6. Параметр --rm

Параметр --rm вказує Docker видалити проміжні контейнери після успішної побудови образу (за замовчуванням увімкнено).

Terminal

docker build --rm -t myimage:latest .

4.3 Приклади docker build

Приклад 1: Базова збірка

Припустимо, у тебе є простий додаток на Node.js, і ти хочеш створити Docker-образ для його деплою.

Dockerfile:

dockerfile

FROM node:14

WORKDIR /app
        
COPY package*.json ./
RUN npm install
        
COPY . .
        
EXPOSE 3000
        
CMD ["node", "app.js"]

Команда збірки:

Terminal

docker build -t mynodeapp:latest .

У цьому прикладі Docker створить образ mynodeapp з тегом latest, використовуючи Dockerfile з поточної директорії.

Приклад 2: Збірка з використанням аргументів

Аргументи збірки дозволяють передавати змінні в Dockerfile під час збірки.

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"]

Команда збірки:

Terminal

docker build --build-arg APP_VERSION=1.0 -t mynodeapp:1.0 .

У цьому прикладі аргумент APP_VERSION передається в Dockerfile, що дозволяє задавати версію додатку під час збірки.

Приклад 3: Багатостадійна збірка

Багатостадійна збірка використовується для створення образів, які включають лише необхідні компоненти. Це дозволяє зменшити розмір фінального образу.

Dockerfile

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

Команда збірки:

Terminal


docker build -t mywebapp:latest .

У цьому прикладі спочатку створюється проміжний образ builder, у якому відбувається складання додатку. Після збірки додаток переноситься у фінальний образ, який використовує Nginx для обслуговування готового контенту.

4.4 Практичні поради

1. Оптимізація порядку інструкцій

Для ефективного використання кешу Docker важливо правильно упорядкувати інструкції. Наприклад, спочатку копіюйте файли, які рідко змінюються, такі як package.json, щоб мінімізувати пересбірку залежностей. Потім виконуйте копіювання решти файлів.

dockerfile

COPY package*.json ./
RUN npm install
COPY . .

2. Використання .dockerignore

Додайте файл .dockerignore, щоб виключити непотрібні файли та директорії з контексту збірки. Це зменшить розмір контексту і пришвидшить збірку образу.

Приклад .dockerignore:

Text

node_modules
dist
*.log

3. Багатоступенева збірка

Використовуйте багатоступеневу збірку для створення мінімалістичних і легковагових образів. Цей підхід дозволяє включати лише ті файли та залежності, які дійсно необхідні для роботи додатку, виключаючи з фінального образу зайві дані, такі як тимчасові файли або вихідний код.

Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ