web-dev-qa-db-ja.com

ボリュームという名前のDockerをバックアップおよび復元します

ボリュームと所有権について質問があります。

例として、私はこの画像を使用しています: privatebin ですが、これはどの場合でも同じです。

最初にボリュームを作成しています:

$ docker volume create privatebin-data

Docker inspectから、データがどこにあるかを確認できます。

$ docker inspect privatebin-data 
[
    {
        "CreatedAt": "2018-12-04T21:42:46+01:00",
        "Driver": "local",
        "Labels": {},
        "Mountpoint": "/var/lib/docker/volumes/privatebin-data/_data",
        "Name": "privatebin-data",
        "Options": {},
        "Scope": "local"
    }
]

Docker Hubからの指示に従って、イメージを開始します。

$ docker run -d --restart="always" --read-only -p 8080:80 -v privatebin-data:/srv/data privatebin/nginx-fpm-Alpine:1.1.1

次に、 http:// localhost:808 にアクセスすると、すべてが期待どおりに機能しています。

現在のボリュームの内容:

$ ls -l /var/lib/docker/volumes/privatebin-data/_data
total 16
drwx------ 3 82 82 4096 Dec  4 21:49 73
-rw-r----- 1 82 82   46 Dec  4 21:49 purge_limiter.php
-rw-r----- 1 82 82  529 Dec  4 21:49 salt.php
-rw-r----- 1 82 82  131 Dec  4 21:49 traffic_limiter.php

ディレクトリをアーカイブしてバックアップしたい:

tar -C /var/lib/docker/volumes/privatebin-data -czf privatebin-data-backup.tar.gz _data

私の質問は次のとおりです。たとえば、他のサーバーでイメージを再起動した場合、ユーザーとグループの所有者は82のままであると安全に想定できますか?これは、Dockerボリュームをバックアップおよび復元する適切な方法ですか?

6
Robert Maguda

UID/GIDは、画像内のprivatebin/nginx-fpm-Alpineから取得されます。そこに同じ方法/順序でユーザーを作成し、ベースイメージに何も変更がない限り、イメージを実行する場所に関係なく、それらのIDは同じになります。

ボリュームをバックアップおよび復元するための私の好ましい方法は、Dockerのバックエンドが変更された場合、または名前付きボリュームを別の場所または外部データストアに移動する場合に備えて、ユーティリティコンテナーを使用することです。これを行うためのコマンドは次のようになります。

docker run --rm \
  -v privatebin-data:/source:ro \
  busybox tar -czC /source . >privatebin-data-backup.tar.gz

そして

docker run --rm -i \
  -v privatebin-data:/target \
  busybox tar -xzC /target <privatebin-data-backup.tar.gz
6
BMitch