Dockerの永続化について説明します。
コンテナ内で作成されたデータは、そのコンテナ自体を削除すると消えてしまいます。そこでそのデータを保存し、他のコンテナからも利用できるようにするがデータの永続化です。
本記事では、データボリューム(Data Volume)とデータボリューム・コンテナ(Data Volume Container )による永続化をおこなってみます。
データボリューム(Data Volume)
まず「docker volume create」コマンドでデータボリュームを作成します。下記ではtestvolumeという名前のデータボリュームを作成しています。
1 |
docker volume create testvolume |
作成したデータボリュームの一覧は「docker volume ls」で表示させることができます。
1 2 3 4 |
docker volume ls DRIVER VOLUME NAME local testvolume |
作成した「testvolume」にデータを永続化していくコンテナを作成します。今回はubuntuイメージを元にコンテナを作成しています。
1 |
docker run -it -v testvolume:/tmp/ ubuntu /bin/bash |
-vオプションにおいて、作成したボリュームとコンテナ内のディレクトリを結び付け(マウント)ています。これでコンテナ内のtmpディレクトリ内のデータが永続化されます。※はじめに「docker volume create」でデータボリュームを作成しましたが、-vオプションで名前を指定すればデータボリュームは同時に作成されます。
上記コマンドでコンテナ内(CONTAINER IDが917361e5a050)に入っている状態となるので、tmpディレクトリ内に適当なファイルを作成してみます。下記では実際にtmpディレクトリ内にsample.txtというファイルを作成しています。exitでコンテナを終了させます。
1 2 3 4 5 |
root@917361e5a050:/# cd tmp root@917361e5a050:/tmp# touch sample.txt root@917361e5a050:/tmp# ls sample.txt root@917361e5a050:/tmp# exit |
次にこの「testvolume」をマウントした別のコンテナを作成してみます。
1 2 3 4 5 |
docker run -it -v testvolume:/tmp/ ubuntu /bin/bash root@2a324d4a665f:/# cd tmp root@2a324d4a665f:/tmp# ls sample.txt |
CONTAINER IDが2a324d4a665fであるコンテナが生成されました。実際にtmpディレクトリに移動してみると永続化されているsample.txtを確認することができます。はじめに作成したコンテナを削除しても、このtestvolumeを削除しない限り永続化されたデータは残ります。
データボリューム・コンテナ(Data Volume Container )
「データボリューム・コンテナ」による方法は、データボリュームとマウントしているコンテナ(データボリューム・コンテナと呼ぶ)から新たにコンテナを作成する方法です。
記事はじめに作成したデータボリューム・コンテナ(CONTAINER IDが917361e5a050)から、新たにコンテナを作成してみます。
1 |
docker run --volumes-from 917361e5a050 -it ubuntu /bin/bash |
–volumes-fromオプションにデータボリューム・コンテナのCONTAINER IDもしくはNAMESを指定します。
上記コマンドでコンテナ内に入っている状態となるので、実際にtmpディレクトリに移動してみると永続化されているsample.txtを確認することができます。
1 2 3 |
root@c917b650958c:/# cd tmp root@c917b650958c:/tmp# ls sample.txt |
データボリューム(Data Volume)の削除
「docker volume rm」で削除したいVOLUME NAMEを指定、一括で削除したい場合は「docker volume prune」を利用します。いずれもそのボリュームを利用しているコンテナが無い状態で削除できます。
1 |
docker volume rm testvolume |
1 |
docker volume prune |
※ホスト側のディレクトリ自体を共有してデータを永続化する方法は下記のページをご覧下さい。
関連ページ
Docker-MySQLのデータボリュームによる永続化[volume]