8.1 Знайомство з віртуальними дисками
Монтування томів (Volumes) — це одна з найкорисніших можливостей Docker. З її допомогою контейнери можуть легко працювати з даними хост-машини. Ця функція робить керування даними гнучким і зручним: ти можеш зберігати інформацію надовго, ділитися нею між контейнерами і без проблем робити резервне копіювання чи відновлювати дані, якщо щось піде не так.
Томи (Volumes) у Docker — це спосіб зберігати дані так, щоб вони не залежали від контейнерів. Навіть якщо контейнер буде видалений, інформація, що зберігається в томах, залишиться в безпеці. Томи можна підключати (монтувати) до контейнерів, що дозволяє зберігати дані окремо і використовувати їх повторно, незалежно від того, скільки разів ти створюєш або видаляєш контейнери.
Основні типи томів
- Анонімні томи (Anonymous Volumes)
- Автоматично створюються Docker, якщо для контейнера явно не вказано том.
- Використовуються для тимчасового збереження даних.
- Іменовані томи (Named Volumes)
- Створюються і керуються Docker.
- Можуть бути підключені до кількох контейнерів і зберігаються навіть після їх видалення чи зупинки.
- Томи з прив'язкою (Bind Mounts)
- Пов'язують директорію на хостовій машині з директорією в контейнері.
- Ідеальні для доступу до даних хостової системи і зручні при розробці.
Основний синтаксис команди docker run для монтування томів
-v <host_path>:<container_path>
Повний синтаксис:
docker run -v <host_path>:<container_path> [OPTIONS] IMAGE [COMMAND] [ARG...]
Основні параметри для монтування томів
1. Параметр -v або --volume
Використовується для створення іменованого тому або тому з прив'язкою.
Приклад:
docker run -d -v /host/data:/container/data nginx
2. Параметр --mount
Надає більш гнучкий і деталізований спосіб монтування томів, підтримуючи додаткові параметри.
Приклад:
docker run -d --mount type=bind,source=/host/data,target=/container/data nginx
8.2 Створення та використання томів
1. Іменовані томи
Іменовані томи створюються та керуються Docker. Вони призначені для довготривалого зберігання даних, які мають зберігатися між перезапусками або видаленнями контейнерів.
Створення іменованого тому:
docker volume create my_volume
Запуск контейнера з монтуванням тому:
У цьому прикладі том my_volume монтується в директорію /data всередині контейнера my_container. Усі дані, записані в /data, будуть збережені в томі і залишатимуться доступними навіть після видалення контейнера.
docker run -d -v my_volume:/data --name my_container nginx
2. Анонімні томи
Анонімні томи створюються Docker автоматично та прив'язуються до конкретного контейнера. Вони зручні для тимчасових даних, які не потрібно зберігати після видалення контейнера.
Запуск контейнера з анонімним томом:
У цьому прикладі Docker автоматично створить анонімний том і змонтує його в директорію /data всередині контейнера.
docker run -d -v /data --name my_container nginx
3. Прив'язані директорії
Прив'язані директорії дозволяють монтувати директорії хостової системи в контейнери. Це зручно для спільного використання даних між контейнерами та хост-системою. Також цей підхід часто використовується у процесі розробки, коли вихідний код зберігається на хостовій системі.
Запуск контейнера з прив'язаною директорією:
У цьому прикладі директорія /host/data на хостовій машині монтується в директорію /container/data всередині контейнера my_container.
docker run -d -v /host/data:/container/data --name my_container nginx
8.3 Приклади використання томів
1. Збереження даних бази даних
Використання томів для баз даних допомагає зберігати дані навіть при перезапусках і оновленнях контейнера. Це особливо важливо для надійної роботи в продуктивних середовищах.
Приклад:
У цьому прикладі дані PostgreSQL зберігаються в томі db_data, що гарантує їх збереженість при перезапуску або видаленні контейнера.
docker volume create db_data
docker run -d -v db_data:/var/lib/postgresql/data --name postgres_container postgres
2. Спільне використання даних контейнерами
Іноді потрібно шарити дані між кількома контейнерами. Томи дозволяють легко це зробити.
Приклад
Створимо том і запустимо два контейнери, які будуть використовувати цей том. Обидва контейнери отримають доступ до даних у томі shared_data, що дозволяє їм обмінюватися даними.
docker volume create shared_data
docker run -d -v shared_data:/data --name container1 nginx
docker run -d -v shared_data:/data --name container2 nginx
3. Розробка та тестування
Під час розробки додатків зручно використовувати прив’язані директорії для спільного використання вихідного коду між контейнером і хостовою машиною. Це дозволяє розробникам редагувати код на хості, а контейнеру — одразу працювати з оновленнями.
Приклад
У цьому прикладі директорія /path/to/source на хостовій машині монтується в директорію /app всередині контейнера dev_container. Таким чином, контейнер може використовувати актуальний вихідний код прямо з хостової системи.
docker run -d -v /path/to/source:/app --name dev_container node
8.4 Керування томами
Docker надає зручні команди для керування томами, завдяки яким можна легко створювати, видаляти та переглядати інформацію про томи.
1. Перегляд усіх томів
Ця команда виводить список усіх доступних томів на хостовій машині.
docker volume ls
2. Перегляд інформації про том
За допомогою цієї команди можна отримати детальну інформацію про том my_volume: його місцезнаходження на хостовій файловій системі, а також інформацію про контейнери, які використовують цей том.
docker volume inspect my_volume
3. Видалення тому
Ця команда видаляє том my_volume. Перед видаленням важливо переконатися, що том не використовується жодним контейнером, інакше команда не виконається.
docker volume rm my_volume
8.5 Резервне копіювання томів
Для безпеки даних важливо мати можливість створювати резервні копії томів і відновлювати їх у разі необхідності.
1. Резервне копіювання тому
У цьому прикладі вміст тому my_volume архівується в файл my_volume_backup.tar.gz, який зберігається в директорії /backup на хостовій машині.
docker run --rm -v my_volume:/volume -v /backup:/backup busybox tar czf /backup/my_volume_backup.tar.gz /volume
2. Відновлення тому
Цей приклад відновлює вміст тому my_volume із резервної копії, яка зберігається у файлі my_volume_backup.tar.gz.
docker run --rm -v my_volume:/volume -v /backup:/backup busybox tar xzf /backup/my_volume_backup.tar.gz -C /volume
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ