Как добавить исходный код в Docker-контейнер?

«Как добавить исходный код в Docker-контейнер?» — вопрос из категории DevOps, который задают на 24% собеседований PHP Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Есть два основных подхода, которые я использую в зависимости от этапа разработки.

1. Для разработки: Монтирование тома (Volume Bind Mount) Это позволяет синхронизировать локальные файлы с контейнером без пересборки образа.

docker run -v $(pwd)/src:/app/src my-app:latest

Или в docker-compose.yml:

services:
  app:
    build: .
    volumes:
      - ./src:/app/src  # Локальная папка : путь в контейнере

2. Для продакшена: Копирование в образ (COPY в Dockerfile) Код становится частью образа, что обеспечивает воспроизводимость и безопасность.

FROM node:18-alpine
WORKDIR /app
# Копируем package.json отдельно для кэширования слоев
COPY package*.json .
RUN npm ci --only=production
# Копируем остальной исходный код
COPY src/ ./src/
CMD ["node", "src/index.js"]

Мой типичный workflow:

  • Во время разработки использую volumes для мгновенного обновления кода.
  • Для CI/CD и продакшн-сборки использую COPY в многостадийном Dockerfile, чтобы итоговый образ содержал только скомпилированное приложение и зависимости, без исходников и инструментов сборки.