5.1 Идея привязанных директорий (bind mounts)
Монтирование директорий хоста в контейнеры с помощью привязанных директорий (bind mounts) — это мощная функция Docker, которая позволяет контейнерам напрямую использовать файлы и директории, находящиеся на хостовой системе. Это особенно полезно для разработки, тестирования и настройки, когда необходимо использовать локальные файлы без их копирования в контейнер. В этой лекции мы рассмотрим, как использовать привязанные директории, приведем примеры и лучшие практики.
Привязанные директории позволяют монтировать конкретные директории или файлы с хостовой системы в контейнеры. Это отличается от томов, которые управляются Docker и хранятся в специальной директории.
Преимущества использования привязанных директорий
- Прямой доступ к файлам хоста: Контейнеры могут напрямую использовать и изменять файлы, находящиеся на хосте.
- Удобство разработки: Разработчики могут изменять файлы на хосте и видеть эти изменения в контейнерах в реальном времени.
- Гибкость: Любая директория на хосте может быть смонтирована в контейнер.
Команда для монтирования привязанных директорий
Привязанные директории монтируются с помощью параметров -v или --mount при запуске контейнера.
5.2 Примеры использования параметра -v
1. Монтирование директории хоста в контейнер
Простейший пример монтирования директории хоста в контейнер:
docker run -d --name my_container -v /path/on/host:/path/in/container nginx
В этом примере директория /path/on/host на хосте монтируется в директорию /path/in/container внутри контейнера nginx.
2. Монтирование файла хоста в контейнер
Вы также можете монтировать отдельные файлы:
docker run -d --name my_container -v /path/on/host/config.conf:/etc/nginx/nginx.conf nginx
В этом примере файл конфигурации config.conf на хосте монтируется как файл конфигурации nginx.conf внутри контейнера.
5.3 Примеры использования параметра --mount
Параметр --mount предоставляет более детализированный способ монтирования привязанных директорий с возможностью указания различных параметров.
1. Монтирование директории с использованием --mount
docker run -d --name my_container --mount type=bind,source=/path/on/host,target=/path/in/container nginx
Этот пример аналогичен предыдущему примеру с -v, но использует более подробный синтаксис.
2. Монтирование в режиме только для чтения
docker run -d --name my_container --mount
type=bind,source=/path/on/host,target=/path/in/container,readonly nginx
В этом примере директория монтируется в режиме только для чтения, что предотвращает изменения файлов в контейнере.
5.4 Практические примеры
Для разработки веб-приложения вы можете монтировать директорию с исходным кодом на хосте в контейнер.
Создание директории с исходным кодом на хосте:
mkdir -p ~/my_web_app
echo "Hello, World!" > ~/my_web_app/index.html
Запуск контейнера с монтированием директории:
docker run -d --name web_dev -v ~/my_web_app:/usr/share/nginx/html nginx
Теперь любые изменения в директории ~/my_web_app на хосте будут сразу отражены в контейнере.
Пример 2: Использование конфигурационных файлов
Вы можете монтировать конфигурационные файлы из директории на хосте в контейнер.
Создание конфигурационного файла на хосте:
echo "user www-data;" > ~/nginx.conf
echo "worker_processes auto;" >> ~/nginx.conf
Запуск контейнера с монтированием конфигурационного файла:
docker run -d --name nginx_custom -v ~/nginx.conf:/etc/nginx/nginx.conf nginx
В этом примере файл конфигурации Nginx на хосте используется внутри контейнера.
5.5 Проверка монтированных директорий и файлов
Вы можете проверить содержимое смонтированных директорий и файлов, используя команду docker exec для выполнения команд внутри контейнера.
Пример
Проверка содержимого директории:
docker exec -it my_container ls /path/in/container
Проверка содержимого файла:
docker exec -it my_container cat /path/in/container/config.conf
Удаление привязанных директорий
Привязанные директории не управляются Docker напрямую, поэтому их удаление происходит на уровне файловой системы хоста.
Пример
Удаление привязанной директории на хосте:
rm -r /path/on/host
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ