【Docker】Data Volumeで永続データを扱う

2021.09.12
2024.03.24
Docker
Data Volume

はじめに

Dockerコンテナで永続データを扱う方法であるData Volumeについて、実際に動かしながら理解していきます。

Dockerの基本的なことについては、下記で解説しています。

いまさら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を追加してコンテナを実行しています。

1docker container run -it -d --name centos7 -v testvol centos:7

試しにコンテナの中身を見てみます。

1docker 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 for Mac] Docker Volumeの実態がどこにあるのか、探してみた|w0o0ps

拙者、僭越ながらジュニアのエンジニアが書いたdocker-compose.yamlファイルのレビューしてましてね。フィードバックで「DBのデータは、コンテナ消しても消えぬように、Persistent(永続) Volumeにしたほうがえーんちゃう?」みたいなアドバイスしましたの。(← 偉そう) そしたら、「そのPersistent Volumeの実態はどこにあるのんや!」みたいな質問を受けましたの。 それな! 拙者も気になってたけど、ちゃんと調べたことなかったわ!スマン!笑。 まぁ、気になるよね。だってエンジニアだもんね。ww というわけで、ちゃんと調べてみた。(° ꈊ °)✧

Data Volumeをみてみると作成されていることがわかります。

1docker volume ls
2DRIVER    VOLUME NAME
3local     cc8304d7711ce4d883af489ba3dc56eedaabed23de1ed536d858265a1ff21b89

コンテナを削除してもData Volumeは残ります。

1docker container rm -f centos7
2
3docker volume ls
4DRIVER    VOLUME NAME
5local     cc8304d7711ce4d883af489ba3dc56eedaabed23de1ed536d858265a1ff21b89

コマンドについては下記を参照してください。

Docker基本コマンドまとめ

Docker基本コマンドまとめ

:::affiliate-message 本ページはAmazonアフィリエイトのリンクを含みます。

ホスト上のディレクトリをマウントしてコンテナ実行

-v ホスト側ディレクトリ:コンテナ側ディレクトリでホスト上のディレクトリをマウントできます。

現在のディレクトリは以下のようにしています。

1.
2└── host_dir
3    ├── foo.txt
4    └── hoge.txt

下記のコマンドでホスト上の${PWD}/host_dirをマウントしてコンテナを実行します。

1docker container run -it -d --name centos7 -v ${PWD}/host_dir:/host_dir centos:7

確認するとData Volumeのディレクトリに同じファイルがあることがわかります。

1docker 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
5docker container exec -it centos7 ls /host_dir
6foo.txt  hoge.txt

まとめ

Data Volumeを使うことでコンテナで永続データを利用することができます。

参考

Support

\ この記事が役に立ったと思ったら、サポートお願いします! /

buy me a coffee
Share

Profile

author

Masa

都内のIT企業で働くエンジニア
自分が学んだことをブログでわかりやすく発信していきながらスキルアップを目指していきます!

buy me a coffee