はじめに
Dockerコンテナで永続データを扱う方法であるData Volumeについて、実際に動かしながら理解していきます。
Dockerの基本的なことについては、下記で解説しています。

コンテナでの永続データの扱い方
Dockerコンテナで永続データを扱う方法は主に以下の2つです。
- Data Volume
- Data Volumeコンテナ
今回はData Volumeについて動かしてみます。Data Volumeコンテナについては別で解説します。
Data Volumeとは
Data Volumeとは、Dockerコンテナ内のディレクトリを永続化する仕組みです。
Data Volumeには以下のような特徴があります。
- コンテナ間で共有・再利用
- ホスト側からData Volumeを直接変更
- イメージを更新してもData Volumeに影響なし
- コンテナを削除してもData Volumeは残る
Data Volumeを追加してコンテナ実行
コンテナを作成、実行時に-v
オプションでコンテナにData Volumeを追加できます。
下記ではtestvol
というData Volumeを追加してコンテナを実行しています。
❯ docker container run -it -d --name centos7 -v testvol centos:7
試しにコンテナの中身を見てみます。
❯ docker container exec -it centos7 ls /
anaconda-post.log dev home lib64 mnt proc run srv testvol usr
bin etc lib media opt root sbin sys tmp var
testvol
というディレクトリができているのがわかります。こちらがData Volumeのディレクトリです。
Macの場合、ホストのどこにData Volumeの実態があるかは下記で解説されています。Docker Engineが動いているVM上にあるみたいです。

Data Volumeをみてみると作成されていることがわかります。
❯ docker volume ls
DRIVER VOLUME NAME
local cc8304d7711ce4d883af489ba3dc56eedaabed23de1ed536d858265a1ff21b89
コンテナを削除してもData Volumeは残ります。
❯ docker container rm -f centos7
❯ docker volume ls
DRIVER VOLUME NAME
local cc8304d7711ce4d883af489ba3dc56eedaabed23de1ed536d858265a1ff21b89
コマンドについては下記を参照してください。

ホスト上のディレクトリをマウントしてコンテナ実行
-v ホスト側ディレクトリ:コンテナ側ディレクトリ
でホスト上のディレクトリをマウントできます。
現在のディレクトリは以下のようにしています。
.
└── host_dir
├── foo.txt
└── hoge.txt
下記のコマンドでホスト上の${PWD}/host_dir
をマウントしてコンテナを実行します。
❯ docker container run -it -d --name centos7 -v ${PWD}/host_dir:/host_dir centos:7
確認するとData Volumeのディレクトリに同じファイルがあることがわかります。
❯ docker container exec -it centos7 ls /
anaconda-post.log dev home lib media opt root sbin sys usr
bin etc host_dir lib64 mnt proc run srv tmp var
❯ docker container exec -it centos7 ls /host_dir
foo.txt hoge.txt
まとめ
Data Volumeを使うことでコンテナで永続データを利用することができます。