【Docker】Data Volumeで永続データを扱う
はじめに
Dockerコンテナで永続データを扱う方法であるData Volumeについて、実際に動かしながら理解していきます。
Dockerの基本的なことについては、下記で解説しています。
いまさらDocker入門
:::affiliate-message 本ページはAmazonアフィリエイトのリンクを含みます。
コンテナでの永続データの扱い方
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を追加してコンテナを実行しています。
1❯ docker container run -it -d --name centos7 -v testvol centos:7
試しにコンテナの中身を見てみます。
1❯ docker container exec -it centos7 ls /
2anaconda-post.log dev home lib64 mnt proc run srv testvol usr
3bin etc lib media opt root sbin sys tmp var
testvol
というディレクトリができているのがわかります。こちらがData Volumeのディレクトリです。
Macの場合、ホストのどこにData Volumeの実態があるかは下記で解説されています。Docker Engineが動いているVM上にあるみたいです。
[Docker for Mac] Docker Volumeの実態がどこにあるのか、探してみた|w0o0ps
拙者、僭越ながらジュニアのエンジニアが書いたdocker-compose.yamlファイルのレビューしてましてね。フィードバックで「DBのデータは、コンテナ消しても消えぬように、Persistent(永続) Volumeにしたほうがえーんちゃう?」みたいなアドバイスしましたの。(← 偉そう) そしたら、「そのPersistent Volumeの実態はどこにあるのんや!」みたいな質問を受けましたの。 それな! 拙者も気になってたけど、ちゃんと調べたことなかったわ!スマン!笑。 まぁ、気になるよね。だってエンジニアだもんね。ww というわけで、ちゃんと調べてみた。(° ꈊ °)✧
Data Volumeをみてみると作成されていることがわかります。
1❯ docker volume ls
2DRIVER VOLUME NAME
3local cc8304d7711ce4d883af489ba3dc56eedaabed23de1ed536d858265a1ff21b89
コンテナを削除してもData Volumeは残ります。
1❯ docker container rm -f centos7
2
3❯ docker volume ls
4DRIVER VOLUME NAME
5local cc8304d7711ce4d883af489ba3dc56eedaabed23de1ed536d858265a1ff21b89
コマンドについては下記を参照してください。
Docker基本コマンドまとめ
:::affiliate-message 本ページはAmazonアフィリエイトのリンクを含みます。
ホスト上のディレクトリをマウントしてコンテナ実行
-v ホスト側ディレクトリ:コンテナ側ディレクトリ
でホスト上のディレクトリをマウントできます。
現在のディレクトリは以下のようにしています。
1.
2└── host_dir
3 ├── foo.txt
4 └── hoge.txt
下記のコマンドでホスト上の${PWD}/host_dir
をマウントしてコンテナを実行します。
1❯ docker container run -it -d --name centos7 -v ${PWD}/host_dir:/host_dir centos:7
確認するとData Volumeのディレクトリに同じファイルがあることがわかります。
1❯ docker container exec -it centos7 ls /
2anaconda-post.log dev home lib media opt root sbin sys usr
3bin etc host_dir lib64 mnt proc run srv tmp var
4
5❯ docker container exec -it centos7 ls /host_dir
6foo.txt hoge.txt
まとめ
Data Volumeを使うことでコンテナで永続データを利用することができます。