😽

Dockerコンテナデータの永続化

2023/07/26に公開

Dockerコンテナの特徴

Dockerコンテナはホストマシン上で起動したあと、
コンテナで行った処理はコンテナレイヤーで保存されるが、
コンテナを削除するとコンテナレイヤーは消えてしまう
よって、処理を行った状態のコンテナを別をホストマシンに移動することはできない

Dockerコンテナデータの永続化方法

コンテナで行った処理を永続化する方法が2種類ある

  • ボリューム
  • バインドマウント

ボリューム領域

ボリューム領域とはDockerが管理している領域で、
複数のコンテナから接続することが可能
外付けHDDのようなもので、コンテナを破棄してもボリューム領域のデータは残る
複数のコンテナでデータを共有することが可能

新しいボリューム領域を作成する

docker volume create <VOLUMENAME>

ボリューム領域の一覧

docker volume ls

指定したボリューム領域の詳細情報

docker volume inspect <VOLUMENAME>

指定したボリューム領域の削除

docker volume rm <VOLUMENAME>

ボリュームへ接続

コンテナを起動する際にボリュームを指定する

docker container run -v <VOLUMENAME>:<コンテナ内の絶対パス> <IMAGENAME>

ほかの書き方

docker container run --mount type=volume,src=<VOLUMENAME>,dst=<コンテナ内の絶対パス> <IMAGENAME>

サンプル

ボリュームを指定してubuntuコンテナ(container-1)を実行
/app1 がボリューム領域となる

$ docker container run -it -v my-volume:/app1 --name container-1 ubuntu

container-1で/app1配下にファイルを生成する

$ touch /app1/hello.txt

ボリュームを指定してubuntuコンテナ(container-2)を実行
/app2 がボリューム領域となる

$ docker container run -it -v my-volume:/app2 --name container-2 ubuntu

container-2で/app2配下を確認する

$ ls /app2/
hello.txt

バインドマウント

ホストマシンの任意のディレクトリとコンテナの任意のディレクトリを同期する

docker container run -v <ホスト絶対パス>:<コンテナ内の絶対パス> <IMAGENAME>

Windowsだとホスト絶対パスでUsers直下のディレクトリしか指定できない?
/c/Users/{user}

ほかの書き方

docker container run --mount type=bind,src=<ホスト絶対パス>,dst=<コンテナ内の絶対パス> <IMAGENAME>

こちらの書き方ではWindowsでも問題なしだった

Discussion