11

データ コンテナーを使用すべきではないという一般的なコンセンサスについて、私は混乱しています。達成したい特定のユースケースがあります。

docker nginx コンテナーが必要で、その背後にアプリケーションを含む他のコンテナーが必要です。アプリの最新バージョンを実行するために、プライベート Docker レジストリから準備完了のコンテナーをダウンロードしたいと考えています。アプリケーションは今のところ純粋に静的な html、javascript です。

したがって、私の計画は、ファイルを保持し、いくつかの /webapp フォルダーに名前付きボリュームを指定する docker イメージを作成することです。nginx コンテナはこのボリュームを提供します。「docker コンテナ化」の方法で多数のファイルをリモート システムに移動する方法は他にありません。私は実際に呪われたデータ コンテナーを作成していませんか?

とにかく、アプリコンテナの交換中に何が起こりますか? アプリ コンテナーを停止すると、ボリュームはホストに配置されるため、アクセス可能なままになります。アプリコンテナの新しいバージョンをプルして起動すると。ボリュームが再度作成され、同じ場所に保存されているイメージ ファイルが事前にファイル化され、ホストのコンテンツが置き換えられるため、nginx コンテナーは新しいバージョンのアプリケーションからサーバーに配置されます。nginx コンテナーからまだ存在しないボリュームを参照するとどうなりますか。

名前付きの値は、画像のコンテンツとともに自動的にファイルされないようです。同様に、ここから取得したこの構文が機能しないため、docker ファイルに名前付きボリュームを作成する方法がわかりません

FROM training/webapp

VOLUME webapp:/webapp
4

1 に答える 1

4

ここで説明したことが必要になると思いますhttps://stackoverflow.com/a/41576040/3625317

ボリュームの問題は、コンテナーが再作成されたときに、新しいコンテナーでは「新しいコードがボリュームに保存されdocker-compose downdocker-compose pull + up」、リサイクルされたボリュームのために古い anon ボリュームのままになることです。要点は、コードを交換可能にしたいので、名前付きボリュームではなく、コードを再展開可能にしたいので、とにかくコードに匿名ボリュームが必要になるということです。

再作成しても anon-volume は削除されません。つまり、現在 image:v1 があり、image:v2 をプルしてからdocker-compose up. に基づいてコンテナーを再作成しますimage:v2-これが完了すると、新しいコンテナーが作成されますが、コードはまだ image:v1 に基づいた古いコンテナーからのものです。 -割り当てられます。docker-compose down && docker-compose upが解決してくれますが、アイデアを扱うときはこのことを念頭に置いておく必要があります。(down は anon-volumes を削除します)

一般に、賛否両論があります。私の他の投稿を参照してください。

一般に、データ コンテナーには別の意味があり、いわゆる名前付きボリュームに置き換えられています。データコンテナは、匿名ボリュームに基づいていない「名前付き」のボリュームマウントを確立するために使用されています。

以前は、ボリュームを含むコンテナーを作成し、後でこのボリュームのコンテナー名ベースのマウントを使用する必要がありました (コンテナーは static / name 部分になります)。今日では、名前付きボリュームnameを作成し、これによってマウントするだけです。 volume-name、busyboxkilled after startベースのコンテナ名ベースのボリューム マウントは必要ありません。

于 2017-01-11T08:03:51.297 に答える