Cloud Native Buildpack に入門:Maven プロジェクトをビルド
趣旨
maven wrapper
を配置したマルチモジュールな Maven プロジェクトを pack cli
でビルドしてみた
Cloud Native Buildpack とは
アプリケーションコードから自動的にコンテナイメージを作成する仕組み、を標準化した仕様。
Dockerfile
を書かなくてもよい、レイヤーを再利用できる、レイヤーを差し替えられるのがメリット。
アプリケーションとコンテナ実行基盤を疎結合にするツールとしてとてもよさそう。 コンテナ実行基盤を PaaS と同じように考えられるので。
やったこと
$ docker version Client: Version: 19.03.1 API version: 1.39 (downgraded from 1.40) Go version: go1.12.7 Git commit: 74b1e89e8a Built: Wed Jul 31 15:18:18 2019 OS/Arch: windows/amd64 Experimental: false Server: Docker Engine - Community Engine: Version: 18.09.9 API version: 1.39 (minimum version 1.12) Go version: go1.11.13 Git commit: 039a7df9ba Built: Wed Sep 4 16:55:50 2019 OS/Arch: linux/amd64 Experimental: false $ pack build myapp --builder cloudfoundry/cnb:bionic --env BP_JAVA_VERSION="8.*" --env BP_BUILT_MODULE="webapp" --env BP_TOMCAT_VERSION="7.*" $ docker images | grep myapp myapp latest 6342132d1392 18 seconds ago 314MB
--builder cloudfoundry/cnb:bionic
pack suggest-builders
で確認した利用可能なビルダーを指定するオプション。- この辺のリポジトリ で公開されてる定義と この辺のイメージ が対応しているようだ。
Ubuntu 18.04 (bionic)
をベースに各種プログラミング言語用のランタイムやビルドツールを配置している、らしい。
$ pack suggest-builders Suggested builders: Cloud Foundry: cloudfoundry/cnb:bionic Ubuntu bionic base image with buildpacks for Java, NodeJS and Golang Cloud Foundry: cloudfoundry/cnb:cflinuxfs3 cflinuxfs3 base image with buildpacks for Java, .NET, NodeJS, Python, Golang, PHP, HTTPD and NGINX Heroku: heroku/buildpacks:18 heroku-18 base image with buildpacks for Ruby, Java, Node.js, Python, Golang, & PHP
--env BP_JAVA_VERSION="8.*"
cloudfoundry/openjdk-cnb の動作を制御する環境変数。
- 始めの方に配置されるプランで、Java のバージョンを指定できる。
- ワイルドカード指定 (
8.*
) ができる。 - 指定したバージョンの
OpenJDK
をダウンロードして配置してくれる。 - このプランで指定された
JAVA_HOME
が後続のプランでも使われる。
--env BP_BUILT_MODULE="webapp"
cloudfoundry/build-system-cnb の動作を制御する環境変数。
- ビルドした成果物を探索するパス文字列パターンの先頭に指定される文字列。
mvnw
やgradlew
が存在するならそれぞれのラッパースクリプトを使用するのでなんか面白い。BP_BUILD_ARGUMENTS
を指定するとラッパースクリプトの引数全体を上書きできる。
--env BP_TOMCAT_VERSION="7.*"
cloudfoundry/tomcat-cnb の動作を制御する環境変数。