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. Многоэтапная сборка

Применяйте многоэтапную сборку для создания минималистичных и легковесных образов. Этот подход позволяет включать только те файлы и зависимости, которые действительно необходимы для работы приложения, исключая из финального образа лишние данные, такие как временные файлы или исходный код.

3
Задача
Модуль 2: Fullstack, 13 уровень, 3 лекция
Недоступна
Базовая сборка образа
Базовая сборка образа
3
Задача
Модуль 2: Fullstack, 13 уровень, 3 лекция
Недоступна
Сборка образа с использованием аргумента
Сборка образа с использованием аргумента
3
Задача
Модуль 2: Fullstack, 13 уровень, 3 лекция
Недоступна
Сборка образа без использования кэша
Сборка образа без использования кэша
3
Задача
Модуль 2: Fullstack, 13 уровень, 3 лекция
Недоступна
Многоэтапная сборка
Многоэтапная сборка
Комментарии (4)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Анастасия Уровень 46
19 декабря 2025
Очень приятно ковыряться в зависимостях питона, хотя проходишь курс по фронту и эта часть входит в него... Откуда мне знать какой официальный образ питона?
Slevin Уровень 64
4 октября 2025
Как задрала эта точка в конце... 😣
Stitch Уровень 14
15 августа 2025
В условиях последней задачи где написано, что контейнер должен быть запущен как демон и должны быть проброшены порты?
Александр Уровень 45
23 декабря 2024
В задаче Сборка образа с использованием аргумента нужно исправить файл sh