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 "Привіт, Світ!" > ~/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
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ