はじめに
本記事はプログラミング初学者が学習を進めていて疑問に思った点について調べた結果を備忘録も兼ねてまとめたものです。
そのため、記事の内容に誤りが含まれている可能性があります。ご容赦ください。
間違いを見つけた方は、お手数ですが、ご指摘いただけますと幸いです。
マウントの種類について
マウントには以下の4つがあります。
- バインドマウント
- ボリューム
- tmpfsマウント
- 名前付きパイプ
中でもよく使用するのはバインドマウントとボリュームだと思います。
バインドマウント
バインドマウントは、ホスト側のディレクトリやファイルがコンテナにマウントされます。
マウント時にホスト側の情報がそのまま反映され、マウント後にコンテナ内で変更があればホスト側に反映されます。
docker-compose.yml
では以下のように記述することで設定できます。
version: '3.9'
services:
app:
build: .
# 以下バインドマウントのための記述
volumes:
- .:/myapp
上記のように記述することでホスト側のdocker-compose.yml
の配置されているディレクトリ以下のディレクトリやファイルがコンテナにマウントされます。
ボリューム
ボリュームはDockerによって管理されてます。
ボリュームはバーチャルマシン上の/var/lib/docker/volumes/ボリューム名/_dataに保存されます。
よって、基本的にはホストマシンから参照することはできません。
ホスト側に同名のフォルダやファイルが存在していてもコンテナ側には変更が反映されません。
Dockerによって管理されているため、docker volume ls
で一覧を表示できます。
また、docker volume rm ボリューム名
で削除もできます。
ボリュームには匿名ボリュームと名前付きボリュームの2つがあります。
違いは任意のボリューム名を設定するかしないかです。
docker-compose.yml
ではそれぞれ以下のように記述することで設定できます。
- 匿名ボリューム
version: '3.9'
services:
app:
build: .
# 以下匿名ボリュームのための記述
volumes:
- /myapp/node_modules
- 名前付きボリューム
version: '3.9'
services:
app:
build: .
# 以下名前付きボリュームのための記述
volumes:
- node_modules:/myapp/node_modules
volumes:
mode_modules:
2つを同時に使った際の優先順位
バインドマウントとボリュームを同時に設定した際にはボリュームが優先されます。
例えばdocker-compose.yml
を以下のように記述します。
version: '3.9'
services:
app:
build: .
volumes:
- .:/myapp
- node_modules:/myapp/node_modules
volumes:
mode_modules:
名前付きボリュームの方が優先されるため、node_modules
はバインドマウントではなく、ボリュームで管理されます。