###結論
僕もまだあまり理解できてないのでものすごく乱暴な説明なのですが、
下記のようにdocker-compose.ymlファイルを記述すると名前付きvolumeが使えます。
docer-compose.yml
version: '3'
services:
web:
build: .
...
volumes:
- .:/myapp
- gem_data:/usr/local/bundle
#ここと
...
volumes:
gem_data:
#ここが大事です。
- gem_data:/usr/local/bundle
これが名前付きパスです。
上記コードの下部にある、
volumes:
gem_data:
これが無いと
ERROR: Named volume "gem_data:/usr/local/bundle" is used in service "gem_data:" but no declaration was found in the volumes section.
とエラーが出てしまい相対パスや絶対パスを使わないと指定できないみたいです。
相対パスなどを使うよりは、名前付きパスを使う方が基本的にはいいみたいです。
参考
Docker上のMySQLのデータをVolumeでホストのディレクトリにマウントすると権限周りで面倒なことになる
https://qiita.com/ysd_marrrr/items/e8a50c43cff87951385c