データボリュームを含むDockerコンテナーをバックアップするにはどうすればよいですか?


152

私はこのDockerイメージのtutum / wordpressを使用して、Wordpress Webサイトをデモしています。最近、イメージがMySQLデータのボリュームを使用していることがわかりました。

だから問題はこれです:コンテナーをバックアップおよび復元したい場合、イメージをコミットしてから、後でコンテナーを削除し、コミットしたイメージから新しいコンテナーを作成することができます。しかし、それを行うと、ボリュームが削除され、すべてのデータが失われます。

コンテナーとそのボリュームデータをバックアップする簡単な方法がいくつかあるはずですが、どこにも見つかりません。


名前付きおよび名前なしのボリューム、イメージ、構成、ログ、コンテナールートファイルシステム、データベースなどを含む、Dockerプロジェクトのすべてを完全にバックアップする私が作成したこのスクリプトを確認してください:docker-compose-backup.sh
Nick Sweeting

回答:


141

コンテナーを元に戻したい場合は、イメージをコミットしてから、後でコンテナーを削除し、コミットしたイメージから新しいコンテナーを作成できます。しかし、その場合、ボリュームが削除され、すべてのデータが失われます

Dockerユーザーガイドで説明されているように、データボリュームは、コンテナーファイルシステムの外部でデータを永続化するためのものです。これにより、複数のコンテナー間でのデータの共有も容易になります。

Dockerがボリューム内のデータを削除することは決してありませんが(で関連付けられたコンテナーを削除しない限りdocker rm -v)、Dockerコンテナーによって参照されていないボリュームは、ダングリングボリュームと呼ばれます。それらのぶら下がっているボリュームは、取り除くのが難しく、アクセスするのが困難です。

これは、ボリュームを使用している最後のコンテナーが削除されるとすぐに、データボリュームがぶら下がり、そのコンテンツにアクセスするのが困難になることを意味します。

これらのぶら下がっているボリュームを防ぐための秘訣は、残したいデータボリュームを使用して追加のDockerコンテナーを作成することです。そのため、常に少なくともボリュームを参照するそのDockerコンテナが存在します。このようにして、そのデータボリュームコンテンツへのアクセスの容易さを失うことなく、wordpressアプリを実行しているDockerコンテナーを削除できます。

このようなコンテナーは、データボリュームコンテナーと呼ばれます

コンテナーとボリュームデータをバックアップする簡単な方法がいくつかあるはずですが、どこにも見つかりません。

バックアップDockerイメージ

dockerイメージをバックアップするには、後でdocker loadコマンドを使用して新しいdockerイメージを作成するために使用できるtarアーカイブを生成するdocker saveコマンドを使用します。

バックアップDockerコンテナー

あなたはさまざまな方法でDockerコンテナをバックアップできます

  • docker commitコマンドを使用して、dockerコンテナーの現在の状態に基づいて新しいdockerイメージをコミットする
  • docker exportコマンドを使用して、dockerコンテナーファイルシステムをtarアーカイブとしてエクスポートする。後でdocker importコマンドを使用して、そのtarアーカイブから新しいdockerイメージを作成できます。

これらのコマンドは、Dockerコンテナーの階層化ファイルシステムのみをバックアップすることに注意してください。これにはデータ量は含まれません

バックアップDockerデータボリューム

データボリュームをバックアップするには、バックアップするボリュームを使用して新しいコンテナーを実行し、tarコマンドを実行して、Dockerユーザーガイドで説明されているようにボリュームコンテンツのアーカイブを作成します。

特定のケースでは、データボリュームはMySQLサーバーのデータを格納するために使用されます。したがって、このボリュームのtarアーカイブをエクスポートする場合は、最初にMySQLサーバーを停止する必要があります。そのためには、ワードプレスコンテナーを停止する必要があります。

MySQLデータのバックアップ

もう1つの方法は、MySQLサーバーにリモートで接続して、mysqldumpコマンドでデータベースダンプを生成することです。ただし、これが機能するためには、リモート接続を受け入れるようにMySQLサーバーを構成し、リモート接続を許可されているユーザーが必要です。これは、使用しているワードプレスDockerイメージには当てはまらない場合があります。


編集する

Dockerは最近、ボリュームの処理をベンダーによって実装されたプラグインに委任できるDockerボリュームプラグインを導入しました。

docker runコマンドはのための新たな振る舞いがある-vオプションを選択します。ボリューム名を渡すことができるようになりました。この方法で作成されたボリュームには名前付けられ、後で簡単に参照できるため、ダブリングボリュームの問題が緩和されます。

編集2

Dockerは、docker volume pruneすべてのダングリングボリュームを簡単に削除するコマンドを導入しました。


34
実は、動かしやすいコンテナを作ることに興味がありますが、動かせないコンテナのポイントがわかりません。
pguardiario 2014年

その場合は次のような助けがあなたのためにドッカーデータ量を管理することのツール、見なければならないFlocker
Thomasleveil

9
Dockerはデータボリュームを自動的に削除しません。 Data volumes are designed to persist data, independent of the container’s life cycle. Docker therefore never automatically delete volumes when you remove a container, nor will it “garbage collect” volumes that are no longer referenced by a container. したがって、データのみのコンテナはレガシーです
Andrii Zarubin

2
のリモート接続は必要ありませんmysqldump。コンテナーにシェルを入れてダンプし、それをでコピーしdocker cpます。
jiggunjer

@AndriiZarubin re:data only container obsolete?全然。データのみのコンテナはにあなたにコンテナを与えdocker exec data-container tar -czf snapshot.tgz /data、その後docker cp data-container:snapshot.tgz ./snapshot.tgzなど。コンテナの寿命を延ばしたい場合tail -f /dev/nullは、最小限のリソースを使用して、そのコマンドを決して終了しないようにします。
ジェシーチザム

31

アップデート2

未加工の単一ボリュームバックアップbashスクリプト:

#!/bin/bash
# This script allows you to backup a single volume from a container
# Data in given volume is saved in the current directory in a tar archive.
CONTAINER_NAME=$1
VOLUME_NAME=$2

usage() {
  echo "Usage: $0 [container name] [volume name]"
  exit 1
}

if [ -z $CONTAINER_NAME ]
then
  echo "Error: missing container name parameter."
  usage
fi

if [ -z $VOLUME_NAME ]
then
  echo "Error: missing volume name parameter."
  usage
fi

sudo docker run --rm --volumes-from $CONTAINER_NAME -v $(pwd):/backup busybox tar cvf /backup/backup.tar $VOLUME_NAME

raw単一ボリューム復元bashスクリプト:

#!/bin/bash
# This script allows you to restore a single volume from a container
# Data in restored in volume with same backupped path
NEW_CONTAINER_NAME=$1

usage() {
  echo "Usage: $0 [container name]"
  exit 1
}

if [ -z $NEW_CONTAINER_NAME ]
then
  echo "Error: missing container name parameter."
  usage
fi

sudo docker run --rm --volumes-from $NEW_CONTAINER_NAME -v $(pwd):/backup busybox tar xvf /backup/backup.tar

使用法は次のようになります。

$ volume_backup.sh old_container /srv/www
$ sudo docker stop old_container && sudo docker rm old_container
$ sudo docker run -d --name new_container myrepo/new_container
$ volume_restore.sh new_container

前提条件は次のとおりです。バックアップファイルはbackup.tarという名前で、バックアップおよび復元スクリプトと同じディレクトリにあり、ボリューム名はコンテナ間で同じです。

更新

コンテナーからボリュームをバックアップすることは、データコンテナーからボリュームをバックアップすることと同じです。

ボリュームはコンテナにリンクされたパスに他ならないので、プロセスは同じです。

docker-backupが同じコンテナーボリュームでも機能するかどうかはわかりませんが、以下を使用できます。

sudo docker run --rm --volumes-from yourcontainer -v $(pwd):/backup busybox tar cvf /backup/backup.tar /data

そして:

sudo docker run --rm --volumes-from yournewcontainer -v $(pwd):/backup busybox tar xvf /backup/backup.tar

更新を終了

Dockerボリュームコンテナーをバックアップおよび復元できる、この便利なツールがあります。

https://github.com/discordianfish/docker-backup

次のようないくつかのコンテナーボリュームにリンクされているコンテナーがある場合:

$ docker run --volumes-from=my-data-container --name my-server ...

次のようにすべてのボリュームをバックアップできます。

$ docker-backup store my-server-backup.tar my-server

次のように復元します:

$ docker-backup restore my-server-backup.tar

または、公式の方法に従うことができます:

あるホストから別のホストにデータ専用ボリュームを移植するにはどうすればよいですか?


いいえ、「-volumes-from」の状況ではなく、ボリュームがdockerfileで定義されているため、データが保持されません。あなたがdockerfileを見ればtutum /ランプあなたは私が何を意味するかが表示されます。
pguardiario 2014年

ボリュームがボリュームがあり、コンテナがコンテナであるあなたは、ボリュームの観点からデータコンテナのような容器を使用する場合は差がないので、私はすでに与えた答えは、ボリュームの任意の種類に適しています
tommasop

dockerfileで定義されているボリュームは、コンテナーが破棄されると破棄されます。そのため、コンテナーを移動したときにそのデータを取得する方法はありません。
pguardiario 2014年

コンテナーを移動する前にデータを取得し、コンテナーを再起動してデータを戻す必要があります
tommasop

1
エラーが表示さunknown shorthand flag: 'r' in -rm.れます--rm。(Dockerバージョン18.09.5、ビルドe8ff056)
kuga

22

マウントされたボリュームのみをバックアップする必要がある場合は、Dockerhostからフォルダーをコピーするだけです

注:Ubuntuを使用している場合、Dockerhostがローカルマシンです。Macを使用している場合は、Dockerhostが仮想マシンです。

Ubuntuの場合

ここにボリュームのあるすべてのフォルダーを見つけることができます:フォルダーを/var/lib/docker/volumes/コピーして、どこにでもアーカイブできます。

MAC上

Ubuntuほど簡単ではありません。VMからファイルをコピーする必要があります。

次に、ボリュームが含まれるすべてのフォルダーを仮想マシン(Dockerサーバーが実行されている場所)からローカルマシンにコピーする方法のスクリプトを示します。docker-machine VMがdefaultという名前であると仮定します。

docker-machine ssh default sudo cp -v -R /var/lib/docker/volumes/ /home/docker/volumes

docker-machine ssh default sudo chmod -R 777 /home/docker/volumes

docker-machine scp -R default:/home/docker/volumes ./backup_volumes

docker-machine ssh default sudo rm -r /home/docker/volumes

現在のディレクトリに./backup_volumesフォルダーを作成し、すべてのボリュームをこのフォルダーにコピーします。

保存されたすべてのボリュームをローカルディレクトリ(./backup_volumes)からDockerhostマシンにコピーする方法のスクリプトを次に示します

docker-machine scp -r ./backup_volumes default:/home/docker

docker-machine ssh default sudo mv -f /home/docker/backup_volumes /home/docker/volumes

docker-machine ssh default sudo chmod -R 777 /home/docker/volumes

docker-machine ssh default sudo cp -v -R /home/docker/volumes /var/lib/docker/

docker-machine ssh default sudo rm -r /home/docker/volumes

これで、次の方法で機能するかどうかを確認できます。

docker volume ls

/var/lib/docker/volumesUbuntu でそのフォルダーのバックアップを作成するためにコンテナーをシャットダウンする必要がありますか?
2016

2
必要はありません。そのフォルダはいつでもコピーできます。
Andrii Dvoiak

4
技術的には可能ですが、コピーは非アトミックであり、ボリュームへの同時書き込みが発生する可能性があるため、データ破損の問題にさらされています。最初にコンテナを停止したいのですが。
アレッサンドロS.

13

ボリューム名がであるとしましょうdata_volume。次のコマンドを使用して、という名前のDockerイメージとの間でボリュームをバックアップおよび復元できますdata_image

バックアップするには:

docker run --rm --mount source=data_volume,destination=/data alpine tar -c -f- data | docker run -i --name data_container alpine tar -x -f-
docker container commit data_container data_image
docker rm data_container

復元するには:

docker run --rm data_image tar -c -f- data | docker run -i --rm --mount source=data_volume,destination=/data alpine tar -x -f-

これはリアルタイムのバックアップですか?
カンアンドリュー

2
同じボリュームを複数のDockerにマウントできるため、これはリアルタイムバックアップです。例えば。Mysqlコンテナーにマウントされたボリュームをバックアップできます(データの破損がない場合)。しかし、データの破損を恐れてサービスを停止する必要がある場合、これはリアルタイムではありません。
Sahil Ahuja

9

私はこれが古いことを知っていますが、データコンテナーを(バックアップとして)Dockerハブにプッシュするための十分に文書化されたソリューションがないことを理解しています。その方法の簡単な例をhttps://dzone.com/articles/docker-backup-your-data-volumes-to-docker-hubに公開しました

以下は一番下の行です

Dockerチュートリアルでは、データボリュームをローカルでバックアップおよび復元することをお勧めしています。この手法を使用し、このバックアップをDockerハブにプッシュするために数行追加して、希望する任意の場所に後で簡単に復元できるようにします。それでは、始めましょう。これらは従うべきステップです:

data-container-to-backupという名前のデータコンテナーからデータボリュームをバックアップします。

docker run --rm --volumes-from data-container-backup --name tmp-backup -v $(pwd):/backup ubuntu tar cvf /backup/backup.tar /folderToBackup

このtarファイルを新しいコンテナに展開して、イメージの一部としてコミットできるようにします

docker run -d -v $(pwd):/backup --name data-backup ubuntu /bin/sh -c "cd / && tar xvf /backup/backup.tar"

目的のタグ($ VERSION)を使用して画像をコミットおよびプッシュします

docker commit data-backup repo/data-backup:$VERSION
docker push repo/data-backup:$VERSION

最後に、クリーンアップしましょう

docker rm data-backup
docker rmi $(docker images -f "dangling=true" -q)

これで、repoにdata-backupという名前のイメージが作成されました。これは、バックアップファイルとフォルダーを含むファイルシステムです。このイメージ(バックアップからの復元)を使用するには、次のようにします。

データバックアップイメージでデータコンテナを実行します

run -v /folderToBackup --entrypoint "bin/sh" --name data-container repo/data-backup:${VERSION}

データコンテナーのボリュームを使用してwhatEverイメージを実行する

docker run --volumes-from=data-container repo/whatEver

それでおしまい。

この回避策に関するドキュメントがないことに驚きました。これが役に立てば幸いです。これについて考えるのにしばらく時間がかかったことを知っています。


8

プロジェクトでdocker-composeを使用している場合、ボリュームをバックアップおよび復元するためのアプローチを次に示します。

docker-compose.yml

基本的に、docker-compose.ymlファイルにサービスを追加db-backupdb-restore、ボリュームの名前に合わせて調整します。dbdataこの例では、ボリュームに名前が付けられています。

version: "3"

services:
  db:
    image: percona:5.7
    volumes:
      - dbdata:/var/lib/mysql

  db-backup:
    image: alpine    
    tty: false
    environment:
      - TARGET=dbdata
    volumes:
      - ./backup:/backup
      - dbdata:/volume
    command: sh -c "tar -cjf /backup/$${TARGET}.tar.bz2 -C /volume ./"

  db-restore:
    image: alpine    
    environment:
      - SOURCE=dbdata
    volumes:
      - ./backup:/backup
      - dbdata:/volume
    command: sh -c "rm -rf /volume/* /volume/..?* /volume/.[!.]* ; tar -C /volume/ -xjf /backup/$${SOURCE}.tar.bz2"

腐敗を避ける

データの整合性を保つため、バックアップまたは復元する前にdbコンテナーを停止してください

docker-compose stop db

バックアップ

デフォルトの宛先(backup/dbdata.tar.bz2)にバックアップするには:

docker-compose run --rm db-backup

または、代替ターゲット名を指定する場合は、次のようにします。

docker-compose run --rm -e TARGET=mybackup db-backup

復元しています

から復元するにはbackup/dbdata.tar.bz2、次のようにします。

docker-compose run --rm db-restore

または、次を使用して特定のファイルから復元します。

docker-compose run --rm -e SOURCE=mybackup db-restore

このアプローチを作成するために、https://loomchild.net/2017/03/26/backup-restore-docker-named-volumes/のコマンドを調整しました。


5

次のコマンドは、すべての名前付きデータボリュームがマウントされたコンテナーでtarを実行し、出力をファイルにリダイレクトします。

docker run --rm `docker volume list -q | egrep -v '^.{64}$' | awk '{print "-v " $1 ":/mnt/" $1}'` alpine tar -C /mnt -cj . > data-volumes.tar.bz2

問題が発生した場合に備えて、生成されたアーカイブを必ずテストしてください。

tar -tjf data-volumes.tar.bz2

4

アーカイブへの単純なバックアップが必要な場合は、私の小さなユーティリティを試してくださいhttps : //github.com/loomchild/volume-backup

バックアップ:

docker run -v some_volume:/volume -v /tmp:/backup --rm loomchild/volume-backup backup archive1

名前のボリュームアーカイブしますsome_volumeへの/tmp/archive1.tar.bz2アーカイブファイルアーカイブします

戻す:

docker run -v some_volume:/volume -v /tmp:/backup --rm loomchild/volume-backup restore archive1

アーカイブファイルから指定されたボリュームをワイプして復元します。some_volume/tmp/archive1.tar.bz2

詳細:https : //medium.com/@loomchild/backup-restore-docker-named-volumes-350397b8e362


私は同様のツールgithub.com/01e9/docker-backupを作成しましたバックアップアーカイブを作成してResilio同期ディレクトリに追加します
Oleg

2

データとmysqlコンテナーのバックアップを調整および起動するためのツール、単にdocker-backupを作成しましたDockerハブにはすぐに使用できるイメージさえありますます。

それは主にオーケストレーションであるため、主にバッシュで書かれています。duplicity実際のバックアップエンジンに使用します。現在、FTP(S)およびAmazon S3にバックアップできます。

設定は非常に簡単です。何をどこにバックアップするかを記述した設定ファイルをYAMLで書いてください。

データコンテナーの場合は、コンテナーで共有されているボリュームを自動的にマウントしてバックアップし、処理します。mysqlコンテナーの場合、それらをリンクし、コンテナーにバンドルされているmysqldumpを実行して結果を処理します。

私が最近書いたのは、最新のdocker-engineリリースでは最新ではないDocker-Cloudを使用していることと、アプリケーションコンテナー内にバックアッププロセスを含めないことでDockerの方法を取り入れたかったためです。


2

完全なバックアップが必要な場合は、いくつかの手順を実行する必要があります。

  1. コンテナを画像にコミットする
  2. 画像を保存
  3. コンテナーにボリュームのマウントポイントのtarファイルを作成して、コンテナーのボリュームをバックアップします。
  4. データベースコンテナについても手順1〜3を繰り返します。

イメージへのコンテナーのDockerコミットのみを実行しても、コンテナーに接続されているボリュームは含まれないことに注意してください(参照:Docker commit documentation)。

コミット操作には、コンテナ内にマウントされたボリュームに含まれるデータは含まれません。


1

コマンドラインから難解なオペレーターを入力したい場合は、これらの手動コンテナーバックアップテクニックが気に入るはずです。コンテナをバックアップするのに同じくらい効果的な、より高速で効率的な方法があることに留意してください。ここに手順を書いています:https : //www.morpheusdata.com/blog/2017-03-02-how-to-create-a-docker-backup-with-morpheus

ステップ1:任意のクラウドにDockerホストを追加する Morpheusサポートサイトのチュートリアルで説明されているように、Dockerホストを選択したクラウドに数秒で追加できます。まず、Morpheusのメインナビゲーションバーで[インフラストラクチャ]を選択します。[インフラストラクチャ]ウィンドウの上部で[ホスト]を選択し、右上の[+コンテナホスト]ボタンをクリックします。

Morpheusを介してDockerホストをクラウドにバックアップするには、[インフラストラクチャ]画面に移動し、[+ Container Hosts]メニューを開きます。

メニューでコンテナホストタイプを選択し、グループを選択して、名前、説明、表示、クラウドの選択、タグの入力(オプション)の5つのフィールドにデータを入力します。[次へ]をクリックし、サービスプランを選択してホストオプションを構成します。[ボリューム]、[メモリ]、[CPUカウント]フィールドは、選択したプランでカスタムオプションが有効になっている場合にのみ表示されることに注意してください。

ここでは、ボリュームの追加とサイズ設定、メモリサイズとCPU数の設定、ネットワークの選択を行います。OSのユーザー名とパスワード、ドメイン名、およびホスト名を構成することもできます。デフォルトでは、以前に入力したコンテナー名です。(次へ)をクリックして、オートメーションワークフロー(オプション)を追加します。最後に、設定を確認し、(完了)をクリックして保存します。

ステップ2:パブリックまたはプライベートクラウドへのDockerレジストリ統合の追加 Adam Hicksが別のMorpheusチュートリアルで、プライベートDockerレジストリとの統合がいかに簡単であるかを説明しています。(Morpheusを使用して、パブリックDocker APIを使用するDockerのパブリックハブでイメージをプロビジョニングするために追加の構成は必要ありません。)

メインナビゲーションバーの[管理]タブで[統合]を選択し、画面の右側にある[+新しい統合]ボタンを選択します。表示される統合ウィンドウで、タイプドロップダウンメニューからDockerリポジトリを選択し、名前を入力してプライベートレジストリAPIエンドポイントを追加します。使用しているレジストリのユーザー名とパスワードを入力し、[変更を保存]ボタンをクリックします。

Morpheusの[新しい統合]ダイアログボックスを使用して、Dockerレジストリをプライベートクラウドと統合します。

作成した統合をプロビジョニングするには、[インスタンスの作成]ダイアログの[タイプ]で[Docker]を選択し、[構成]タブの[Dockerレジストリ]ドロップダウンメニューでレジストリを選択して、他のDockerコンテナーと同じようにプロビジョニングを続行します。

ステップ3:バックアップを管理 するDockerホストを追加してレジストリを統合すると、プロビジョニングするインスタンスごとにバックアップが自動的に構成および実行されます。Morpheusサポートは、バックアップの表示、インスタンスバックアップの作成、およびサーバーバックアップの作成の手順を提供します。


0

あなたが私のと同じくらい簡単なケースがある場合は、次のことができます:

  1. コンテナーの基本イメージを拡張するDockerfileを作成する
  2. 私はあなたのボリュームがあなたのファイルシステムにマッピングされていると仮定しているので、あなたはそれらのファイル/フォルダーをあなたのイメージに追加することができます ADD folder destination
  3. できた!

たとえば、ホームディレクトリにあるボリュームのデータがあるとすると、たとえば/home/mydata次のように実行できます。

DOCKERFILE=/home/dockerfile.bk-myimage
docker build --rm --no-cache -t $IMAGENAME:$TAG -f $DOCKERFILE /home/pirate

DOCKERFILEが次のようなファイルを指す場合:

FROM user/myimage
MAINTAINER Danielo Rodríguez Rivero <example@gmail.com>

WORKDIR /opt/data
ADD mydata .

残りのものはベースイメージから継承されます。これで、そのイメージをDockerクラウドにプッシュできるようになり、ユーザーはコンテナーで直接データを利用できるようになります


最終的にイメージにベイクするだけの場合、ボリュームを使用する意味は何ですか。
jiggunjer

ボリュームがある@jiggunjerを使用すると、コンテナー内のデータを上書きできます
Danielo515

を使用して、ボリュームなしでもデータを上書きできますdocker cp
jiggunjer

0

問題:データボリュームが含まれているイメージコンテナーをバックアップしたいが、このオプションはすぐに使えるものではありません。ボリュームパスをコピーしてDockerイメージをバックアップし、Dockerイメージをバックアップして、再ロードしてリンクします。一緒に。しかし、この解決策は不器用で、持続可能で保守可能ではないようです-このフローを毎回行うcronジョブを作成する必要があります。

解決策dockup -Dockerイメージを使用してDockerコンテナーボリュームをバックアップし、それをs3にアップロードします(Docker + Backup = dockup)。dockupはAWS認証情報を使用して、環境変数ごとに名前が付けられた新しいバケットを作成し、構成されたボリュームを取得し、tarball、gzip、タイムスタンプが付けられ、S3バケットにアップロードされます。

手順

  1. を構成し、docker-compose.ymlそれにenv.txt構成ファイルを添付します。データは専用の保護されたs3バケットにアップロードされ、DRPの実行時に再ロードできるようになります。構成するボリュームのパスを確認して実行docker inspect <service-name>し、ボリュームを見つけるには:

"ボリューム":{"/ etc / service-example":{}、 "/ service-example":{}}、

  1. 構成ファイルの内容を編集env.txtし、プロジェクトパスに配置します。

    AWS_ACCESS_KEY_ID=<key_here>
    AWS_SECRET_ACCESS_KEY=<secret_here>
    AWS_DEFAULT_REGION=us-east-1
    BACKUP_NAME=service-backup
    PATHS_TO_BACKUP=/etc/service-example /service-example
    S3_BUCKET_NAME=docker-backups.example.com
    RESTORE=false
    
  2. ドックアップコンテナーを実行する

$ docker run --rm \
--env-file env.txt \
--volumes-from <service-name> \
--name dockup tutum/dockup:latest
  1. その後、s3バケットに関連データが含まれていることを確認します

-1

これはボリュームフォルダーのバックアップ方法です。
あなたがインフラドッカーレジストリを持っているなら、この方法は非常に役に立ちます。
これは、zipファイルを簡単に移動するためにdockerレジストリを使用します。

#volume folder backup script. !/bin/bash

#common bash variables. set these variable before running scripts
REPO=harbor.otcysk.org:20443/levee
VFOLDER=/data/mariadb
TAG=mariadb1

#zip local folder for volume files
tar cvfz volume-backup.tar.gz $VFOLDER

#copy the zip file to volume-backup container.
#zip file must be in current folder.
docker run -d -v $(pwd):/temp --name volume-backup ubuntu \
       bash -c "cd / && cp /temp/volume-backup.tar.gz ."


#commit for pushing into REPO
docker commit volume-backup $REPO/volume-backup:$TAG

#check gz files in this container
#docker run --rm -it --entrypoint bash --name check-volume-backup \
        $REPO/volume-backup:$TAG

#push into REPO
docker push $REPO/volume-backup:$TAG

別のサーバー

#pull the image in another server
docker pull $REPO/volume-backup:$TAG

#restore files in another server filesystem
docker run --rm -v $VFOLDER:$VFOLDER --name volume-backup $REPO/volume-backup:$TAG \
       bash -c "cd / && tar xvfz volume-backup.tar.gz"

このボリュームフォルダーを使用するイメージを実行します。
1つの実行イメージと1つのボリュームzipファイルの両方を持つイメージを簡単に作成できます。
しかし、私はさまざまな理由(画像サイズ、入力コマンド、..)のために推奨されません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.