環境
Fargateで下記を動かしている
- payara(TALON)
- mysql
ECRに登録しているコンテナイメージを更新する際、ローカルのコンテナを更新してからECRにプッシュしている。久しぶりだとドレに対して更新をかけるのか等、フリーズしてしまうのでメモ。
方針
ECRにpushしているイメージの更新運用で下記が考慮点
- payaraで動いている静的コンテンツ(ライセンスファイルなど)書き換え時の運用
- payaraで動いている動的コンテンツ更新時の運用
- mysqlはデータ部分を共有ボリュームにして、mysql自体のバージョンアップ以外はイメージ更新なしの運用
2番目のは基本的に無い(TALONでは動的コンテンツをDBで管理しているため)と理解しているので現時点では除外して考える。
3番目のは1番目と同じ運用にできるように考える。
payara静的ファイルを書き換えする際の運用
こんな感じがスタート地点。ほかのコンテナ消しているのでシンプルに見えるが実際は亜流のコンテナがたくさんある。
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
02f78bf3ec8b talon20241112 "/bin/sh -c '/bin/sh…" 4 weeks ago Exited (255) 17 hours ago 0.0.0.0:4848->4848/tcp, :::4848->4848/tcp, 0.0.0.0:8080->8080/tcp, :::8080->8080/tcp, 6900/tcp talon_latest
77cc95c7effc talon:test "/bin/sh -c '/usr/lo…" 5 weeks ago Exited (137) 4 weeks ago talon20241108
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
123456789012.dkr.ecr.ap-northeast-1.amazonaws.com/prod/talon latest d9a9949764bf 4 weeks ago 990MB
talon 20241112 d9a9949764bf 4 weeks ago 990MB
旧版に対して更新をかける運用にする。
※更新後版は20241217で旧版は20241112
エントリポイントなどは更新なし(指定なしでコンテナ起動)の前提。
docker run -d --name=talon20241217 -p 8080:8080 -p 4848:4848 talon:20241112
して旧版コンテナをtalon20241217で起動し、このコンテナに対してファイル更新をかける。
更新後コミット
※ローカルとFargateでDBの接続文字列違うので更新忘れずに。allowPublicKeyRetrievalも。
※イメージファイルサイズ縮小等は別の方法で考える必要あり
docker commit talon20241217 talon:20241217
タグ付け
docker tag talon:20241217 123456789012.dkr.ecr.ap-northeast-1.amazonaws.com/prod/talon:latest
ECRプッシュ。latestだけECRに置く運用とする。
docker push 123456789012.dkr.ecr.ap-northeast-1.amazonaws.com/prod/talon:latest
まとめ
この運用だとECRでは最新版のみの管理でシンプルだし、コスト最小化もできそう。
ローカルdockerでの旧版履歴は下記のようになる予定で、なんとなくいい感じ。
改善点はいっぱいありそうだけど、いったんは満足。
上記運用実施後のdocker imagesコマンド出力結果(イメージ)
REPOSITORY TAG IMAGE ID CREATED SIZE
talon 20241227 d9a9XXXXXXXX 1 day ago 990MB
123456789012.dkr.ecr.ap-northeast-1.amazonaws.com/prod/talon latest d9a9XXXXXXXX 1 day ago 990MB
talon 20241112 d9a9949764bf 4 weeks ago 990MB
talon 20241001 YYYYYYYYYYYY 2 Months ago 990MB