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.