スポンサードリンク



こんにちは。sinyです。

本記事では、Docker入門者向けにdockerのData Volumeの使い方についてまとめました。

Data Volumeとは?

Dockerのコンテナ実行中に書き込まれたファイル等はホスト側にファイルやディレクトリをマウントしておかない限りコンテナを破棄した時点でデータが消失してしまいます。

例えば、データベースを利用している場合にコンテナ実行中に行われた変更内容が維持されないと困りますよね。

このように永続的にデータを保存しておきたい場合、データベース用のコンテナとは別にData Volumeコンテナという永続化専用のコンテナを用意する方法があります。

Data Volumeコンテナのポイント
  • Data Volumeコンテナのボリュームはホスト側の/var/lib/docker/volumes/配下に配置される。
  • Data Volumeコンテナを必要とするコンテナ(今回のケースではデータベース用のコンテナ)はホスト側のVolumeディレクトリがどこなのかということを知る必要がなく、Data Volumeコンテナ名を指定するだけでOK
  • Data Volumeコンテナとの結びつけはdocker run時に--volumes-fromオプションで指定する。

以下は、MySQLデータベースのコンテナを使用した場合にデータを永続的に保存するためにData Volumeコンテナを利用した場合の概要図です。

Data Volumeの利用方法

以下はMySQLを利用した場合にデータベースへの変更内容を永続的に保存するためにMySQLコンテナの他にData Volumeコンテナを使った場合の手順です。

DataVolume用のDockerfileの作成

今回はData Volume用のコンテナにbusyboxという軽量なLinuxOSを利用します。

以下のようなDockerfileを作ります。

FROMで元となるDockerイメージを指定します。(今回はbusybox)

VOLUMEに永続化したいボリュームを指定します(今回はMySQLのデータが格納されるディレクトリ)

CMDは bin/trueとしています。(単に正常終了するようなコード)

Data Volumeコンテナ用イメージを作成

docker imageコマンドで先ほど作成したDockerfileを使ってData Volume用のDockerイメージを作成します。
コマンド実行後にdicker imagesでイメージが作成されていることを確認しましょう。

 

Data Volumeコンテナの実行

続いて、先ほど作成したData Volume用イメージを使ってコンテナを起動します。

ここでは、 --nameオプションでコンテナ名「mysql-data」を指定してDockerイメージ「siny/mysql-data」を元にData Volume用のコンテナを起動しています。

 コンテナ名がかぶっている場合はエラーになるためdocker rm <コンテナ名>で削除しておきましょう。

 

データベース用コンテナ(MySQL)の実行

最後にMySQLコンテナを実行します。

docker coitaner runコマンド実行時に--volumes-fromで先ほど起動したData Volume用のコンテナ名(mysql-data)を指定することで、MySQLのコンテナに/var/lib/mysqlのデータが保存されるようになります。

 

docker psで確認するとMySQL用のコンテナ(mysql)が起動していることが確認できます。

 

MySQLに接続してデータを更新

それでは、docker container execコマンドを使ってMySQLコンテナに接続してテスト用にテーブルを作成してみます。

 

mysqlのプロンプト画面がでるので、以下のコードを実行してテスト用にuserテーブルを作成してみます。

テーブルを作っただけなのでレコードは0件です。

テスト用に2件ほどデータを追加します。

2件データが登録されました。

ここで、MySQLコンテナを停止します。

続いて、先ほどと同じdocker cointaner runコマンドでMySQLコンテナを再度起動します。

さらにdocker container execで再度MySQLコンテナに接続してselect * from user;を実行して先ほど作ったuserテーブルのレコードが存在していることを確認します。

 

上記の通り、MySQLコンテナを停止、起動してもデータベースのデータが永続的に保持できていることが確認できます。

以上、Data Volumeコンテナの利用方法まとめ【入門者向け】でした。

おすすめの記事