2017-11-23 5 views
1

ドッカーには比較的新しいです。私はpostgresデータベースを設定したいと思いますが、コンテナを再作成してもデータが失われていないことを確認する方法を知りました。ボリュームを持つポストグルームをドッキングした

次に、名前付きボリューム(ボリュームをバインドしない)とその使用方法を見つけました。 ... Dockerfileでは、名前付きボリュームは使用できません。例えば。データ:/ var/libなど Dockerfileを使ってわかったので、常に匿名のボリュームです。 コンテナを再作成するたびに、 独自の新しいボリュームが作成されます。まず

は、だからここに私の質問に来てどのように私は、ことを確認しない場合、コンテナGETの更新または再作成、同じデータに新しいコンテナ参照内への言及を失っていないから、Postgresデータベース以前に作成された匿名のボリューム。

第2の点:これはymlファイルでどのように機能しますか? このようなデータベースコンテナの複数のレプリカを1つのボリュームに参照することは可能ですか? (高可用性モード)?

誰かがヒントやベストプラクティスを得ることができれば、本当に素晴らしいことでしょう。

ありがとうございます。

答えて

2

PostgresためDockerfileを見ると、あなたはそれがボリューム命令を宣言することを参照してください。

​​

毎回あなたが--volumeオプションを指定せずに、新しいPostgresのコンテナを実行するには、ドッキングウィンドウは自動的に新しいボリュームを作成します。ボリュームにはランダムな名前が付けられます。

は、コマンドを実行して、すべてのボリュームを見ることができます:

docker volume ls 

ます。また、使用してホストのパスを検査することで、ボリュームによってホストに保存されたファイルを検査することができます

docker volume inspect <volume-name> 

ので、 runコマンドに--volumeオプションを指定しないと、DockerはDockerfileで宣言されたすべてのボリュームのボリュームを作成します。これは主に、ボリュームに名前を付けるのを忘れて、データが失われないようにすると安全です。

まず:コンテナ取得の更新または は、同じデータではなく 以前に作成した匿名のボリュームへの参照を失うことに 参照新しいコンテナ内からのPostgresデータベースを再作成した場合にどのように私は、確認してください。

ドッカーに同じボリュームを使用させたい場合は、--volumeオプションを指定する必要があります。指定されると、ドッカーは新しいボリュームを作成せず、dockerコマンドで既存のボリュームを指定されたフォルダにマウントするだけです。

貴重なデータを持つボリュームの名前を付けることをお勧めします。たとえば:このコマンドを初めて実行する場合

docker run --volume postgresData:/var/lib/postgresql/data ... 

ボリュームpostgresDataは、ホスト上で作成し、意志のバックアップ/var/lib/postgresql/dataされます。 2回目に実行すると、ホスト上にバックアップされた同じデータがコンテナにマウントされます。

第二:YMLファイルを使用してこの作業を行いますか?そのようなデータベースコンテナの複数のレプリカを のボリュームに参照することは可能ですか?

はい、ボリュームは複数のコンテナ間で共有することができます。同じボリュームを複数のコンテナにマウントすることができ、コンテナは同じファイルを使用します。ドッカーのコンは、あなたがそれを行うことができます...

はしかし、ホストに限定されるとボリュームが、彼らが作成されたたことbeaware。複数のマシン上でコンテナを実行する場合、すべてのマシンからボリュームにアクセスできる必要があります。 を達成する方法やツールがありますが、それは少し複雑です。これはDockerで解決されなければならない限界です。

+0

感謝はあなたの偉大な答えをyamenk。私は後者の方法で行きたいです。しかし、ymlファイルを使用してコンテナを実行する場合、名前付きボリュームを宣言するオプションはありません。 'docker stack deploy -c docker-compose.yml postgres'を実行すると、名前付きボリュームを持つことを宣言する必要がありますか? – Chris

+0

@Chris https://docs.docker.com/compose/compose-file/#short-syntax-3で指定された名前付きデータボリュームを指定することができます。 'postgresData:/ var/lib/postgresql/data' – yamenk

関連する問題