質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.39%
docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Q&A

解決済

3回答

1273閲覧

Docker-compose.ymlのvolumeについて

退会済みユーザー

退会済みユーザー

総合スコア0

docker-compose

docker-composeとは、複数のコンテナで構成されるサービスを提供する手順を自動的し管理を簡単にするツール。composeファイルを使用しコマンド1回で設定した全サービスを作成・起動することが可能です。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

0グッド

2クリップ

投稿2019/05/23 04:28

編集2019/05/23 04:29

次のdocker-compose.ymlの「volumes」の部分の意味を教えてください。
(docker-compose.ymlの内容を一部抜粋しています)

docker

1version: '3' 2services: 3 db: 4 image: mysql:5.7 5 container_name: db_mysql 6 volumes: 7 - db-volume:/var/lib/mysql 8volumes: 9 db-volume:

dbコンテナのvolumeとしてトップレベルで定義された「db-volume」を
dbコンテナの「/var/lib/mysql」に作成する
という意味であっているでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

dbコンテナのvolumeとしてトップレベルで定義された「db-volume」を

dbコンテナの「/var/lib/mysql」に作成する
という意味であっているでしょうか?

作成するというのがちょっと惜しいですね。
トップレベルで定義された「db-volume」をdbコンテナの「/var/lib/mysql」にマウントする
という意味になります。

本質問で定義されているdb-volumeNamed volume(名前付きボリューム)と言われています。
これはdockerコマンドで参照する時や、複数のサービスで再利用する(以下簡単な例)時等に便利です。

services: db: image: mysql:5.7 container_name: db_mysql volumes: - db-volume:/var/lib/mysql backup: image: backup volumes: - db-volume:/var/lib/backup/data volumes: db-volume:

投稿2019/05/23 06:32

xenbeat

総合スコア4258

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/05/23 07:00

ご回答ありがとうございます。 名前付きボリュームについて調べてみます。
guest

0

db-volumeを/var/lib/mysqlにマウントする、という事ですね。

この回答で間違いないですが、「マウント」の意味がいまいち理解しきれていないといった感じでしょうか。

「マウント」とは「取り付ける」くらいの意味合いで解釈していただき、ローカルのdb-volumeをコンテナの/var/lib/mysqlに取り付ける、と考えると理解しやすいのではないでしょうか?
ローカルのdb-volumeとコンテナの/var/lib/mysqlで中身を共有しているイメージです。

コンテナは終了すると中身が全て消えてしまうので、消えては困るようなものはコンテナから取り出してローカルに保存しておきます。そのための設定がvolumesの部分にあたります。
再度起動した時にコンテナの/var/lib/mysqlの情報がローカルのdb-volumeに残っており、それがコンテナの/var/lib/mysqlにマウントされるので、振る舞いとしては前回のコンテナを引き継いだように見えます、これによって見掛け上永続化できているというものです。

投稿2019/05/23 06:46

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/05/23 07:01

ご回答ありがとうございます。 この場合、「ローカルのdb-volume」とはどこを指すのでしょうか? ローカルの保存先ディレクトリはどこで指定しているのでしょうか??
退会済みユーザー

退会済みユーザー

2019/05/23 07:05

> 「ローカルのdb-volume」とはどこを指すのでしょうか? ホストOSの中のdb-volumeがある場所です。
退会済みユーザー

退会済みユーザー

2019/05/23 07:30

なるほどです。 名前付きボリュームを使用する時は、事前にローカル上でデータ格納領域を作成しておく必要があるという認識で良いでしょうか? 今回の場合ですと、事前に「db-volume」というディレクトリをdocker-compose.ymlと同じ階層に作成しておけばよいのでしょうか??
退会済みユーザー

退会済みユーザー

2019/05/23 07:36

事前にローカル上でデータ格納領域を作成しておき、それを利用する場合は名前付きボリュームとは違って以下のようにフルパスで指定します。 volumes: - /Users/xxx/work_dir/db-volume:/var/lib/mysql 名前付きは自分でディレクトリを作成して〜というよりDockerが名前のキーで参照できる保存場所を確保してくれてるみたいな感じでは無いでしょうか?
xenbeat

2019/05/23 09:44 編集

@buta_botti 横から失礼いたします。 @morit > 名前付きボリュームを使用する時は、事前にローカル上でデータ格納領域を作成しておく必要があるという認識で良いでしょうか? いいえ、事前に作成する必要はありません。 > 今回の場合ですと、事前に「db-volume」というディレクトリをdocker-compose.ymlと同じ階層に作成しておけばよいのでしょうか?? いいえ、上記の通り作成する必要がありません。 ボリュームは ”Dockerによって管理されるファイルシステム” に自動的に格納されます。 なので質問者さんが手動で作成する必要はありません。 通常は、ホストの「/var/lib/docker/volumes」で管理されています。 ※Docker for Mac等、VM内でDockerが実行されている環境の場合は、当然ですがそのVMの中で管理されます。
退会済みユーザー

退会済みユーザー

2019/05/28 04:30

@xenbeatさん 返信が遅くなり申し訳ありません。 ご回答いただいた通りボリュームが対象のディレクトリで管理されていることを確認しました。 名前付きボリュームの使い方が理解できました。
guest

0

db-volumeを/var/lib/mysqlにマウントする、という事ですね。
docker volumeで調べてみるといいかと思います。

投稿2019/05/23 05:43

yoorwm

総合スコア1305

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/05/23 05:48

ご回答ありがとうございます。 db-volumeという名前のvolumeのマウント先として dbコンテナ内の/var/lib/mysqlを指定しているということでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.39%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問