How-to: Configure Docker containers (Volumes)

Overview

This example illustrates how the Docker plugin can be used to configure a Docker container, more specifically volumes, as part of the container creation.

The volumes used by the container can also be configured in the dockerfile through usage of the VOLUME command.

Extension of another example

This example modifies the container configuration example How-to: Configure Docker containers (Exposed ports).

Please consult that example for details about Pineapple configuration, modules and models describes how Pineapple can be used to install Docker on a Vagrant box for the purpose of the example.

Define the module model

The model file for definition of the image and the container:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<mmd:models xmlns:mmd="http://pineapple.dev.java.net/ns/module_model_1_0"       
  xmlns:dkp="http://pineapple.dev.java.net/ns/plugin/docker_1_0" >
  <mmd:model target-resource="docker-node" target-operation="deploy-configuration" description="Define Docker image: centos:latest" >
    <mmd:content>
      <dkp:docker>
        <dkp:image-from-dockerfile source-directory="modulepath:dockersrc" pull-image="false" >
          <dkp:target-image repository="pineapple/httpd" tag="1.0" />
        </dkp:image-from-dockerfile>
      </dkp:docker>                       
    </mmd:content>
  </mmd:model>
  <mmd:model target-resource="docker-node" description="Define Docker container" >
    <mmd:content>
      <dkp:docker>
        <dkp:container name="alpha01" >
          <dkp:image repository="pineapple/httpd" tag="1.0" />   
          <dkp:configuration>
            <dkp:exposed-ports>
              <dkp:port value="80" type="tcp" />
            </dkp:exposed-ports>
            <dkp:volumes>
              <dkp:volume mountpoint="/tmp" />
              <dkp:volume mountpoint="/alpha" />
            </dkp:volumes>
          </dkp:configuration>
        </dkp:container>
      </dkp:docker>                       
    </mmd:content>
  </mmd:model>
</mmd:models>

The configuration details

Definition of the container

The second model contains the dkp:container element which defines a Docker container. When the model is invoked with the deploy-configuration operation then the container is created. When the model is invoked with the undeploy-configuration operation then the container is deleted.

Configuration of the container

The container element contains an optional configuration element. The element supports detailed configuration of the container.

The element is used in this example to the define volumes for the container.

A volume is defined by a volumes element with a sub volume element for each volume. A volume element has a single mountpoint for definition of the volume:

  <dkp:configuration>
    <dkp:volumes>
      <dkp:volume mountpoint="/tmp" />
      <dkp:volume mountpoint="/alpha" />
    </dkp:volumes>
  </dkp:configuration>