LoginSignup
1
0

More than 3 years have passed since last update.

docker : Data Volumeの作成から削除まで

Last updated at Posted at 2020-06-25

Data Volumeとは

Dockerにおいてデータの永続化は気にしなかればならない問題です。
そこで使われるのが、Data Volumeです。Data VolumeはDockerコンテナ-ホスト間で直接ディレクトリを共有することで、データ永続化を実現する仕組みです。Data Volumeはコンテナを破棄してもホスト側に保持されることになります。

コンテナのデータ永続化手法としては、Data Volumeコンテナの手法が推奨されています。
こちらでは、コンテナ間でディレクトリを共有することになります。Data Volumeコンテナは、データのみを保持するためのコンテナで、ホスト側に保持された永続化データの一部をVolumeとして別のコンテナに共有できるようにしたものです。

Data VolumeコンテナのVolumeは、ホスト側の/var/lib/docker/volumes/(管理領域)以下に配置されます。

ボリューム作成

$ docker volume create --name <VOLUME NAME>

一覧表示

$ docker volume ls
DRIVER              VOLUME NAME
local               0a990e22051c0815c18cb10ae5eea84ce37db2e91e83c3e976d54646c466c249
...<omitted>...
local               mysql-data

マウント

$ docker run [options] -v {Host directory}:{Container directory} <Repository>[:tag] [Command] [Arguments]

# 例)
$ docker run -d --name mysql -p 3306:3306 -v mysql_data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=password mysql

削除

$ docker volume rm <VOLUME NAME>

全て削除

$ docker volume rm $(docker volume ls -qf dangling=true)

リンク切れのみ削除

$ docker volume ls -qf dangling=true | xargs -r docker volume rm
  • [Command A] | xargs [Command B] : コマンドAの実行結果を引数にしてコマンドBを実行
  • -r option : 標準入力(引き数)が空の場合はコマンドBを実行しない

データのエクスポート

Data Volumeコンテナで利用しているデータを他のコンテナで利用したい場合、一度データをエクスポートしたいとなるはずです。
Volumeデータをホスト側にエクスポートする方法を記載します。

$ docker container run -v $PWD:/tmp \
  --volumes-from mysql-data \
  busybox \
  tar cvzf /tmp/mysql-backup.tar.gz /var/lib/mysql

上記例では、以下のようなイメージです。

  • mysql-data(Data volumeコンテナ)の/var/lib/mysqlの中身をtar圧縮
  • 圧縮したファイルをbusyboxコンテナの/tmp以下にmysql-backup.tar.gzとして保存
  • busyboxコンテナの/tmpをHost側のカレントディレクトリにマウント

data_volume_export.png

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0