Help us understand the problem. What is going on with this article?

3分くらいで分かるdockerのdata volume

More than 3 years have passed since last update.

参考: https://docs.docker.com/engine/tutorials/dockervolumes/

docker create, runでの-vオプション指定時

$ docker create -v /usr/src/app --name ${container_name} busybox

などど実行した際に、-vオプションで指定したパスへのdata volumeが暗黙的に作成される。

data volumeを明示的に作成

$ docker volume create --name hoge_volume

この時、data volumeに使用するdriver pluginがインストール済みであればそれを指定することができ、NFS等を利用したdata volumeの作成も可能になる。(ただしdriverがその環境でinstallできるかは別なので注意)
SEE: https://docs.docker.com/engine/extend/legacy_plugins/#/volume-plugins

data volumeの確認

docker volume lsで一覧

コンテナを指定して使用しているdata volumeを調べたい場合は以下のようにすれば、volumeの名前を取得できる。

$ docker inspect -f  "{{range .Mounts}}{{.Name}}{{end}}" ${container_name}
a0a725e99b55e150ecedafc2f2bcc51f4780d728695a2d5b20d70647eabea74e

data volumeの削除

docker rm ${container_name}の際に-vオプションを付けない場合、data volumeは削除されない。
つまり、存在が残るので、docker create等の際に-v ${data_volume_name}:/usr/src/appなどと指定すれば再度マウントすることも可能。
data volume自体を指定して削除する場合はdocker volume rm ${data_volume_name}とする。

docker composeで使う

docker-compose.ymlをversion 2形式にした場合、volumesというkey以下に、data volumeを定義することができる。
これを利用して、永続化したdata volumeを各サービスにマウントすることができる。

version: '2'
volumes:
    app:
        driver: 'local'
    mysql:
        driver: 'local'
services:
    mysql:
        # 中略
        volumes:
            # ${volumesに定義したkey}:{マウントパス}
            - mysql:/var/lib/mysql
    app:
        # 中略
        volumes:
            - app:/usr/src/app/

上記でcreateを実行した際に、以下のようなdata volume群が作成される。

$ docker volume ls
local               ${compose_name}_app
local               ${compose_name}_mysql

また、この場合もdata volumeは暗黙的に削除されることはなく、docker-compose down -v, docker-compose rm -vなど-vオプションを指定することによって削除される。


data volumeを使えば永続化するためのdata containerは不必要。
ただし、data containerを使用すればdata volumeをまとめておいて、あとで一括で削除、というのもできる(っていうニーズがあるか…?)ので、状況によっては作る必要性はありそう。

damele0n
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした