Docker с именем volume vs DOC (только для данных)
До недавней версии Docker (v1.10) нам полагали, что мы можем использовать DOC: контейнеры только для данных. Поэтому я бы создал такой DOC (на основе, например, busybox), и использовал --volumes-from
, чтобы связать его с моим контейнером. Вы все еще можете прочитать об этом в документации Docker.
С новой версией docker говорится, что вместо DOC мы должны использовать named volumes
. Ниже приведен пример docker-compose.yml
:
version: '2'
services:
elasticsearch:
image: elasticsearch:2.2.0
command: elasticsearch -Des.network.host=0.0.0.0
ports:
- "9201:9200"
volumes:
- "es-data:/usr/share/elasticsearch/data"
volumes:
es-data:
Здесь мы создали и использовали именованный том es-data
.
До сих пор не так много документации по этой новой функции. Я спрашиваю:
- Можно ли заменить DOC именованными контейнерами? Как долго сохраняется объем? Что делать, если я удаляю контейнер, который его использует?
- Как мы можем, например, резервное копирование сейчас? Раньше я мог
docker run --rm --volumes-from es-data ...
, а затем tar
.
Ответы
Ответ 1
Можно ли заменить DOC на именованные контейнеры?
Во многих случаях да, именованные контейнеры будут лучшим вариантом.
Как долго сохраняется объем? Что делать, если я удаляю контейнер, который его использует?
Если вы удалите контейнер, то он все равно останется. Единственный способ удалить том - использовать docker-compose down -v
или docker volume rm <volume name>
.
Как мы можем, например, резервное копирование сейчас? Раньше я мог запускать docker -rm -volumes-из es-data... и затем tar.
Вместо --volumes-from
вы можете использовать --volume=<volume name>
.
Обратите внимание, что тома, созданные docker-compose
, всегда имеют префикс имени проекта, поэтому, если вы используете его с помощью команды docker
, полное имя на самом деле <project_name>_es-data
.