buildpackのpackコマンドを利用してCloud Native Buildpack準拠なCentOS OCIイメージを作る
ペパボのインフラをk8sに移行していくにあたり、コンテナイメージのビルドを考えて追ったのだが、buildpackを利用して、ペパボ全体でbuildpack資産を共有しつつ、どんどんOSSにしていくのが良かろうと思っている。
buildpackやCloudNativeBuildpackは下記の記事がくわしい。
この記事を読んで思いを馳せてみると、アプリケーション・リポジトリのあり方が変わってくるなと思っていて、アプリケーション・リポジトリにはアプリケーションコードと、ミドルウェアの設定ファイル、buildpack.tomlがあるみたいな状態で、 make build_container
とか実行すると、buildpackのdetectionが自動で必要なミドルウェアなどを判定、インストールしつつ、独自の設定はそのリポジトリから引っ張ってきてコンテナを作り、そのリポジトリのアプリケーションが動くコンテナが宣言的に作られるみたいな世界になるんじゃないかな。
一通り下調べして、やってみるかと試したところ、標準で提供されているstackが io.buildpacks.stacks.bionic
のみのため、ペパボで多く使われているCentOSでbuild imageを利用できるようにしたので、紹介します。
まずは buildpack/ci を参考にDockerfileを書く。
FROM centos:7
LABEL io.buildpacks.stack.id=io.buildpacks.stacks.centos7
RUN useradd pack -u 1000
ENV PACK_USER_ID=1000
ENV PACK_GROUP_ID=1000
ENV PACK_USER_GID=1000
RUN mkdir -p /workspace/app /workspace/config /cache /platform/env
RUN chown -R pack:pack /workspace /cache
WORKDIR /workspace
COPY ./lifecycle/* /lifecycle/
RUN chown -R pack:pack /lifecycle
RUN chmod 755 /lifecycle/*
lifecycleについてはここに実装がある。
バイナリもこちらで提供されています。あとはこいつをdocker build
してあげて、下記のようにスタックに追加すればおkです。
pack add-stack io.buildpacks.stacks.centos7 --build-image <name> --run-image <name>
まだまだ調べながらやってる感じなのだけど、かなり情報少ないからソースコード読みながらあれこれやってる感じ。一通り触ったらまとめてどこかでお話しようかな。