Skip to content

[Docker Compose] 名前付きボリュームを利用しよう!

  • Docker

2021-06-19

名前付きボリューム、何が良い?

こういったケースに役立ちます。

  • node_modulesなどの重いフォルダがコンテナにあって困っている。
  • コンテナ内のデータをコンテナが破棄されても残したい。

名前付きボリュームとは?

名前付きボリュームを説明する前にボリュームについて説明します。
Docker公式ドキュメント

ボリュームとは?

Dockerにおいてデータを永続化するための方法です。
Dockerの管理下でデータを永続化できるので、
ホストには残したくないけどコンテナ側でずっと使いたいデータを扱うのに便利です。

Volumes are the preferred mechanism for persisting data generated by and used by Docker containers. While bind mounts are dependent on the directory structure and OS of the host machine, volumes are completely managed by Docker. 公式ドキュメントより

ボリュームの種類について

匿名と名前付きがあります。

匿名ボリュームとは?

ボリュームの設定部分でホスト側の指定をせずにゲスト側のフォルダを指定することで匿名ボリュームが生成されます。

services:
  some-service:
    build: ./
    image: some-image
    container_name: some-container
    ports:
      - "8000:8000"
    volumes:
      - ./:/home/some-project
      # 匿名ボリュームでnode_modulesをホストと共有しないようにする。
      - /home/some-project/node_modules
    command: some-command

ただし、ボリュームの名前がランダムな文字列になってしまい使いづらいので、
基本的に名前付きボリュームを使うのが良さそうです。

結局名前付きボリュームとは?

以下に名前付きボリュームと匿名ボリュームを docker volume lsで表示したときの例を載せました。

DRIVER VOLUME NAME
local some-named-volume
local xxxxxxxxxxxxxxxxxxxx

名前付きボリュームの方が扱いやすいですね。 公式ドキュメントでも、両者は名前が決められるかどうか以外は同じと解説されています。

名前を持たないというだけで、名前つきと匿名の各ボリュームは同等に機能します。

名前付きボリュームの使い方

まずservicesと同じレベルにvolumesで名前付きボリュームを指定します。
あとはサービス側の設定で、 名前付きボリューム名:ゲスト側のフォルダ を指定すれば名前付きボリュームを利用できます。

volumes:
  some-named-volume:

services:
  some-service:
    build: ./
    image: some-image
    container_name: some-container
    ports:
      - "8000:8000"
    volumes:
      - ./:/home/some-project
      # 名前付きボリュームでnode_modulesをホストと共有しないようにする。
      - some-named-volume:/home/some-project/node_modules
    command: some-command

まとめ

名前付きボリュームを使って快適な開発環境を構築しましょうー!

← Prev
  • Motohouse Dev Blog