Dockerで再利用可能なボリュームを定義する

Dockerはまだできたばかりなので、情報が少ないですね。。。再利用可能なボリュームを作りたかったんですけど、なかなか情報を見つけられず。まぁ灯台下暗しだったんですがはまりました。普通にdocker runと実行したときに表示されるヘルプに書かれてた。英語が読めてないなぁ。。。

再利用可能なボリュームを作成するには以下のコマンドを使って仮想環境を起動します。

$ sudo docker run -v /persistent base /bin/bash -c "echo persistent area > /persistent/msg"

-vオプション指定することで上の例で言うと/persistent ディレクトリをマウントします。作成された仮想環境をinspectしてみると

$ sudo docker ps -n=1
ID                  IMAGE               COMMAND                CREATED              STATUS              PORTS
5ebd0478c048        base:latest         /bin/bash -c echo pe   About a minute ago   Exit 0    
$ sudo docker inspect 5ebd0478c048                                                                                                          
[{
    "ID": "5ebd0478c0481688d5ff1554b7004c2357261f78edbd8eb4ff0929b817adecb8",
    "Created": "2013-08-16T06:53:24.786798288-07:00",
    "Path": "/bin/bash",
    "Args": [
        "-c",
        "echo persistent area \u003e /persistent/msg"
    ],
    "Config": {
        "Hostname": "5ebd0478c048",
        "User": "",
        "Memory": 0,
        "MemorySwap": 0,
        "CpuShares": 0,
        "AttachStdin": false,
        "AttachStdout": true,
        "AttachStderr": true,
        "PortSpecs": null,
        "Tty": false,
        "OpenStdin": false,
        "StdinOnce": false,
        "Env": null,
        "Cmd": [
            "/bin/bash",
            "-c",
            "echo persistent area \u003e /persistent/msg"
        ],
        "Dns": null,
        "Image": "base",
        "Volumes": {
            "/persistent": {}
        },
        "VolumesFrom": "",
        "Entrypoint": [],
        "NetworkDisabled": false
    },
    "State": {
        "Running": false,
        "Pid": 0,
        "ExitCode": 0,
        "StartedAt": "2013-08-16T06:53:24.797292061-07:00",
        "Ghost": false
    },
    "Image": "b750fe79269d2ec9a3c593ef05b4332b1d1a02a62b4accb2c21d589ff2f5f2dc",
    "NetworkSettings": {
        "IPAddress": "",
        "IPPrefixLen": 0,
        "Gateway": "",
        "Bridge": "",
        "PortMapping": null
    },
    "SysInitPath": "/usr/local/bin/docker",
    "ResolvConfPath": "/var/lib/docker/containers/5ebd0478c0481688d5ff1554b7004c2357261f78edbd8eb4ff0929b817adecb8/resolv.conf",
    "Volumes": {
        "/persistent": "/var/lib/docker/volumes/50a7719c1e7a35a3e1bd3fd7cac0d96fbca7e9824a0d7891a6fff5767fb1f6ab/layer"
    },
    "VolumesRW": {
        "/persistent": true
    }
}]

/var/lib/docker/volumesの下にボリュームが作られていることが分かります。 これを再利用するには以下のコマンドをたたきます。

$ sudo docker run -volumes-from 5ebd0478c048 base /bin/bash -c "cat /persistent/msg"
persistent area

-volumes-from でコンテナを指定することで指定したコンテナのボリュームを参照することが出来ます。まだ動いている仮想環境のボリュームも参照できてしまうので、複数の仮想環境から同時にアクセスするのは気をつけた方が良いかもしれないですね。