docker ボリュームをサーバ間で移動する
ただrsyncすれば問題なく動く。dockerコマンドは使いません。直接取り出せば大丈夫です。
ホスト側にログインする。docker の内部には一切ログインしない。
コマンド例
takuya$ ssh takuya@docker-host takuya@docker-host$ sudo rsync -av /var/lib/docker/volumes server:/var/lib/docker/volumes
/var/lib/docker/volumes のバックアップ
繰り返しになるが、docker コマンドは使いません。
/var/lib/docker/volumes
をホスト側でtgz で固めて移動させてもいい。
tar cvzf volumes.tgz /var/lib/docker/volumes
rsync -av volumes.tgz server:~
コンテナごとに取り出したり、execしてもいいけど、ホスト側から読み出して、まとめて持っていけるんですよね。
コンテナは停止が無難。
コンテナを停止してファイルを書き出しさせてからバックアップを取る。
データベースなどは、稼働中の移動は少しだけリスキー。コンテナ起動中に exec で取り出したり、docker cp で取り出したりだと危険がある。execしてもダイレクトにボリュームをrsyncしても同じことだともう。
単なるファイルしかおいてないのであれば、稼働中に取り出しても大丈夫だと思う。
ただし、docker が起動してたら書き込みタイミングでファイルが変わるかもしれないですけど。ディスクIOはきれいに制御されているはずなので、「ファイル」に対するアクセスだけなら問題ないと思う。ファイルをループバックでマウントしてたり常時開いて書き込んでいる状態の場合は万が一のことはあると思うが。docker プロセス停止してたら問題ない。