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

При развёртывании приложения в Docker важно минимизировать время сборки и оптимизировать слои контейнера.

🟠Использовать `.dockerignore`
Не копировать лишние файлы в контейнер (например, node_modules, .git, vendor, .env).
.git
node_modules
vendor
.env
*.log


🟠Оптимизировать `Dockerfile` (Меньше слоёв, кэширование)
Плохо (лишние слои, без кэширования)
FROM php:8.2-cli

WORKDIR /app

COPY . . # Копирует ВСЕ файлы (долго и некэшируемо)
RUN composer install
RUN npm install
RUN npm run build


Хорошо (разделение слоёв, кэширование)
FROM php:8.2-cli

WORKDIR /app

COPY composer.json composer.lock ./
RUN composer install --no-dev --prefer-dist # Используем кэширование слоёв

COPY package.json package-lock.json ./
RUN npm install --only=production && npm cache clean --force

COPY . . # Копируем код ПОСЛЕ установки зависимостей (чтобы кэширование работало)
RUN npm run build


🟠Использовать `multi-stage builds` (если контейнер весит много)
Позволяет уменьшить размер конечного образа, убрав ненужные файлы и инструменты.
# 1-й этап: сборка зависимостей (Node.js)
FROM node:18 as frontend
WORKDIR /app
COPY package.json package-lock.json ./
RUN npm install
COPY . .
RUN npm run build

# 2-й этап: финальный образ
FROM php:8.2-cli
WORKDIR /app
COPY --from=frontend /app/dist /app/public # Берём только готовые файлы
COPY . .
CMD ["php", "artisan", "serve", "--host=0.0.0.0"]


🟠Использовать `docker build --cache-from`
Позволяет использовать кеш из предыдущих сборок.
docker build --cache-from=myapp:latest -t myapp .


🟠Оптимизировать `docker-compose` (если используется)
Перенести volume для vendor и node_modules на хост, чтобы не скачивать их в контейнере.
services:
app:
build: .
volumes:
- .:/app
- /app/vendor # Чтобы composer install не запускался каждый раз
- /app/node_modules # Чтобы npm install не замедлял перезапуск


🟠Использовать `Alpine Linux` (если важен размер образа)
Alpine – лёгкая версия Linux (~5 MB), подходит для PHP, Nginx, Node.js.
FROM php:8.2-fpm-alpine


Ставь 👍 и забирай 📚 Базу знаний
  • 👍 1
More from @easy_php_ru
  1. Oct 13, 2026Post #2474
  2. Oct 12, 2026🤔 Что такое инкремент и декремент? Инкремент (`++`) и декремент (`--`) — это операции в P…
  3. Oct 12, 2026🤔 Как устроен типичный тест на opening point? Тест на Opening Point (OP-тест) используетс…
  4. Oct 11, 2026🤔 Для чего нужен middleware? Middleware — это промежуточный слой между запросом клиента и…
  5. Oct 11, 2026🤔 Что такое декремент? декремент — это операция, используемые для увеличения или уменьшен…
  6. Oct 10, 2026🤔 Что такое агрегатные функции? Агрегатные функции в SQL и других языках обработки данных…
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 →