volumeという機能を利用して、データボリュームによるMySQLの永続化について説明します。
開発環境
macOS Mojava バージョン10.14
Docker Desktop Version 2.0.0.0-mac81 (29211)
関連ページ
volumeによるマウント機能によって、イメージやコンテナを削除してもデータを永続化することができます。つまり再度コンテナを作成しても以前に登録したデータを利用することが可能です。上記の関連ページでは下記コマンドによってMySQLコンテナを生成しましたが、すでにvolumeは作成されています。
1 |
docker container run --name mysql -e MYSQL_ROOT_PASSWORD=pass -p 3306:3306 -d mysql:5.7 |
上記コマンドの後にdocker volume lsでvolumeの一覧を見ることができます。「VOLUME NAME」がvolume名です。イメージやコンテナを削除しても、このvolumeは残っています。
1 2 3 |
docker volume ls DRIVER VOLUME NAME local 98d754887d5c6ece5e912d11019fd1899f87d31a36345cc9e048f5e035e80621 |
mysqlコンテナ(–nameのコンテナ名)内でデータベースやテーブルを生成した後に、そのコンテナを削除しても-vオプションにVOLUME NAMEを指定して再度コンテナを生成すれば、永続化されたデータを利用することが可能です。
1 |
docker container run --name mysql -v 98d754887d5c6ece5e912d11019fd1899f87d31a36345cc9e048f5e035e80621:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=pass -p 3306:3306 -d mysql:5.7 |
docker inspect [VOLUME NAME]で指定したvolumeの詳細を表示させることができます。
1 2 3 4 5 6 7 8 9 10 11 12 |
docker inspect 98d754887d5c6ece5e912d11019fd1899f87d31a36345cc9e048f5e035e80621 [ { "CreatedAt": "2018-12-31T02:25:43Z", "Driver": "local", "Labels": null, "Mountpoint": "/var/lib/docker/volumes/98d754887d5c6ece5e912d11019fd1899f87d31a36345cc9e048f5e035e80621/_data", "Name": "98d754887d5c6ece5e912d11019fd1899f87d31a36345cc9e048f5e035e80621", "Options": null, "Scope": "local" } ] |
コンテナ作成時に-vオプションでVOLUME NAMEを自分で設定することもできます。
1 |
docker container run --name mysql -v mydb:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=pass -p 3306:3306 -d mysql:5.7 |
上記の-v mydb:/var/lib/mysql において、mydbが新しく追加されたVOLUME NAMEとなります。/var/lib/mysql は作成されたコンテナ内のマウント先のパスとなり、ここにvolumeが割り当てられます(マウントされる)。
1 2 3 |
docker volume ls DRIVER VOLUME NAME local mydb |
イメージやコンテナを削除した後でも、再度下記コマンドのように-vオプションにvolumeを設定すれば永続化されたデータを利用することができます。
1 |
docker container run --name mysql -v mydb:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=pass -p 3306:3306 -d mysql:5.7 |
docker volume createによる作成
volumeは「docker volume create」であらかじめ作成しておくことも可能です。下記ではmyvolumeという名前のvolumeを作成しています。
1 |
docker volume create myvolume |
1 2 3 |
docker volume ls DRIVER VOLUME NAME local myvolume |
下記のように指定してコンテナを作成します。
1 |
docker container run --name mysql -v myvolume:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=pass -p 3306:3306 -d mysql:5.7 |
volumeの削除
今までの説明の通り、volumeはイメージやコンテナを削除してもどんどん蓄積されていきます。定期的に「docker volume rm」で削除しても良いVOLUME NAMEを指定して削除をおこないます。
1 |
docker volume rm myvolume |
現在使用していないvolumeを一括して削除することも可能です。
1 |
docker volume prune |
関連ページ
Data Volume Container について [Dockerの永続化]