Як працює зберігання даних у Docker: Volumes і Bind Mounts | INTROSERV
EUR
european

EUR

usa

USD

Ukraine Ua
Ex. VAT Ex. VAT 0%

Як працює зберігання даних у Docker: Volumes і Bind Mounts

Вступ

У цьому посібнику ви дізнаєтесь, як працює зберігання даних у Docker і як зберігати дані за допомогою Docker Volumes і Bind Mounts. Ви також зрозумієте ключові відмінності між цими підходами та коли використовувати кожен із них у production. Це допоможе уникнути втрати даних і побудувати надійні контейнеризовані системи.

Передумови

  • Цільова аудиторія: початківці системні адміністратори
  • Орієнтовний час: ~30 хвилин
  • Операційна система: будь-яка ОС з підтримкою Docker, наприклад Ubuntu 22.04+, Debian 12+, CentOS Stream або macOS з Docker Desktop
  • ПЗ: Docker 24.0.0 або новіше
  • Права: користувач з доступом до Docker або sudo-привілеями
  • Апаратні вимоги: мінімум 2 ГБ ОЗП і 10 ГБ вільного місця на диску
  • Мережа: доступ до Інтернету для завантаження образів контейнерів
  • Базові знання: основи роботи з командним рядком і розуміння контейнерів

Крок 1: Розуміння роботи зберігання даних у Docker

Контейнери Docker використовують шарову файлову систему. Кожен контейнер має записуваний шар поверх незмінних шарів образу.

Що відбувається при записі даних у контейнер

  1. Docker зберігає шари образу як read-only
  2. Під час запуску контейнера Docker додає записуваний шар
  3. Усі зміни файлів відбуваються тільки в цьому записуваному шарі

Результат

Після видалення контейнера всі дані в записуваному шарі втрачаються. Це означає, що зберігання даних у контейнері за замовчуванням є тимчасовим.

Info

Така поведінка підходить для stateless-додатків, але не для баз даних або сервісів із постійним зберіганням.

Крок 2: Створення та використання Docker Volumes

Docker Volumes — це керовані Docker області зберігання даних.

Створення тому

Виконайте команду:

docker volume create my_volume

У відповідь ви побачите ім'я тому.

Використання тому в контейнері

Виконайте команду:

docker run -d -v my_volume:/app/data --name volume_test busybox

Docker монтує том у контейнер за шляхом /app/data.

Результат

Дані, записані в /app/data, зберігаються навіть після видалення контейнера.

Основні характеристики volumes

  • Керуються Docker
  • Зберігаються у внутрішніх директоріях Docker, наприклад /var/lib/docker/volumes/
  • Зручні для резервного копіювання та міграції
  • Ізольовані від файлової системи хоста

Tip

Використовуйте volumes для баз даних і production-навантажень.

Крок 3: Створення та використання Bind Mounts

Bind mounts пов'язують конкретну директорію на хості з директорією всередині контейнера.

Використання bind mount

Виконайте команду:

docker run -d -v /home/<YOUR_USERNAME>/data:/app/data --name bind_test busybox

Результат

Контейнер напряму працює з директорією на хості. Будь-які зміни на хості одразу видно в контейнері.

Основні характеристики bind mounts

  • Залежать від шляхів файлової системи хоста
  • Дозволяють безпосереднє редагування файлів з хоста
  • Не мають ізоляції, керованої Docker
  • Гнучкіші, але менш переносимі

Info

Bind mounts миттєво синхронізують зміни між хостом і контейнером.

Крок 4: Порівняння Volumes і Bind Mounts

Розуміння відмінностей допомагає зробити правильний вибір.

Docker Volumes

  • Керуються Docker
  • Переносимі між середовищами
  • Безпечніші для production
  • Легші для резервного копіювання
  • Абстраговані від файлової системи хоста

Bind Mounts

  • Керуються хостом
  • Прив'язані до конкретних шляхів
  • Зручні для розробки
  • Надають прямий доступ до файлів
  • Менш безпечні при неправильній конфігурації

Крок 5: Вибір між Volumes і Bind Mounts у production

Використовуйте наступні рекомендації.

Коли використовувати Docker Volumes

  • Запуск баз даних, наприклад MySQL або PostgreSQL
  • Зберігання даних додатків, які мають бути постійними
  • Розгортання production-сервісів
  • Необхідність переносимості між серверами

Коли використовувати Bind Mounts

  • Локальна розробка
  • Пряме редагування коду або конфігурації
  • Налагодження контейнерів
  • Тимчасові або тестові середовища

Info

Важливо: Bind mounts можуть надати контейнеру доступ до чутливих файлів хоста при неправильній конфігурації. Завжди перевіряйте шляхи та права доступу.

Перевірка та тестування

Створіть тестовий контейнер з volume:

docker run -it -v my_volume:/data --name playground busybox

У контейнері створіть файл:

echo test > /data/file.txt

Вийдіть з контейнера та видаліть його:

docker rm -f playground

Запустіть новий контейнер з тим самим volume:

docker run -it -v my_volume:/data --name playground busybox

Перевірте файл:

cat /data/file.txt

Очікуваний результат: файл існує, що підтверджує збереження даних.

Відкат змін

Для очищення ресурсів виконайте команди:

docker rm -f playground volume_test bind_test

docker volume rm my_volume

docker system prune -f

Info

Важливо: Видалення volumes безповоротно видаляє всі дані.

Усунення проблем

  • Проблема: дані зникають після перезапуску контейнера
    Причина: не використовується volume або bind mount
    Рішення: підключіть постійне сховище
  • Проблема: помилка permission denied
    Причина: невідповідність прав доступу
    Рішення: використовуйте chmod або chown
  • Проблема: volume не монтується
    Причина: неправильний шлях або синтаксис
    Рішення: перевірте формат і шляхи

Висновок і подальші кроки

Ви дізналися, як працює зберігання даних у Docker і як зберігати дані за допомогою volumes і bind mounts. Тепер ви розумієте, коли використовувати кожен підхід у production. Далі вивчіть Docker Compose для керування multi-container додатками та декларативного опису сховища.

VAT

  • Other

    Ex. VAT

    0%
  • austria

    Austria

    20%
  • Belgium

    Belgium

    21%
  • Bulgaria

    Bulgaria

    20%
  • Croatia

    Croatia

    25%
  • Cyprus

    Cyprus

    19%
  • Czech Republic

    Czech Republic

    21%
  • Denmark

    Denmark

    25%
  • Estonia

    Estonia

    22%
  • France

    France

    20%
  • Finland

    Finland

    24%
  • Germany

    Germany

    19%
  • Greece

    Greece

    24%
  • Hungary

    Hungary

    27%
  • Ireland

    Ireland

    23%
  • Italy

    Italy

    22%
  • Latvia

    Latvia

    21%
  • Lithuania

    Lithuania

    21%
  • Luxembourg

    Luxembourg

    17%
  • Malta

    Malta

    18%
  • Netherlands

    Netherlands

    21%
  • Poland

    Poland

    23%
  • Portugal

    Portugal

    23%
  • Romania

    Romania

    19%
  • Slovakia

    Slovakia

    20%
  • Slovenia

    Slovenia

    22%
  • Spain

    Spain

    21%
  • Sweden

    Sweden

    25%
  • USA

    USA

    0%
european
states
  • germany
  • Español
  • Italiano
  • Poland
  • Русский
  • Slovenski
  • Türkçe
  • ukraine
  • kingdom
  • French
  • Hrvatska
  • Other
  • Austria
  • Belgium
  • Bulgaria
  • Croatia
  • Cyprus
  • Czech Republic
  • Denmark
  • Estonia
  • Finland
  • France
  • Germany
  • Greece
  • Hungary
  • Ireland
  • Italy
  • Latvia
  • Lithuania
  • Luxembourg
  • Malta
  • Netherlands
  • Poland
  • Portugal
  • Romania
  • Slovakia
  • Slovenia
  • Spain
  • Sweden
  • USA