docker build читает Dockerfile и создаёт из него образ. Это превращает твой код в переносимый артефакт который одинаково запускается на любом сервере с Docker.

- Базовый синтаксис
- Что такое контекст сборки
- Теги и версионирование образов
- Build arguments (ARG)
- Кэш слоёв — как работает
- Полный цикл: build → run → push
- Часто задаваемые вопросы
- Что значит точка в конце docker build?
- Как ускорить docker build?
- docker build vs docker compose build?
- Что читать дальше по Docker
Базовый синтаксис
docker build [ФЛАГИ] ПУТЬ_К_КОНТЕКСТУ
# Собрать из текущей папки (точка = контекст)
docker build .
# С тегом (именем и версией)
docker build -t myapp:1.0 .
docker build -t myapp:latest .
# Несколько тегов за один build
docker build -t myapp:1.0.0 -t myapp:latest .
# Из другой папки
docker build -t myapp /path/to/project
# Другой Dockerfile (не Dockerfile по умолчанию)
docker build -t myapp -f Dockerfile.prod .
docker build -t myapp -f docker/Dockerfile.dev .
Что такое контекст сборки
# Структура проекта
myproject/
├── app.py
├── requirements.txt
├── Dockerfile
└── .dockerignore ← важно!
# Когда запускаешь:
docker build .
# Точка — контекст сборки.
# Docker отправляет ВСЁ содержимое папки в Docker daemon.
# .dockerignore исключает ненужные файлы (node_modules, .git, логи).
Чем меньше контекст — тем быстрее сборка. Файл .dockerignore — обязателен для проектов с node_modules или большим количеством файлов.
Теги и версионирование образов
# Тег = имя:версия
docker build -t myapp:1.0.0 .
docker build -t myapp:1.0 .
docker build -t myapp:latest .
# С registry (Docker Hub)
docker build -t username/myapp:1.0 .
docker build -t username/myapp:latest .
# С приватным registry
docker build -t registry.company.com/myapp:1.0 .
# Проверить созданные образы
docker images | grep myapp
# myapp 1.0.0 abc123 2 minutes ago 145MB
# myapp latest abc123 2 minutes ago 145MB
Build arguments (ARG)
# В Dockerfile объявить ARG
ARG NODE_VERSION=20
FROM node:${NODE_VERSION}-alpine
ARG APP_ENV=production
ENV NODE_ENV=${APP_ENV}
# Передать значение при сборке
docker build --build-arg NODE_VERSION=18 -t myapp .
docker build --build-arg APP_ENV=development -t myapp-dev .
# Несколько аргументов
docker build \
--build-arg NODE_VERSION=20 \
--build-arg APP_ENV=production \
-t myapp:1.0 .
Кэш слоёв — как работает
# Docker кэширует каждый слой
docker build -t myapp .
# Step 1/6 : FROM python:3.12-slim
# Step 2/6 : WORKDIR /app
# Step 3/6 : COPY requirements.txt .
# Step 4/6 : RUN pip install...
# Step 5/6 : COPY . . ← изменили код
# Step 6/6 : CMD ["python", "app.py"]
# Пересборка: шаги 1-4 из кэша (быстро), 5-6 заново
docker build -t myapp .
# Step 1/6 ... Using cache
# Step 2/6 ... Using cache
# Step 3/6 ... Using cache
# Step 4/6 ... Using cache ← pip install не запускается!
# Step 5/6 ... (заново — код изменился)
# Отключить кэш (чистая сборка)
docker build --no-cache -t myapp .
Полный цикл: build → run → push
# 1. Написать Dockerfile
# 2. Собрать образ
docker build -t my-flask-app:1.0 .
# 3. Проверить что образ создался
docker images | grep my-flask-app
# my-flask-app 1.0 abc123 30 seconds ago 145MB
# 4. Запустить и проверить
docker run -d -p 5000:5000 --name test-app my-flask-app:1.0
curl http://localhost:5000
docker logs test-app
# 5. Тегировать для Docker Hub
docker tag my-flask-app:1.0 username/my-flask-app:1.0
# 6. Войти и загрузить
docker login
docker push username/my-flask-app:1.0
# 7. Удалить тестовый контейнер
docker rm -f test-app
Часто задаваемые вопросы
Что значит точка в конце docker build?
Точка указывает на контекст сборки — папку, содержимое которой отправляется в Docker daemon. Это не значит «искать Dockerfile в текущей папке» — хотя по умолчанию Docker ищет файл с именем Dockerfile именно в контексте. Можно указать другой путь: docker build /path/to/context. Или другой Dockerfile: docker build -f path/Dockerfile .
Как ускорить docker build?
Три правила: 1) Правильный порядок инструкций — сначала COPY зависимостей и их установка, потом COPY кода. Тогда при изменении кода зависимости не пересобираются. 2) .dockerignore — исключить node_modules, .git, логи из контекста. 3) slim/alpine образы — меньше загружать и собирать. BuildKit (включён по умолчанию в Docker 23+) также ускоряет сборку через параллельные шаги.
docker build vs docker compose build?
docker build собирает один конкретный образ из Dockerfile. docker compose build собирает все сервисы из docker-compose.yml у которых указан build: вместо image:. docker compose up --build — пересобрать и запустить. Используй docker compose build когда работаешь с многосервисным приложением через Compose.
Что читать дальше по Docker
Чтобы связать тему с соседними практическими материалами, дальше удобно открыть:
- Dockerfile — подготовить Dockerfile для сборки.
- docker run — запустить готовый образ.
- Docker Compose — использовать образ в Docker Compose.



