Плагины тома Docker

Плагины томов Docker Engine позволяют интегрировать развертывания Engine с внешними системами хранения, такими как Amazon EBS, и позволяют томам данных сохраняться после окончания срока службы одного хоста Docker. См. документация к плагину для получения дополнительной информации.

Список изменений

1.13.0

  • Если используется как часть архитектуры подключаемого модуля v2, точки монтирования, которые являются частью путей, возвращаемых подключаемым модулем, должны быть смонтированы в каталоге, указанном PropagatedMount в конфигурации подключаемого модуля (№26398)

1.12.0

  • Добавляет поле Status в ответ VolumeDriver.Get (#21006)

  • Добавляет VolumeDriver.Capabilities, чтобы получает возможности драйвера тома (#22077)

1.10.0

  • Добавляет VolumeDriver.Get, чтобы получает подробную информацию о томе (№16534)

  • Добавляет VolumeDriver.List, в котором перечислены все тома, принадлежащие драйверу (№16534)

1.8.0

  • Начальная поддержка подключаемых модулей драйверов томов (№14659)

Изменения командной строки

Чтобы предоставить контейнеру доступ к тому, используйте флаги --volume и --volume- driver в команде docker container run. Флаг --volume (или -v) принимает имя тома и путь на хосте, а флаг --volume- driver принимает тип драйвера.

$ docker volume create --driver=flocker volumename

$ docker container run -it --volume volumename:/data busybox sh

--volume

Флаг --volume (или -v) принимает значение в формате <volume_name>:<mountpoint>. Две части значения разделены двоеточием ( : ).

  • Имя тома — это удобочитаемое имя тома, которое не может начинаться с символа /. В остальной части этого раздела он упоминается как volume_name.

  • Mountpoint — это путь на хосте (v1) или в подключаемом модуле (v2), где том стал доступен.

volumedriver

Указание volumedriver в сочетании с volumename позволяет использовать подключаемые модули, такие как Флокер, для управления томами, внешними по отношению к одному хосту, например, на EBS.

Создаёт VolumeDriver

Конечная точка создания контейнера ( /containers/create ) принимает поле VolumeDriver типа string, позволяющее указывает имя драйвера. Если он не указан, по умолчанию используется "local" (драйвер по умолчанию для локальных томов).

Протокол плагина тома

Если плагин регистрирует себя как VolumeDriver при активации, он должен предоставить Docker Daemon пути для записи в файловой системе хоста. Демон Docker предоставляет данные пути к контейнерам для использования. Демон Docker делает тома доступными, подключая предоставленные пути к контейнерам.

Примечание

Плагины тома не должны записывать данные в каталог /var/lib/docker/, включая /var/lib/docker/volumes. Каталог /var/lib/docker/ зарезервирован для Docker.

/VolumeDriver.Create

Запрос :

{
    "Name": "volume_name",
    "Opts": {}
}

Сообщить подключаемому модулю, что пользователь хочет создать том, учитывая указанное пользователем имя тома. Плагину пока не нужно фактически манифестировать том в файловой системе (пока не будет вызван Mount). Opts — это карта конкретных параметров драйвера, переданных из запроса пользователя.

Ответ :

{
    "Err": ""
}

Отвечать строкой error, если произошла ошибка.

/VolumeDriver.Remove

Запрос :

{
    "Name": "volume_name"
}

Удаляет указанный том с диска. Данный запрос выдается, когда пользователь вызывает docker rm -v для удаления томов, связанных с контейнером.

Ответ :

{
    "Err": ""
}

Отвечать строкой error, если произошла ошибка.

/VolumeDriver.Mount

Запрос :

{
    "Name": "volume_name",
    "ID": "b87d7442095999a92b65b3d9691e697b61713829cc0ffd1bb72e4ccd51aa4d6c"
}

Docker требует, чтобы подключаемый модуль предоставлял том с заданным пользователем именем тома. Mount вызывается один раз при запуске контейнера. Если один и тот же volume_name запрашивается более одного раза, подключаемому модулю может потребоваться отслеживать каждый новый запрос на монтирование и предоставление при первом запросе на монтирование и удаление при последнем соответствующем запросе на размонтирование.

ID — это уникальный идентификатор вызывающего объекта, запрашивающего монтирование.

Ответ :

  • v1:

    {
        "Mountpoint": "/path/to/directory/on/host",
        "Err": ""
    }
    
  • v2:

    {
        "Mountpoint": "/path/under/PropagatedMount",
        "Err": ""
    }
    

Mountpoint — это путь на хосте (v1) или в подключаемом модуле (v2), где доступен том.

Err либо пуст, либо содержит строку ошибки.

/VolumeDriver.Path

Запрос :

{
    "Name": "volume_name"
}

Запросить путь к тому с заданным volume_name.

Ответ :

  • v1:

    {
        "Mountpoint": "/path/to/directory/on/host",
        "Err": ""
    }
    
  • v2:

    {
        "Mountpoint": "/path/under/PropagatedMount",
        "Err": ""
    }
    

В ответ указывает путь на хосте (v1) или внутри подключаемого модуля (v2), где том стал доступным, и/или строковую ошибку, если произошла ошибка.

Mountpoint является необязательным. Однако плагин может быть снова запрошен позже, если он не предоставлен.

/VolumeDriver.Unmount

Запрос :

{
    "Name": "volume_name",
    "ID": "b87d7442095999a92b65b3d9691e697b61713829cc0ffd1bb72e4ccd51aa4d6c"
}

Docker больше не использует именованный том. Unmount вызывается один раз для каждой остановки контейнера. Плагин может сделать вывод, что деинициализация тома в данный момент безопасна.

ID — это уникальный идентификатор вызывающего объекта, запрашивающего монтирование.

Ответ :

{
    "Err": ""
}

Отвечать строкой error, если произошла ошибка.

/VolumeDriver.Get

Запрос :

{
    "Name": "volume_name"
}

Получает информацию о volume_name.

Ответ :

  • v1:

    {
        "Volume": {
        "Name": "volume_name",
        "Mountpoint": "/path/to/directory/on/host",
        "Status": {}
    },
    "Err": ""
    }
    
  • v2:

    {
        "Volume": {
        "Name": "volume_name",
        "Mountpoint": "/path/under/PropagatedMount",
        "Status": {}
    },
    "Err": ""
    }
    

Отвечать строкой error, если произошла ошибка. Mountpoint и Status являются необязательными.

/VolumeDriver.Список

Запрос :

{}

Получает список томов, зарегистрированных в плагине.

Ответ :

  • v1:

    {
        "Volumes": [
        {
            "Name": "volume_name",
            "Mountpoint": "/path/to/directory/on/host"
        }
        ],
        "Err": ""
    }
    
  • v2:

    {
        "Volumes": [
        {
            "Name": "volume_name",
            "Mountpoint": "/path/under/PropagatedMount"
        }
        ],
        "Err": ""
    }
    

Отвечать строкой error, если произошла ошибка. Mountpoint является необязательным.

/VolumeDriver.Возможности

Запрос :

{}

Получает список возможностей, поддерживаемых драйвером.

Драйвер не требуется для реализации Capabilities. Если это не реализовано, используются значения по умолчанию.

Ответ :

{
  "Capabilities": {
    "Scope": "global"
  }
}

Поддерживаемые области: global и local. Любое другое значение в Scope будет игнорироваться, и будет использоваться local. Scope позволяет менеджерам кластера по-разному обрабатывать тома. Например, область global сигнализирует менеджеру кластера, что ему нужно создать том только один раз, а не на каждом хосте Docker. Дополнительные возможности могут быть добавлены в будущем.