それマグで!

知識はカップより、マグでゆっくり頂きます。 takuya_1stのブログ

習慣に早くから配慮した者は、 おそらく人生の実りも大きい。

docker のボリュームのサーバー間移動

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 プロセス停止してたら問題ない。