Как скопировать директорию с хоста в контейнер Docker

DockerBeginner
Практиковаться сейчас

Введение

Контейнеры Docker стали незаменимым инструментом для разработчиков и ИТ-специалистов, обеспечивая согласованный и надёжный способ упаковки и развертывания приложений. В этом руководстве мы рассмотрим процесс копирования каталогов с хост-машины в контейнер Docker, позволяющий эффективно управлять файлами и данными в вашей контейнеризованной среде.

Введение в контейнеры Docker

Docker — популярная открытая платформа, позволяющая разработчикам создавать, развертывать и запускать приложения в контейнеризованной среде. Контейнеры — это лёгкие, автономные и самодостаточные единицы, упаковывающие приложение и его зависимости, обеспечивая согласованное и надёжное выполнение в различных средах.

Что такое контейнер Docker?

Контейнер Docker — это стандартизированная единица программного обеспечения, упаковывающая код приложения, зависимости и конфигурацию в единый, портативный и воспроизводимый пакет. Контейнеры создаются из образов Docker, которые служат шаблоном для контейнера. Контейнеры изолированы от хост-системы и других контейнеров, обеспечивая согласованную и надёжную среду выполнения.

Преимущества использования контейнеров Docker

  • Переносимость: Контейнеры Docker могут работать согласованно на различных операционных системах и облачных платформах, гарантируя, что ваше приложение будет работать одинаково независимо от базовой инфраструктуры.
  • Масштабируемость: Контейнеры можно легко масштабировать вверх или вниз, чтобы удовлетворить меняющиеся потребности вашего приложения, что упрощает управление и оптимизацию использования ресурсов.
  • Эффективность: Контейнеры лёгкие и используют операционную систему хост-системы, что снижает накладные расходы и потребление ресурсов по сравнению с традиционными виртуальными машинами.
  • Согласованность: Контейнеры Docker обеспечивают согласованную и предсказуемую среду выполнения, снижая риск проблем «работает у меня на машине» и упрощая управление и поддержку ваших приложений.

Архитектура Docker

Docker использует архитектуру клиент-сервер, где клиент Docker взаимодействует с демоном Docker (сервером) для выполнения команд Docker. Демон Docker отвечает за управление образами Docker, контейнерами, сетями и томами.

graph LD
    subgraph Архитектура Docker
        Клиент -- API Docker --> Демон
        Демон -- Двигатель Docker --> Образы
        Демон -- Двигатель Docker --> Контейнеры
        Демон -- Двигатель Docker --> Сетевые подключения
        Демон -- Двигатель Docker --> Тома
    end

Понимание основных концепций контейнеров Docker и их архитектуры позволит вам эффективнее работать с Docker и использовать его преимущества в процессах разработки и развертывания приложений.

Копирование файлов с хоста в контейнер

Копирование файлов с хост-системы (вашего локального компьютера) в контейнер Docker — распространённая задача при работе с Docker. Это часто необходимо, когда нужно предоставить вашему приложению дополнительные файлы, конфигурации или данные, которые не включены в образ контейнера.

Команда docker cp

Команда docker cp используется для копирования файлов или каталогов между хост-системой и запущенным контейнером Docker. Синтаксис команды следующий:

docker cp [OPTIONS] SRC_PATH CONTAINER:DEST_PATH

Где:

  • SRC_PATH — путь к файлу или каталогу на хост-системе.
  • CONTAINER — имя или идентификатор контейнера Docker.
  • DEST_PATH — путь внутри контейнера Docker, куда будет скопирован файл или каталог.

Вот пример использования команды docker cp для копирования каталога с хост-системы в контейнер Docker:

## Копирование каталога "my-files" с хоста в каталог "/app" в контейнере
docker cp ./my-files mycontainer:/app

Копирование файлов во время создания контейнера

В качестве альтернативы, вы также можете копировать файлы с хост-системы в контейнер Docker во время процесса создания контейнера. Это делается с помощью инструкции COPY в Dockerfile, которая указывает файлы или каталоги, которые нужно скопировать из контекста сборки (каталога, где находится Dockerfile) в файловую систему контейнера.

Вот пример Dockerfile, который копирует каталог с хост-системы в контейнер:

## Dockerfile
FROM ubuntu:22.04
COPY ./my-files /app
CMD ["bash"]

В этом примере инструкция COPY копирует каталог my-files из контекста сборки в каталог /app внутри контейнера.

Понимание того, как копировать файлы с хоста в контейнер Docker, позволит вам эффективнее управлять и распространять необходимые ресурсы для ваших контейнеризованных приложений.

Практические примеры использования

Копирование файлов с хоста в контейнер Docker может быть полезно в различных сценариях. Вот несколько практических примеров использования:

Предоставление конфигурационных файлов

Одно из распространённых применений — предоставление конфигурационных файлов вашему контейнеризованному приложению. Например, у вас может быть конфигурационный файл, содержащий данные подключения к базе данных, переменные окружения или другие настройки, которые необходимо настроить для вашего приложения.

## Копирование конфигурационного файла с хоста в контейнер
docker cp ./my-app-config.yaml mycontainer:/app/config/

Вставка данных или ресурсов

Другое применение — вставка данных или ресурсов в контейнер. Это может включать:

  • Данные для инициализации базы данных
  • Медиафайлы (изображения, видео и т. д.)
  • Статическое веб-содержимое
## Копирование каталога со статическим веб-содержимым с хоста в контейнер
docker cp ./web-content mycontainer:/var/www/html/

Отладка и устранение неполадок

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

## Копирование файла журнала из контейнера на хост для анализа
docker cp mycontainer:/app/logs/app.log ./

Непрерывная интеграция и развертывание

В процессе непрерывной интеграции (CI) или непрерывного развертывания (CD) вам может потребоваться скопировать артефакты сборки, отчёты о тестировании или другие файлы с хост-системы в контейнер для дальнейшей обработки или развертывания.

## Копирование артефактов сборки с хоста в контейнер во время процесса CI/CD
docker cp ./build-artifacts mycontainer:/app/dist/

Понимание этих практических примеров использования позволит вам эффективнее использовать команду docker cp и инструкцию COPY в ваших рабочих процессах и приложениях, основанных на Docker.

Резюме

К концу этого руководства вы получите чёткое представление о том, как копировать каталоги с вашего хост-компьютера в контейнер Docker. Вы узнаете практические примеры использования, которые помогут оптимизировать ваш рабочий процесс с Docker и улучшить процесс разработки контейнеризованных приложений.