Address
304 North Cardinal St.
Dorchester Center, MA 02124
Work Hours
Monday to Friday: 7AM - 7PM
Weekend: 10AM - 5PM
Address
304 North Cardinal St.
Dorchester Center, MA 02124
Work Hours
Monday to Friday: 7AM - 7PM
Weekend: 10AM - 5PM
Dockerのボリュームとバインドマウントの違いについては、前回の記事「【Docker入門】Dockerのバインドマウントとボリュームについてわかりやすくその基本を解説」でその基本的なイメージを解説しました。
そこで今回は、docker-compose.ymlファイルにおいて両者の違いがどのように書き方として現れるのかを見ていきましょう。
docker-compose.ymlでは、上記ボリュームと同じで「volumes」キーを使って、次の2つの書き方ができます。
順番に見ていきましょう。
まずdocker-compose.ymlに、ボリュームとバインドマウントを長い書式を使ってかく場合の使用例で、特に今回は名前付きボリュームを利用する場合の例となります。次のようなものです。
version: "3.9"
services:
web:
(略)
# このvolumesキーは、サービスwebのサブオプションとして指定。
# 今回はボリュームとバインドマウントの方式ごとに設定している
volumes:
- type: volume
source: mydata
target: /data
# volumesキーの追加オプションとしてのvolume(複数形のsがない)
# nocopy: trueはコンテナからのデータのコピーを無効にする
volume:
nocopy: true
- type: bind
source: ./static
target: /opt/app/static
# このvolumesキーオプションは、トップレベル(versionやservicesと同レベル)のキーとして設定。この場合は、名前付きボリュームを指定していることになる
volumes:
mydata:
これにつき、次の画像を参考にしてください。
まず青い□で囲まれた項目が、トップレベルキーと呼ばれる設定項目欄となります。
次にサービス「web」の中で①でボリュームの記述、②でバインドマウントの記述となっています。それぞれのtype項目を見てもらうとそれがわかると思います。
そして「ボリューム」を使うときは、そのトップレベルキーとしての「volumes」項目のところに、上の使用例ではmydataという「名前付きボリューム」を指定しています。これにより、docker-compose.ymlを実行すると名前付きボリューム「mydata」が作成されます。
そして画像中①のところで、マウントの方式を「volume」と指定、さらに、source(マウント元)としてその名前付きボリュームの名称を指定します。
続けて①のtargetのところに、コンテナー上にてマウント先のフォルダ/ディレクトリのパスを指定しています。こうするとボリュームmydataの中身が、コンテナ上のそのフォルダ/ディレクトリにも現れ、お互いに同期するイメージです。
②のセクションについては、上述のようにバインドマウントを使うときの設定になっています。こちらについては、ボリュームではないので名前付きボリュームmydataをsourceとして指定していません。そのかわりにホストPC(手元で使っているPC)のstaticというフォルダ/ディレクトリを、docker-compose.ymlからの相対パスを使って、sourceとして指定しています。
そしてそのstaticフォルダ/ディレクトリが、コンテナ上の「/opt/app/」という場所にあるstaticというフォルダ/ディレクトリへとコンテナ上の絶対パスを使ってマウントされています。
ボリュームにしろバインドマウントにしろ、いろいろオプションとして設定できるものがありますが、今回のような基本だけ理解できていればそれらも理解しやすくなるでしょう。
さて上では長い書式を使って書く場合を紹介しましたが、短い書式を使って同じ内容を書くことが可能です。その場合は次のようになります。
(略)
service:
web:
(略)
volumes:
- mydata:/data
- ./static:/opt/app/static
volumes:
mydata
こちらのほうが簡潔な書き方となりますが、長い書式のほうがオプションが多くなると見やすく・わかりやすいでしょう。
バインドマウントを使う場合において、これら書式の違いがエラーを引き起こす場合があります。つぎのような動作の違いがあるからです。
Dockerはなかなか最初はとっつきにくく、わかりにくいものです。そこで動画による学習がわかりやすくおすすめです。世界最大規模の動画学習サイトUdemyでは次のようなDockerの人気講座があります。
世界最大の動画学習サイトUdemyのおすすめDocker講座【PR】