WindowsMacПрограммное обес..НастройкиБезопасностьПродуктивностьЛинуксАндроид (Androi.. Все

Как делиться папками между хостом и контейнерами Docker

Отредактировано 2 несколько месяцев назад от ExtremeHow Редакционная команда

Docker DesktopПапкиОбмен файламиХостКонтейнерыКонфигурацияДевОпсРазработка программного обеспеченияОблачные вычисленияВиртуализация

Перевод обновлен 2 несколько месяцев назад

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

Понимание томов Docker

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

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

Типы томов Docker

Docker поддерживает различные типы томов для различных случаев использования:

Использование прямых монтирований для обмена папками

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

Руководство по шагам для использования прямого монтирования

  1. Создайте директорию на хосте:

    Создайте директорию на вашей хост-системе, которую вы хотите поделиться с Docker. Например, вы могли бы создать директорию под названием /Users/username/shared.

  2. Измените команду запуска docker:

    Затем обновите команду запуска Docker, чтобы включить прямое монтирование. Используйте флаг -v или --volume после отображения путей. Например, чтобы смонтировать /Users/username/shared в /shared в вашем контейнере, команда будет:

    docker run -v /Users/username/shared:/shared my-image

    В этом примере my-image относится к образу Docker, который вы запускаете. Монтирование позволяет любым изменениям, внесенным в /shared внутри контейнера, быть отраженными в папке /Users/username/shared на хосте.

  3. Доступ к общей папке в контейнере:

    После того, как контейнер запущен с прямым монтированием, любые файлы, измененные внутри /shared в контейнере, напрямую влияют на файлы в директории /Users/username/shared на хосте и наоборот.

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

Вот практический пример обмена файлами между хостом и контейнером Docker с использованием веб-сервера Nginx. Допустим, вы хотите раздавать HTML-файлы, расположенные в директории на вашем хосте:

  1. Настройте общую директорию:
    • Создайте директорию с именем website на своем хосте.
    • Внутри директории website добавьте файл index.html с некоторым содержимым.
  2. Запустите контейнер Nginx с прямым монтированием:

    Используйте следующую команду, чтобы смонтировать директорию website из директории /usr/share/nginx/html в контейнере:

    docker run --name my-nginx -v "$PWD"/website:/usr/share/nginx/html:ro -d nginx

    Опция :ro делает монтирование доступным только для чтения внутри контейнера.

  3. Доступ к серверу Nginx:

    Посетите http://localhost в веб-браузере, чтобы увидеть файл index.html, раздаваемый Nginx из общей директории на вашем хосте.

Использование томов Docker для обмена папками

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

Создание тома Docker

Используйте команду docker volume create, чтобы создать новый том, как показано ниже:

docker volume create my-volume

Эта команда создает том под названием my-volume, который будет управляться Docker.

Присоединение тома к контейнеру

Чтобы прикрепить созданный том к контейнеру, используйте следующую команду:

docker run -v my-volume:/app/data my-image

Этот пример монтирует my-volume в контейнере по адресу /app/data. Любые данные, записанные в /app/data, остаются в my-volume, даже если контейнер будет остановлен или удален.

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

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

  1. Создайте том Docker:
    docker volume create db-data
  2. Запустите контейнер базы данных с томом:
    docker run -d --name my-database -v db-data:/var/lib/mysql mysql:5.7

    В этом случае любые изменения данных в директории /var/lib/mysql сохраняются в томе db-data.

  3. Долговечность данных:

    Даже если вы остановите и удалите контейнер my-database, том db-data сохранит данные, готовые для подключения к другому экземпляру.

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

Настройка прямого монтирования может быть простой, но это может вызвать проблемы. Вот некоторые распространенные проблемы и решения:

Заключение и лучшие практики

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

Вот некоторые лучшие практики, которые следует учитывать:

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

Если вы найдете что-то неправильное в содержании статьи, вы можете


Комментарии