← Назад к вопросам
Какая команда может перенести в Docker image директорию с файлами?
2.2 Middle🔥 191 комментариев
#DevOps и инфраструктура
Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Команда для переноса директории в Docker image
В Dockerfile используется команда COPY (или ADD).
1. Основная команда COPY
# Синтаксис
COPY <source> <destination>
# Скопировать директорию
COPY ./my_app /app
# Скопировать все файлы текущей директории
COPY . /app
# Скопировать с переименованием
COPY ./src /application
Пример полного Dockerfile:
FROM python:3.11-slim
WORKDIR /app
# Скопировать все файлы проекта
COPY . /app
# Или скопировать директорию
COPY ./backend /app/backend
COPY ./frontend /app/frontend
RUN pip install -r requirements.txt
CMD ["python", "main.py"]
2. COPY vs ADD
# COPY — базовое копирование
COPY requirements.txt /app/
# ADD — умнее: может распаковать архивы
ADD my_archive.tar.gz /app/
ADD https://example.com/file.tar.gz /app/
Лучшая практика: используй COPY в 95% случаев, ADD только для архивов.
3. Копирование с сохранением прав доступа
# По умолчанию COPY сохраняет права
COPY --chown=root:root ./my_app /app
COPY --chown=1000:1000 ./config /etc/app/
# С правами 755
RUN chmod 755 /app/script.sh
4. Копирование условных файлов
# Скопировать только Python файлы
COPY *.py /app/
# Скопировать всё кроме исключённых (нужен .dockerignore)
COPY . /app
.dockerignore файл (как .gitignore):
__pycache__
*.pyc
.env
.git
node_modules
dist
build
*.log
5. Многоэтапная сборка (Multi-stage build)
# Stage 1: Build
FROM python:3.11 as builder
WORKDIR /build
COPY requirements.txt .
RUN pip install -r requirements.txt --target ./deps
# Stage 2: Runtime
FROM python:3.11-slim
WORKDIR /app
COPY --from=builder /build/deps /app/deps
COPY ./app /app/src
ENV PYTHONPATH=/app/deps:$PYTHONPATH
CMD ["python", "src/main.py"]
6. Копирование с поддиректориями
# Скопировать всё содержимое директории
COPY backend/ /app/backend/
# Скопировать с сохранением структуры
COPY ./src/config /app/src/config
COPY ./src/models /app/src/models
7. Практический пример для Python приложения
FROM python:3.11-slim
WORKDIR /app
# Копируем только requirements первым (для кеша)
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
# Копируем исходный код
COPY ./src ./src
COPY ./config ./config
COPY main.py .
# Копируем данные
COPY ./data ./data
# Создаём пользователя для безопасности
RUN useradd -m appuser
USER appuser
EXPOSE 8000
CMD ["python", "main.py"]
8. Проверка, что скопировалось
# Во время сборки используй RUN для проверки
RUN ls -la /app/
# В контейнере после запуска
docker run -it myimage ls -la /app/
9. FastAPI приложение
FROM python:3.11-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY ./app ./app
COPY ./migrations ./migrations
COPY alembic.ini .
EXPOSE 8000
CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0"]
10. Обычные ошибки
❌ Неправильно:
COPY /home/user/my_app /app # Абсолютный путь в контексте
COPY my_app ./ # Не указана папка назначения
✅ Правильно:
COPY my_app /app # Относительно контекста сборки
COPY my_app /app/ # Указана папка назначения
11. Часто используемые паттерны
Скопировать только production зависимости:
FROM python:3.11 as requirements
COPY requirements.txt .
RUN pip install pipdeptree && pipdeptree --warn fail
FROM python:3.11-slim
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . /app
Минимальный образ:
FROM python:3.11-alpine
WORKDIR /app
COPY . .
RUN pip install -r requirements.txt
CMD ["python", "main.py"]
Итог
COPY— копирует файлы/директории из хоста в контейнер- Синтаксис:
COPY <source> <destination> - Контекст: пути относительны к контексту сборки (где находится Dockerfile)
- Лучшая практика: копируй dependencies отдельно для кеширования слоёв
- Исключения: используй
.dockerignoreдля ускорения сборки