Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Distrolessイメージへの乗り換え #1673

Closed
wants to merge 2 commits into from
Closed

Conversation

logica0419
Copy link
Member

alpineで出てくるvulnerabilityに辟易することがあるので、よりvulnerabilityを孕む可能性の低いdistrolessに乗り換えようと決意した

  • 外部にHTTPS接続するのでopensslまでは必須だった -> baseバージョンを採用
  • debianベースになるので、builderイメージもgolangのdebian系統に切り替え
  • imagemagickはslimイメージ上でインストール、必要なライブラリをフォルダごとrunnerイメージに持ってきた
    • ソースからインストール、ポータブルバイナリの導入はやってみたがダメで、これが一番安定した
    • 他のライブラリも入ってしまうが正直しょうがない感がある (imagemagickが要求するライブラリが多すぎる)
  • 一応軽量化した
    • 206MB -> 190MB
    • ほぼ誤差
  • 一応ホーム画面上の操作の大体、スタンプのインストール、imagemagickを使う処理は手元テスト済み

@logica0419 logica0419 added the kind/dev 開発内部(のみ)に関するもの label Feb 9, 2023
RUN mkdir /storage

ARG DOCKERIZE_VERSION=v0.6.1
RUN go install github.com/jwilder/dockerize@$DOCKERIZE_VERSION
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

この時点で CGO_ENABLED=0 無くても大丈夫なのかな


FROM alpine:3.17.1
FROM gcr.io/distroless/base:nonroot
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

userがnonrootになる(でいいのかな?)ということは、イメージを使う側でbind mountをしていたらほぼ確実に影響が出るので、リリースノートに書く & docsを変更する & 使う側で対応しないとですね

Comment on lines +29 to +30
# ボリュームにマウントするディレクトリは、nonrootユーザーが所有するように
COPY --chown=nonroot:nonroot --from=build /storage/ /app/storage/
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

/app/storage をbind mountしたときは結局ホスト側のuid/gidになっちゃいそう

Comment on lines +35 to +37
COPY --from=convert /usr/lib/ /usr/lib/
COPY --from=convert /lib/ /lib/
COPY --from=convert /usr/bin/convert /usr/bin/
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

結局はimagemagickのインストールが難関っぽそうですね...

こうしてdistroless側のライブラリがなにか上書きされて上手く動かなくなったりしないかとかが気になりますね
それを確かめる方法 or distroless上でどうにかしてビルドする方法ってありそうですか?

ソースからインストール、ポータブルバイナリの導入

もし覚えてたら何がだめだったのか書いてもらえると
imagemagick static compile とか調べるといろんな人が苦戦した記録が出てくるけど、様々な問題に出くわすのは確定そう

RUN mkdir /storage

ARG DOCKERIZE_VERSION=v0.6.1
RUN go install github.com/jwilder/dockerize@$DOCKERIZE_VERSION
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

go installでもbuild発生するので、ここでもmount=type=cacheしても良さそう

@logica0419
Copy link
Member Author

imagemagicを綺麗に入れられる可能性がだいぶ薄いので、traQでは諦めようと思います

@logica0419 logica0419 closed this Apr 5, 2023
@logica0419 logica0419 deleted the distroless branch April 6, 2023 17:11
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
kind/dev 開発内部(のみ)に関するもの
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants