Docker
Объемы данных и контейнеры данных
Поиск…
Контейнеры с данными
Контейнеры только для данных устарели и теперь считаются анти-шаблонами!
В дни yore, перед подкомандой volume
Docker, и до того, как было возможно создать именованные тома, Docker удалил тома, когда больше не было ссылок на них в каких-либо контейнерах. Контейнеры, предназначенные только для данных, устарели, поскольку Docker теперь предоставляет возможность создавать именованные тома, а также гораздо больше полезности через подкоманду docker volume
. По этой причине контейнеры только для данных теперь считаются анти-шаблонами.
Многие ресурсы в Интернете за последние пару лет упоминают использование шаблона, называемого «контейнером только для данных», который представляет собой просто контейнер Docker, который существует только для хранения ссылки на объем данных.
Помните, что в этом контексте «том данных» является томом Докера, который не монтируется с хоста. Чтобы уточнить, «том данных» - это тома, который создается либо с помощью директивы VOLUME
Dockerfile, либо с помощью ключа -v
в командной строке в команде docker run
, в частности, с форматом -v /path/on/container
. Поэтому «контейнер только для данных» представляет собой контейнер, единственная цель которого заключается в том, что он подключен к тому данных, который используется --volumes-from
в команде docker run
. Например:
docker run -d --name "mysql-data" -v "/var/lib/mysql" alpine /bin/true
Когда эта команда запускается, создается «контейнер только для данных». Это просто пустой контейнер с прикрепленным объемом данных. Тогда можно было использовать этот том в другом контейнере следующим образом:
docker run -d --name="mysql" --volumes-from="mysql-data" mysql
Теперь контейнер mysql
имеет тот же объем, что и в mysql-data
.
Поскольку Docker теперь предоставляет подкоманду volume
и именованные тома, этот шаблон теперь устарел и не рекомендуется.
Чтобы начать работу с подкомандой volume
и названными томами, см. Создание именованного тома
Создание объема данных
docker run -d --name "mysql-1" -v "/var/lib/mysql" mysql
Эта команда создает новый контейнер из образа mysql
. Он также создает новый том данных, который затем монтируется в контейнере в /var/lib/mysql
. Этот том помогает любым данным, которые внутри него сохраняются за пределами срока службы контейнера. То есть, когда контейнер удаляется, его изменения в файловой системе также удаляются. Если база данных хранит данные в контейнере, а контейнер удален, все эти данные также удаляются. Объемы будут сохраняться в определенном месте даже за пределами, когда его контейнер будет удален.
Можно использовать один и тот же том в нескольких контейнерах с параметром --volumes-from
командной строки:
docker run -d --name="mysql-2" --volumes-from="mysql-1" mysql
В контейнере mysql-2
теперь есть объем данных из подключенного к нему mysql-1
, также используя путь /var/lib/mysql
.