2
2
お題は不問!Qiita Engineer Festa 2024で記事投稿!
Qiita Engineer Festa20242024年7月17日まで開催中!

⑦1日10分で理解するコンテナ技術入門 - Docker Composeのボリュームについて -

Posted at

前回はざっとDocker Composeの使い方について説明しました。今回は、ボリュームを扱う方法について少し深掘りしたいと思います。

Docker Composeでボリュームを扱う方法

主に二つの方法があります。

  1. サービス宣言の一部として、オンザフライで宣言する(バインドマウント)
  2. 名前付きボリュームを作成して、サービス内で利用を宣言する

オンザフライで宣言

オンザフライで宣言する場合、以下のような使用方法があります。

  • ホスト上のパスを指定して割り当てる
  • 一時的なデータをメモリ上に保存する
  • ほかのサービスやコンテナ上のボリュームを割り当てる
    docker composeのver3ではオンザフライで宣言してこの使い方をすることができなくなった(volumes_fromが廃止された)ので、割愛します。

ホスト上のパスを指定して割り当てる

[ホストのパス]:[コンテナのパス]でホスト上のディレクトリとコンテナのディレクトリを結びつけることができます。ここで指定した[コンテナのパス]にコンテナ上でファイルを配置すると、[ホストのパス]にそのファイルが保存されます。また、読み書き権限の制御も行えます。その場合は、[ホストのパス]:[コンテナのパス]:rwを指定します(読み取り専用にしたいならrのみつける)。

docker-compose.yamlでは、services.<サービス名>.volumes配下に指定します。例えば、以下のようになります。

version: '3.8'

services:
  web:
    build: .
    container_name: web
    volumes:
      - /home/opc/app/uploads:/app/uploads:rw

一時的なデータをメモリ上に保存する

tmpfsマウントを使用することで、一時的なデータをメモリ上に保存することができます。コンテナが停止すると、データは失われます。tmpfsマウントを使うときは、services.<サービス名>.tmpfs配下に指定します。

version: '3.8'

services:
  cache:
    image: redis:latest
    tmpfs:
      - /var/lib/redis # コンテナ内のマウントポイントを指定

名前付きボリューム

ボリュームに名前を付けて宣言して、複数のコンテナやサービス間で共有することができます。現在はvolumes_fromではなくこちらを使って共有するようです。
名前付きボリュームは、Dockerが管理するボリュームで、コンテナが削除されてもデータは保持されます。

名前付きボリュームは、以下のように定義できます。

version: '3.8'

services:
  web:
    image: my-web-app:latest
    ports:
      - "8080:5000"
    volumes:
      - uploads:/app/uploads

volumes:
  uploads:
    driver: local

driverには、そのボリュームがどのようにストレージを提供するかを指定します。指定できるものとして、以下のようなものがあります(ほかにもあります)。

  • local
  • nfs
  • cifs

local

localドライバーは、デフォルトで使用されるドライバーで、ホストマシンのファイルシステムにデータを保存します。

volumes:
  my-local-volume:
    driver: local
    driver_opts:
      type: none
      device: /absolute/path/to/dir
      o: bind

nfs

nfsドライバーは、ネットワークファイルシステムを使用して、リモートサーバーにデータを保存します。複数のホスト間で共有ストレージを提供する場合に使用されます。

volumes:
  my-nfs-volume:
    driver: nfs
    driver_opts:
      type: nfs
      o: addr=192.168.1.100,rw
      device: ":/path/to/nfs/dir"

cifs

cifsドライバーは、CIFSを使用して、Windowsネットワーク共有をマウントします。cifsドライバーを使うと、ホスト上のマウントポイントを変更しなくても、Dockerで直接Samba共有ディレクトリをマウントできます。

volumes:
  my-cifs-volume:
    driver: local
    driver_opts:
      type: cifs
      o: addr=uxxxx.your-server.de,username=user,password=pass,domain=domain
      device: "//server/share"

まとめ

今回はdocker composeでボリュームを扱う方法について簡単に説明しました。次回はdocker composeでのネットワークの扱いについて説明します。

2
2
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
2
2