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

スポンサーリンク

はじめに

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

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

いまさらDocker入門
はじめに いまさらながらDockerについてまとめてみました。 なるべく動かしながらDockerを理解していきたいと思います。 Dockerとは 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上にあるみたいです。

[Docker for Mac] Docker Volumeの実態がどこにあるのか、探してみた|w0o0ps
拙者、僭越ながらジュニアのエンジニアが書いたdocker-compose.yamlファイルのレビューしてましてね。フィードバックで「DBのデータは、コンテナ消しても消えぬように、Persistent(永続) Volumeにしたほうがえーんちゃう?」みたいなアドバイスしましたの。(← 偉そう) そしたら、「そのPersi...

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

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

Docker基本コマンドまとめ
はじめに Dockerの基本的な使い方と簡単な具体例をまとめました。 それなりに数があるので、目次から探すのがいいと思います。 イメージ Dockerfileからイメージをビルド docker image build PATH | URL ...

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

-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を使うことでコンテナで永続データを利用することができます。

参考

タイトルとURLをコピーしました