0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【Docker】マウントについて

Posted at

マウントの種類について

マウントには以下の4つがあります。

  • バインドマウント
  • ボリューム
  • tmpfsマウント
  • 名前付きパイプ

中でもよく使用するのはバインドマウントとボリュームだと思います。

バインドマウント

バインドマウントは、ホスト側のディレクトリやファイルがコンテナにマウントされます。
マウント時にホスト側の情報がそのまま反映され、マウント後にコンテナ内で変更があればホスト側に反映されます。

docker-compose.ymlでは以下のように記述することで設定できます。

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ではそれぞれ以下のように記述することで設定できます。

  • 匿名ボリューム
docker-compose.yml
version: '3.9'
services:
  app:
    build: .
# 以下匿名ボリュームのための記述
    volumes:
      - /myapp/node_modules
  • 名前付きボリューム
docker-compose.yml
version: '3.9'
services:
  app:
    build: .
# 以下名前付きボリュームのための記述
    volumes:
      - node_modules:/myapp/node_modules
volumes:
  mode_modules:

2つを同時に使った際の優先順位

バインドマウントとボリュームを同時に設定した際にはボリュームが優先されます。
例えばdocker-compose.ymlを以下のように記述します。

docker-compose.yml
version: '3.9'
services:
  app:
    build: .
    volumes:
      - .:/myapp
      - node_modules:/myapp/node_modules
volumes:
  mode_modules:

名前付きボリュームの方が優先されるため、node_modulesはバインドマウントではなく、ボリュームで管理されます。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?