偶に docker でどうやってドライブマウントするんだっけ?と分からなくなることがあるのでメモ。
今回は、docker volume create
を使います。
以下、公式ドキュメントにも書かれています。
ボリュームを作る
docker volume create test-volume
ボリュームが出来ているか確認(リスト出力)
- コマンド
docker volume ls
- 出力結果
DRIVER VOLUME NAME local test-volume
ボリュームが出来ているか確認(inspect)
- コマンド
docker volume inspect test-volume
- 出力結果
[ { "CreatedAt": "2021-09-07T00:47:45Z", "Driver": "local", "Labels": {}, "Mountpoint": "/var/lib/docker/volumes/test-volume/_data", "Name": "test-volume", "Options": {}, "Scope": "local" } ]
そのボリュームをマウントして使う
--mount source=ボリューム名,target=マウントするパス \
または -v ボリューム名:/マウントするパス
で、対象のボリュームをマウントして使うことができます。
以下、nginx をマウントして使う例です。バックグラウンドで起動するために、-d
オプションも付与しています。
docker run -d \ -v test-volume:/volume_data \ nginx
起動しました。
>docker run -d -v test-volume:/volume_data nginx 3fe4be55e5996ee51a8206bb51fc486cb42090baa2664ebe4b09e97c96077634
マウントの詳細をコンテナ内部に入って確認
コンテナ内部に入ってみます。
docker exec -it 3fe4be55e599 bash
ls -la
して、volume_data フォルダが存在することを確認できます。
root@3fe4be55e599:/# ls -la total 92 drwxr-xr-x 1 root root 4096 Sep 7 01:25 . ... drwxr-xr-x 2 root root 4096 Sep 7 00:47 volume_data
フォルダに入ってみると、何もデータはありません。
root@3fe4be55e599:/# cd volume_data root@3fe4be55e599:/volume_data# ls
データの永続性を確認
ファイルを作成してみます。
root@3fe4be55e599:/volume_data# echo "test" > test.txt root@3fe4be55e599:/volume_data# cat test.txt test
データが永続化しているかを確認したいので、コンテナを抜けます。
root@3fe4be55e599:/volume_data# exit
docker stop します。
docker stop 3fe4be55e599
新しいコンテナを起動します。
docker run -d -v test-volume:/volume_data nginx bca0e30691ad92dbfd4014d910f00c1d585540fcf3dc750e612b8967da54e3e2
コンテナに入ります。
docker exec -it bca0e30691ad bash
データの永続性が以下で確認できました。
root@bca0e30691ad:/# cd volume_data/ root@bca0e30691ad:/volume_data# ls test.txt root@bca0e30691ad:/volume_data# cat test.txt test
他にバインドマウントもある
今回はボリュームを使う方法でしたが、他にもバインドマウントを使う方法もあります。