デブサミ2020【13-B-5】Best Practices In Implementing Container Image Promotion Pipelines -知っておくべきコンテナイメージ・プロモーションの方法 #devsumiB #devsumi

Baruch Sadogursky[JFrog] https://event.shoeisha.jp/devsumi/20200213/session/2347/ Developers Summit 2020の講演資料・参加レポート一覧: https://codezine.jp/article/detail/11981
0
comefigo 🇺🇦 @Xeon9900

席でカエルちゃんたちが待ってくれます🐸 #devsumiB #JFrog pic.twitter.com/Wbsg7JUguS

2020-02-13 13:59:59
拡大
ジョニー @cojohnny1

全部の座席にカエルが置いてあったw いいなーJFrog #devsumi #devsumiB pic.twitter.com/Qy0GqCK1S0

2020-02-13 14:08:45
拡大
hiroisojp @hiroisojp

Best Practices In Implementing Container Image Promotion Pipelines -知っておくべきコンテナイメージ・プロモーションの方法の資料はここにあるよ。とのこと。 jfrog.com/shownotes/ #devsumi #devsumiB

2020-02-13 14:16:30
Shinji Matsumoto @smatsumt

Best Practicies in implementing container image promotion pipelines jflog.com/shownotes CI/CD開発用から本番までのPromotion Pyramid 。 Dockerにより、docker buildで環境を作れる。しかし下手なDockerfileの書き方は色々問題を引き起こす。 #devsumiB

2020-02-13 14:21:46
Shinji Matsumoto @smatsumt

バージョン指定をしないこと。 バージョン指定してもセキュリティパッチなどでイメージ変わることもある。 チェックサム指定で完全に固定できる。読みにくいが。 #devsumiB

2020-02-13 14:27:30
ogady @_ogady_

dockerでただOSバージョンを固定するだけでも不十分である。なぜならパッチが当たったらまた違うイメージになってしまう。 それを保証できない。。。 #devsumiB

2020-02-13 14:27:49
comefigo 🇺🇦 @Xeon9900

バージョン管理はDockerに限った話じゃない気がする #devsumiB

2020-02-13 14:27:50
SAKON @sakon310

壁が必要だで、某大統領が出てくるプレゼンw #devsumiB event.shoeisha.jp/devsumi/202002…

2020-02-13 14:30:08
hiroisojp @hiroisojp

Dockerは、非常にパワフル、簡単に利用することができる。 ビルドのアーティファクトをプロモーションするのではなく、DockerFileをプロモーションすればよい。アーティファクトのプロモーションより楽。 (容量がでかいアーティファクトよりも)gitでコントロールできる。 #devsumi #devsumiB

2020-02-13 14:32:12
hiroisojp @hiroisojp

ただし、DockerFileの書き方は気をつける必要がある。 イミュータブルに保つ必要がある。 #devsumi #devsumiB

2020-02-13 14:32:23
hiroisojp @hiroisojp

例えば、 FROM ubuntu ではダメ。 バージョンつける? 同じバージョンでもセキュリティパッチでイメージは変わることがある。 チェックサムをつける? 一意的なことは確認できるが、チェックサムがそのバージョンを示しているかを確認するのが大変。 #devsumi #devsumiB

2020-02-13 14:32:40
Shinji Matsumoto @smatsumt

ビルド時にネットからファイルをとること。 ビルドするタイミングで中身が違ってしまう可能性がある。 開発と本番をどう切り離すか。オプション1、LABELを使う。 2、Dockerリポジトリで分ける。3、Dockerレジストリを分ける。 レジストリを分ければ同じ名前でそれぞれの環境を対応させれる #devsumiB

2020-02-13 14:32:46
hiroisojp @hiroisojp

Dockerに METADATA TAGをつける。DOCKER REPOSITORYを使う。 環境ごとにレジストリを分ける。 #devsumi #devsumiB

2020-02-13 14:33:00
SAKON @sakon310

分けるのか。分けてお互い干渉できないようにする。 #devsumib pic.twitter.com/CkKrbxlbDU

2020-02-13 14:33:13
拡大
hiroisojp @hiroisojp

Dockerがイメージへの参照をどのようにしているかの理解が必要。 docker tag host:port/busybox は https://host:port/v2/busybox のようにマッピングされる。 このURLを環境によってリダイレクトして適切なものを返す? #devsumi #devsumiB

2020-02-13 14:36:49
SAKON @sakon310

gifがいちいち面白いんだが、果たしてこのまま資料公開されるのかな?#devsumiB twitter.com/sakon310/statu… pic.twitter.com/fpuGr8NUz0

2020-02-13 14:37:58
拡大
hiroisojp @hiroisojp

このように環境ごとのコントロールするのは大変。 そこでjfrogのコンテナレジストリがそれをサポートする。 #devsumi #devsumiB

2020-02-13 14:38:33
Shinji Matsumoto @smatsumt

Dockerタグの構造。レジストリとタグ、併用すると組み合わせがややこしくなる。 そこで、バーチャルホストを使って関係をシンプルにする。 (?) タグを逐一打つの、手間がかかる。CI側で自動的にpromoteするようにする。 #devsumiB

2020-02-13 14:41:12
Shinji Matsumoto @smatsumt

開発者からは単一の仮想Dockerリポジトリのみを扱えば良い。 デプロイ環境からはステージごとに独立したDockerリポジトリがあり、分離ができる。 #devsumiB

2020-02-13 14:43:24
hiroisojp @hiroisojp

latestを使いたい場合は、latestにプロパティを追加する。 docker.refersTo = 26 のようにして、バージョンをトラッキングできるようにする。 #devsumi #devsumiB

2020-02-13 14:44:49
hiroisojp @hiroisojp

Docker以外の依存関係については? 使い方にもよるが、jfrogのツールでは、docker-remote-cacheや任意のファイル(jdk,tomcatのファイルなど)を管理することができる。(わかっているリソースから使うことができる) #devsumi #devsumiB

2020-02-13 14:48:51
hiroisojp @hiroisojp

ビルドは一回だけ、環境はそれぞれにわける、依存関係は自分で管理する。 #devsumi #devsumiB

2020-02-13 14:48:57
ogady @_ogady_

Dockerで環境構築デプロイするとき - buildは一回だけ - 環境は分ける - ビルドしたものをプロモートする - 自分の依存関係は自分で管理する #devsumiB

2020-02-13 14:50:13
Shinji Matsumoto @smatsumt

外部の依存関係は?別途、依存ソフトを取っておく場所を確保して、パッケージ管理ソフトはそっちを見るようにする。依存関係のファイルも自分で管理する。 (バージョン、依存関係管理、ちゃんと固定するの大事だと思いつつ、セキュリティ周りの更新とか面倒だなぁとも💦) #devsumiB

2020-02-13 14:50:31