TGViewer
PHP | Вопросы собесов PHP | Вопросы собесов @easy_php_ru · 2.31K subscribers
Post #2404 316
🤔 Как сделать так, чтобы приложение разворачивалось быстрее в Dockerе?

Для ускорения развертывания приложений в Docker существует несколько методов и практик, которые помогают оптимизировать сборку и запуск контейнеров. Вот некоторые из них:

🚩Оптимизация Dockerfile

🟠Меньше слоев
Каждая инструкция в Dockerfile создает новый слой в образе. Старайтесь минимизировать количество слоев, объединяя инструкции, где это возможно.
# Плохо
RUN apt-get update
RUN apt-get install -y curl
RUN apt-get install -y vim

# Хорошо
RUN apt-get update && \
apt-get install -y curl vim


🟠Использование правильного базового образа
Выберите наиболее подходящий базовый образ, который минимально необходим для вашего приложения. Использование минималистичных образов, таких как alpine, может существенно уменьшить размер образа.
FROM php:7.4-fpm-alpine


🟠Кэширование зависимостей
Сначала копируйте файлы с зависимостями (например, composer.json, package.json) и устанавливайте их, а затем копируйте остальной код. Это позволит Docker использовать кэш на этапе установки зависимостей, если они не изменились.
FROM php:7.4-fpm-alpine

# Установка зависимостей
COPY composer.json composer.lock /app/
WORKDIR /app
RUN composer install --no-dev --optimize-autoloader

# Копирование кода
COPY . /app


🟠Использование многоступенчатой сборки
Многоступенчатая сборка позволяет собирать и тестировать ваше приложение в одном этапе и копировать только необходимые файлы в финальный образ, что уменьшает размер финального образа.
# Сборочный этап
FROM composer:latest AS builder
WORKDIR /app
COPY composer.json composer.lock /app/
RUN composer install --no-dev --optimize-autoloader

# Финальный этап
FROM php:7.4-fpm-alpine
WORKDIR /app
COPY --from=builder /app /app
COPY . /app


🟠Использование кэша сборки
При разработке используйте кэш Docker для ускорения сборки. Для этого нужно правильно организовать порядок инструкций в Dockerfile, чтобы неизменные части использовали кэш.

🟠Оптимизация Docker Compose
Если вы используете Docker Compose, убедитесь, что сервисы поднимаются параллельно и что вы используете возможность кэширования сборок.
version: '3.8'
services:
app:
build:
context: .
dockerfile: Dockerfile
volumes:
- .:/app
ports:
- "8080:80"
db:
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: app_db
ports:
- "3306:3306"


🟠Использование кэшированных слоев и промежуточных образов
При частых изменениях кода старайтесь кэшировать слои, которые не меняются, и использовать промежуточные образы для ускорения сборки.
# Использование промежуточного образа
FROM php:7.4-fpm-alpine AS base
COPY . /app
WORKDIR /app
RUN composer install --no-dev --optimize-autoloader

FROM base AS dev
RUN apk add --no-cache bash
CMD ["php-fpm"]

FROM base AS prod
CMD ["php-fpm"]


🟠Использование готовых образов для разработки
Используйте готовые образы, где уже установлены все необходимые зависимости для разработки, что сократит время сборки образов.

🟠Параллельная сборка и запуск
Используйте параллельную сборку и запуск контейнеров, если это возможно. Docker Compose поддерживает параллельный запуск, что может значительно ускорить процесс развертывания.

Ставь 👍 и забирай 📚 Базу знаний
  • 👍 1
  • 💊 1
More from @easy_php_ru
  1. Oct 10, 2026🤔 Что такое агрегатные функции? Агрегатные функции в SQL и других языках обработки данных…
  2. Oct 9, 2026🤔 Как настроить autoload через Composer? Composer предоставляет механизм автоматической з…
  3. Oct 9, 2026🤔 Какое отличие у протоколов tcp и udp? Это два основных транспортных протокола в интерне…
  4. Oct 8, 2026🤔 Есть ли какое-то различие между одинарными и двойными кавычками? - В большинстве языков…
  5. Oct 7, 2026🤔 В каких случаях используют индексы? Индексы в базах данных используются для ускорения о…
  6. Oct 7, 2026🤔 В чем преимущество фасада? Фасад (Facade) в PHP — это паттерн проектирования, который у…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →