Volumes — являются механизмом для сохранения данных, создаваемых и используемых Docker контейнерами (с хостевой машины на контейнер).
Создание Volumes в Docker
Чтобы создать Volume, выполните:
Проверим что имеется в докере:
$ docker volume ls
Получим подробную инфу:
$ docker volume inspect http-custom-data
Собственно, что и требовалось доказать — все есть и работает должным образом.
Создание TMPFS Volumes в Docker
Рассмотрим пример создания TMPFS Volume (данные хранятся в RAM) следующим образом:
Рассмотрим пример создания BTRFS Volume (данные хранятся на /dev/sda2 разделе) следующим образом:
Рассмотрим пример создания NFS Volume (в удаленной части NFS) следующим образом:
Монтирование Volumes с хостевой машины в контейнер.
Добавление Volum-ов в контейнер(ы) являются хорошим решением т.к при завершении жизни контейнера все ваши данные будут утеряны. Если ваш контейнер генерирует непостоянные данные, рассмотрите возможность использования монтирования tmpfs, чтобы избежать постоянного хранения данных в любом месте и увеличить производительность контейнера, избегая записи на перезаписываемый слой контейнера.
Рассмотрим пример:
$ docker run -d -p 127.0.0.1:8080:80 -v $(pwd):/var/www/html:ro httpd
Монтирование tmpfs в Docker
Монтирование tmpfs является временным и сохраняется только в памяти хоста. Когда контейнер остановится, монтирование tmpfs будет удалено, и файлы, написанные там, не будут сохранены.
Ограничения монтирования tmpfs:
- Вы не можете шарить данные монтированием tmpfs между контейнерами.
- Эта функция доступна только в том случае, если вы используете Docker в Linux.
Пример запуска:
$ docker run -d -ti -p127.0.0.1:8282:8200 --name=vault_test --mount type=tmpfs,destination=/tmp vault:0.11.4
Case #1. VOLUME в Dockerfile
Создадим Dockerfile:
$ docker run -d -p80:80 nginx_v:1
$ curl localhost
[codesyntax lang="php" blockstate="collapsed"]
1 2 3 4 5 6 7 8 9 10 11 |
[ { "Type": "volume", "Name": "395c2b4639c0a577ff25b379adc201e77a1cedbc5d50e91150149e1f51191182", "Destination": "/usr/share/nginx/html", "Driver": "local", "Mode": "", "RW": true, "Source": "/ var/lib/docker/volumes/395c2b4639c0…f51191182/_data", "Propagation": "" } ] |
[/codesyntax]
Запускаем контейнер вот так:
Case #3. Шара данных между контейнерами
На 1-м контейнере, запустим:
На 2-м контейнере, запустим:
Изменить storage driver для docker в Linux
Проверим что имеется:
Перезапускаем сервис:
# systemctl daemon-reload
# systemctl restart docker.service