Edited at

Dockerデータ専用コンテナを活用してバックアップとリストアを実現

Dockerでは、データ専用のコンテナを作成することができます。

本投稿では以下の図のようにデータの可搬性向上のために、データ専用コンテナを活用し、以下の処理を実現します。


実現する処理とイメージ

DockerDataContainer.png


処理


  • 通常のコンテナ c0004 からデータコンテナ d0001 のファイルを参照

  • d0001のファイルをホストOSにバックアップ

  • ホストOSにバックアップしたファイルをリスト用コンテナ c0005 でリストア


1.busyboxイメージの入手

Dockerでは、データ専用コンテナを作成するためには、通常のOSイメージではなく busybox と呼ばれるイメージを利用します。

busyboxは必要最低限のシェル環境を提供する場合によく利用されます。


shell

$ docker image pull busybox:latest

latest: Pulling from library/busybox
53071b97a884: Pull complete
Digest: sha256:4b6ad3a68d34da29bf7c8ccb5d355ba8b4babcad1f99798204e7abb43e54ee3d
Status: Downloaded newer image for busybox:latest


2. データ専用コンテナの生成

busyboxのイメージを活用してデータ専用コンテナ d0001 を生成します。


shell

$ docker container run -it -v /data0001 --name d0001 busybox /bin/sh

/ # pwd
/
/ #


3. テスト用ファイルの作成

d001のコンテナの /data0001/ ディレクトリ配下にテストファイルを作成します。


shell

$ docker attach d0001

/ # ls -a /data0001/
. ..
/ # echo "Hello data container" > /data0001/datafile01.txt
/ # cat /data0001/datafile01.txt
Hello data container
/ #


4. 別コンテナからテスト用ファイルを参照

centos 7.5 イメージ生成した通常のコンテナからデータ専用コンテナ d0001 のテスト用ファイルが参照可能なことを確認します。


shell

$ docker container run -it --volumes-from d0001 --name c0004 -h 0004 centos:7.5.1804 /bin/bash

[root@0004 /]# cat /data0001/datafile01.txt
Hello data container
[root@0004 /]#


5. データ専用コンテナを活用してボリュームのバックアップ

busybox と tar コマンドを組み合わせることでデータ専用コンテナに保管されているデータをホストOS上にバックアップすることができます。

以下は、上記手順3で作成したテストファイルをホストOSのディレクトリにバックアップとして保存するバックアップの実行コマンドの例です。

run --rm コマンドでコンテナを起動することによりホストOSへのバックアップ終了後にコンテナが自動的に削除されます。


shell

$ mkdir hostdir

$ docker container run --rm --volumes-from d0001 -v /${host-os-dir}/hostdir:/ctdir busybox:latest tar cvf /ctdir/backup.tar /data0001
tar: removing leading '/' from member names
data0001/
data0001/datafile01.txt
$ ls hostdir # ホストOS上にバックアップとして保存されているのを確認します。
backup.tar
$ tar tf hostdir/backup.tar
data0001/
data0001/datafile01.txt


6. ホストOSにバックアップしたデータを別コンテナにリストア

手順5でホストOS上にバックアップしたデータを別のコンテナにリストアします。


リストア先コンテナの生成


shell

$ docker container run -it -v /data0001 --name c0005 -h c0005 centos:7.5.1804 /bin/bash

[root@c0005 /]# ls -l /data0001/
total 0
[root@c0005 /]#
$ docker container run -it -v /data --name c0005 -h c0005 centos:7.5.1804 /bin/bash


リストアの実行と確認


shell

$ docker container run --rm --volumes-from c0005 -v /${host-os-dir}/hostdir:/ctdir busybox:latest tar xvf /ctdir/backup.tar -C /

data0001/
data0001/datafile01.txt
$ docker container attach c0005
[root@c0005 /]# cat /data0001/datafile01.txt
Hello data container
[root@c0005 /]#


参考文献


  1. 古賀政純, "Docker実践ガイド 第2版", pp.112-117 (2019).

  2. busybox _ Docker Documentation, https://docs.docker.com/samples/library/busybox/, Online; accessed 8-June-2019.