よくないやり方
# サービスの作成
$ docker service create --name hogehoge -p 41311:80 fuckservice
# イメージの更新
$ docker service update --image hogehoge:latest fuckservice
# デプロイ先制約の追加
$ docker service update --constraints-add node.hoge==huga fuckservice
よりよいやり方
# サービスの作成
$ docker service create --name hogehoge fuckservice
# イメージの更新
$ docker service create hogehoge -p 41312:80 fuckservice_v2
そしてここでリバースプロキシの設定を切り替える
# デプロイ先制約の追加
$ docker service create hogehoge -p 41313:80 --constraint node.hoge==huga fuckservice_v3
そしてここでリバースプロキシの設定を切り替える
ようするにいちいちサービスを作りなおしてリバースプロキシなりロードバランサの設定なりで繋ぎかえるほうがよい。そのようにしてデプロイして問題なさそうだったら旧サービスは捨てる。あるいは一世代ぐらいは古いの残したままにしておいてもよいかもしれない。
それは何故か
というのがあるからです。 service update のほうもいろいろ考えられて作られていることは分かるのですが、大抵は create しなおしたほうが楽なんじゃないかな。