Короткий ответ
Named volume хранится на диске хоста и переживает перезапуск/удаление контейнера, а tmpfs mount существует только в оперативной памяти хоста, никогда не пишется на диск и полностью исчезает при остановке контейнера — подходит для временных чувствительных данных и ускорения операций ввода-вывода.
Как это работает подробнее
tmpfs — это файловая система, полностью размещённая в RAM (и, в зависимости от настроек, swap), поэтому операции чтения/записи в ней заметно быстрее дисковых, но весь объём ограничен доступной памятью и может быть явно лимитирован флагом size. Named volume, напротив, задействует постоянное хранилище хоста через выбранный volume-драйвер и гарантирует сохранность данных между перезапусками.
Пример кода
Пример конфигурации
$ docker run -d --name cache --tmpfs /app/cache:size=256m,mode=1777 myapp
$ docker restart cache
$ docker exec cache ls /app/cacheЧто использовать на практике
- Практика. tmpfs применяют для временных файлов сессий, кэшей, расшифрованных секретов, которые не должны попасть на диск ни при каких обстоятельствах (например, по требованиям безопасности), а также для существенного ускорения I/O-интенсивных временных операций. Named volume остаётся стандартным выбором для всего, что должно сохраняться — данных БД, пользовательских загрузок, персистентных очередей.
Подводные камни
- Риск. используют tmpfs для данных, которые критично не потерять (например, принимая её по ошибке за "просто ещё один volume"), и теряют всё при рестарте контейнера или хоста; не ограничивают размер tmpfs явно (
size=), рискуя исчерпать память хоста при неожиданном росте временных файлов.