The NetApp Docker Volume Plugin (nDVP) provides connectivity between Docker containers and NetApp storage platforms. One of the more powerful features exposed by the plugin is the ability to provide additional information about each volume as it is created. These options are specific to each storage platform (ONTAP, SolidFire, and E-Series) based on their individual capabilities.

ONTAP Volume Options

The ONTAP driver supports several options, depending on whether you’re using the iSCSI or NFS protocol.

Volume create options for NFS and iSCSI:

  • size – the size of the volume, defaults to 1 GiB
  • spaceReserve – thin or thick provision the volume, defaults to thin. Valid values are “none” (thin provisioned) or “volume” (thick provisioned).
  • snapshotPolicy – this will set the snapshot policy to the desired value. The default is “none”, meaning no snapshots will automatically be created for the volume. Unless modified by your storage administrator, a policy named “default” exists on all ONTAP systems which creates and retains six hourly, two daily, and two weekly snapshots. The data preserved in a snapshot can be recovered by browsing to the .snapshot directory in any directory in the volume.

NFS has two additional options that aren’t relevant when using iSCSI:

  • unixPermissions – this controls the permission set for the volume itself. By default the permissions will be set to ---rwxr-xr-x, or in numerical notation 0755, and root will be the owner. Either the text or numerical format will work.
  • snapshotDir – setting this to “false” will make the .snapshot directory inaccessible to clients accessing the volume. The default value is “true”, meaning that access to snapshotted data is enabled by default. However, some images, for example the official MySQL image, don’t function as expected when the .snapshot directory is visible, so turning it off may be needed.

Using these options during the docker volume create operation is super simple, just provide the option and the value using the -o operator during the CLI operation.

# create a 10GB volume
docker volume create -d netapp --name demo -o size=10g

# create a 100GB volume with snapshots
docker volume create -d netapp --name demo -o size=100g -o snapshotPolicy=default

# create a volume which has the setUID bit enabled
docker volume create -d netapp --name demo -o unixPermissions=4755

Note that the size option follows the standard ONTAP scheme where the letter at the end signifies units:

  • k = Kilobytes
  • m = Megabytes
  • g = Gigabytes
  • t = Terabytes

If no unit is provided the default is bytes, and the minimum volume size is 20MB.

SolidFire Volume Options

The SolidFire driver options expose the size and quality of service (QoS) policies associated with the volume. When the volume is created, the QoS policy associated with it is specified using the -o type=service_level nomenclature.

The first step to defining a QoS service level with the SolidFire driver is to create at least one type and specify the minimum, maximum, and burst IOPS associated with a name in the configuration file.

{
    ...
    ...
    "Types": [
        {
            "Type": "Bronze",
            "Qos": {
                "minIOPS": 1000,
                "maxIOPS": 2000,
                "burstIOPS": 4000
            }
        },
        {
            "Type": "Silver",
            "Qos": {
                "minIOPS": 4000,
                "maxIOPS": 6000,
                "burstIOPS": 8000
            }
        },
        {
            "Type": "Gold",
            "Qos": {
                "minIOPS": 6000,
                "maxIOPS": 8000,
                "burstIOPS": 10000
            }
        }
    ]
}

In the above configuration we have three policy definitions: Bronze, Silver, and Gold. These names are well known and fairly common, but we could have just as easily chosen: pig, horse, and cow, the names are arbitrary.

# create a 10GB Gold volume
docker volume create -d solidfire --name sfGold -o type=Gold -o size=10

# create a 100GB Bronze volume
docker volume create -d solidfire --name sfBronze -o type=Bronze -o size=100

Notice that the size here is always specified in Gigabytes, therefore no unit indicator is needed.

E-Series Volume Options

The E-Series driver offers the ability to specify the type of disk which will be used to back the volume and, like the other drivers, the ability to set the size of the volume at creation time.

# create a 10GB SSD backed volume
docker volume create -d eseries --name eseriesSsd -o mediaType=ssd -o size=10g

# create a 100GB HDD backed volume
docker volume create -d eseries --name eseriesHdd -o mediaType=hdd -o size=100g

Just like with the ONTAP driver, the size of the E-Series volume needs to have a unit specified.

One Plugin, One Ecosystem, Many Platforms

The NetApp Docker Volume Plugin is the single interface needed for all of the NetApp storage platforms to integrate with Docker. It is convenient and easy to choose and use the storage which best fits the needs of your application, whether you want to use shared NFS storage, iSCSI with guaranteed performance levels, or the fastest storage available. Running multiple instances of the nDVP simultaneously means that customizing the storage options available to your applications is extremely simple. Be sure to watch our blog for a post in the near future on creating a storage catalog using the nDVP with multiple configurations!

If you’re interested in the NetApp Docker Volume Plugin, it is available from our GitHub site. Full details on how to deploy and configure the plugin are available in the documentation. If you have questions or issues, please open an issue or send us an email (opensource@netapp.com).