ボリュームと所有権について質問があります。
例として、私はこの画像を使用しています: 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ボリュームをバックアップおよび復元する適切な方法ですか?
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