web-dev-qa-db-ja.com

Dockerサービスの更新と既存のスタックを使用したDockerスタックのデプロイ

docker stack deployを使用して一連のサービスをデプロイした後、dockerswarmモードコマンドを使用して既存のサービスを更新することに疑問があります。私が理解した限りでは、すべてのサービスは作成時にイメージのSHA256ダイジェストに固定されているため、イメージを再構築して(同じタグで)プッシュし、docker service updateを実行しようとすると、サービスイメージはピン留めされません。更新されました(SHA256が異なっていても)。逆に、docker stack deployを再度実行すると、すべてのサービスが新しいイメージで更新されます。 docker service update --image repository/image:tag <service>を使ってもサービスイメージを更新することができました。これはこれらのコマンドの正常な動作ですか、それとも私が理解していないことがありますか?

Docker17.03.1-ceを使用しています

8

Dockerスタックデプロイ ドキュメント は次のように述べています。「群れの作成ファイルまたはdabファイルからスタックを作成および更新します。このコマンドは、マネージャーノードをターゲットにして実行する必要があります。」したがって、説明した動作は期待どおりです。

Dockerサービスの更新 ドキュメント はそれほど明確ではありませんが、--image repository/image:tag <service>でのみ実行されるため、イメージを更新するにはフラグが必要であるとあなた自身が言いました。

やりたいことを達成するには2つの方法があります。

2
herm

docker stack deployが既存のサービスのイメージを、指定されたタグがリンクされているハッシュに更新することは、正常で予想される動作です。

タグが存在しない場合、latestが想定されます。これは、latestタグがほとんどの人によく理解されておらず、予期しない結果につながるため、問題になる場合があります。

2
demaniak