Вивчаємо Docker, частина 6: робота з даними

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

Частина 1: основи
Частина 2: терміни та концепції
Частина 3: файли Dockerfile
Частина 4: зменшення розмірів образів та прискорення їх складання
Частина 5: команди
Частина 6: робота з даними

Вивчаємо Docker, частина 6: робота з даними

Цей матеріал підготовлений з використанням движка Docker версії 18.09.1 ​​та API версії 1.39.

Дані Docker можуть зберігатися або тимчасово, або постійно. Почнемо з тимчасових даних.

Тимчасове зберігання даних

У контейнерах Docker організувати роботу з тимчасовими даними можна двома способами.

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

Для зберігання тимчасових файлів у Docker можна скористатися ще одним рішенням, придатним для тих випадків, коли потрібно більш високий рівень продуктивності, порівняно з тим, який можна досягти при використанні стандартного механізму тимчасового зберігання даних. Якщо вам не потрібно, щоб ваші дані зберігалися довше, ніж існує контейнер, ви можете підключити до контейнера tmpfs - тимчасове сховище інформації, яке використовує оперативну пам'ять хоста. Це дозволить прискорити виконання операцій із запису та читання даних.

Часто буває так, що дані потрібно зберігати після того, як контейнер припинить існувати. Для цього нам знадобляться механізми постійного зберігання даних.

Постійне зберігання даних

Існують два способи, що дозволяють зробити термін життя даних більшим за термін життя контейнера. Один із способів полягає у використанні технології bind mount. При такому підході до контейнера можна примонтувати, наприклад, існуючу папку. Працювати з даними, що зберігаються в такій папці, зможуть і процеси, що знаходяться за межами Docker. Ось як виглядають монтування tmpfs та технологія bind mount.

Вивчаємо Docker, частина 6: робота з даними
Монтування tmpfs та bind mount

Мінуси використання технології bind mount полягають у тому, що її використання ускладнює резервне копіювання даних, міграцію даних, спільне використання даних кількома контейнерами. Набагато найкраще для постійного зберігання даних використовувати томи Docker.

Тома Docker

Том це файлова система, яка розташована на хост-машині за межами контейнерів. Створенням та управлінням томами займається Docker. Ось основні властивості томів Docker:

  • Вони є засоби для постійного зберігання інформації.
  • Вони самостійні та відокремлені від контейнерів.
  • Ними можуть спільно скористатися різні контейнери.
  • Вони дозволяють організувати ефективне читання та запис даних.
  • Тому можна розміщувати на ресурсах віддаленого хмарного провайдера.
  • Їх можна шифрувати.
  • Їм можна надавати імена.
  • Контейнер може організувати завчасне заповнення тома даними.
  • Вони зручні для тестування.

Як бачите, томи Docker мають чудові властивості. Поговоримо про те, як їх створювати.

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

Тому можна створювати засобами Docker або за допомогою запитів до API.

Ось інструкція в Dockerfile, яка дозволяє створити том під час запуску контейнера.

VOLUME /my_volume

При використанні такої інструкції Docker, після створення контейнера, створить те, що містить дані, які вже є у вказаному місці. Зверніть увагу, що якщо ви створюєте том з використанням Dockerfile, це не звільняє вас від необхідності вказати точку монтування тома.

Створювати томи в Dockerfile можна за допомогою формату JSON.

Крім того, томи можна створювати засобами командного рядка під час роботи контейнера.

Робота з томами з командного рядка

▍Створення тома

Створити самостійний том можна такою командою:

docker volume create —-name my_volume

▍З'ясування інформації про томи

Щоб переглянути список томів Docker, скористайтеся наступною командою:

docker volume ls

Дослідити конкретний том можна так:

docker volume inspect my_volume

▍Видалення тому

Видалити том можна так:

docker volume rm my_volume

Для того, щоб видалити всі томи, які не використовуються контейнерами, можна вдатися до такої команди:

docker volume prune

Перед видаленням томів Docker запитає у вас підтвердження виконання цієї операції.

Якщо той пов'язаний з будь-яким контейнером, такий том не можна видалити доти, доки не видалено відповідний контейнер. При цьому навіть якщо контейнер видалений, Docker не завжди це розуміє. Якщо це сталося, можете скористатися наступною командою:

docker system prune

Вона призначена для чищення ресурсів Docker. Після виконання цієї команди ви маєте можливість видалити томи, статус яких до цього визначався неправильно.

Прапори -mount і -volume

Для роботи з томами вам, під час виклику команди docker, часто доведеться користуватись прапорами. Наприклад, для того, щоб створити том під час створення контейнера можна скористатися такою конструкцією:

docker container run --mount source=my_volume, target=/container/path/for/volume my_image

У давнину (до 2017 року) популярним був прапор --volume. Спочатку цей прапор (ще ним можна користуватись у скороченому вигляді, тоді він виглядає як -v) використовувався для самостійних контейнерів, а прапор --mount - У середовищі Docker Swarm. Однак, починаючи з Docker 17.06, прапор --mount можна використовувати у будь-яких сценаріях.

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

У існуючих прикладах команд, спрямованих на роботу з даними в Docker, ви можете зустріти безліч прикладів використання прапора -v. Намагаючись адаптувати ці команди для себе, враховуйте те, що прапори --mount и --volume використовують різні формати параметрів. Тобто не можна просто замінити -v на --mount та отримати робочу команду.

Головна різниця між --mount и --volume полягає в тому, що при використанні прапора --volume всі параметри збирають разом, в одному полі, а при використанні --mount параметри поділяються.

При роботі з --mount параметри представлені як пари виду ключ-значення, а саме, це виглядає як key=value. Ці пари розділяють комами. Ось часто використовувані параметри --mount:

  • type - Тип монтування. Значенням для відповідного ключа можуть бути пов'язувати, обсяг або tmpfs. Ми тут говоримо про томи, тобто нас цікавить значення volume.
  • source - Джерело монтування. Для іменованих томів це ім'я тома. Для неіменованих томів цей ключ не вказується. Він може бути скорочений до src.
  • destination - шлях, до якого файл або папка монтується у контейнері. Цей ключ може бути скорочений до dst або target.
  • readonly - Монтує тому, що призначений тільки для читання. Використовувати цей ключ необов'язково, значення не призначають.

Ось приклад використання --mount з безліччю параметрів:

docker run --mount type=volume,source=volume_name,destination=/path/in/container,readonly my_image

Підсумки

Ось корисні команди, якими можна користуватися під час роботи з томами Docker:

  • docker volume create
  • docker volume ls
  • docker volume inspect
  • docker volume rm
  • docker volume prune

Ось список часто використовуваних параметрів для --mount, застосовних у команді виду docker run --mount my_options my_image:

  • type=volume
  • source=volume_name
  • destination=/path/in/container
  • readonly

Тепер, коли ми завершили цю серію матеріалів про Docker, настав час сказати декілька слів про те, куди тим, хто вивчає Docker, можна рухатися далі. Ось велика гарна стаття про Docker. Ось книга про Docker (купуючи цю книгу, постарайтеся роздобути найсвіжіше її видання). Ось ще одна книга, яка підійде тим, хто вважає, що практика – це найкращий спосіб вивчення технологій.

Шановні читачі! Які матеріали про Docker ви б порадили вивчити новачкам?

Вивчаємо Docker, частина 6: робота з даними

Джерело: habr.com

Додати коментар або відгук