Cloud Native Buildpacks Tutorial - 8. Cloud Native BuildpacksでビルドしたOCIイメージをデプロイ
Cloud Native BuildpacksでビルドしたOCIイメージをいろいろな環境にデプロイしてみます。
デプロイするアプリケーションはJava(Spring Boot)とします。
まずは、次のコマンドでイメージを作成し、Docker Hubにpushします。
export DOCKERHUB_USERNAME=****
export DOCKERHUB_PASSWORD=****
docker login -u ${DOCKERHUB_USERNAME} -p ${DOCKERHUB_PASSWORD}
curl https://start.spring.io/starter.tgz \
-d artifactId=hello-cnb \
-d baseDir=hello-cnb \
-d dependencies=webflux,actuator \
-d packageName=hello \
-d applicationName=HelloCnbApplication | tar -xzvf -
cd hello-cnb
pack build ${DOCKERHUB_USERNAME}/hello-cnb \
--no-pull \
--builder gcr.io/paketo-buildpacks/builder:base \
--publish
作成したイメージをまずはローカルで起動します。
docker pull ${DOCKERHUB_USERNAME}/hello-cnb
docker run --rm -p 8080:8080 -e INFO_MESSAGE='Hello World!' ${DOCKERHUB_USERNAME}/hello-cnb
起動時に次のようなログが出力されます。
Calculated JVM Memory Configuration: -XX:MaxDirectMemorySize=10M -XX:MaxMetaspaceSize=88833K -XX:ReservedCodeCacheSize=240M -Xss1M -Xmx447742K (Head Room: 0%, Loaded Class Count: 13270, Thread Count: 250, Total Memory: 1073741824)
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.2.6.RELEASE)
2020-04-28 15:42:49.341 INFO 1 --- [ main] hello.HelloCnbApplication : Starting HelloCnbApplication on 078bbff12bc3 with PID 1 (/workspace/BOOT-INF/classes started by cnb in /workspace)
2020-04-28 15:42:49.365 INFO 1 --- [ main] hello.HelloCnbApplication : No active profile set, falling back to default profiles: default
2020-04-28 15:42:50.949 INFO 1 --- [ main] o.s.b.a.e.web.EndpointLinksResolver : Exposing 2 endpoint(s) beneath base path '/actuator'
2020-04-28 15:42:51.653 INFO 1 --- [ main] o.s.b.web.embedded.netty.NettyWebServer : Netty started on port(s): 8080
2020-04-28 15:42:51.659 INFO 1 --- [ main] hello.HelloCnbApplication : Started HelloCnbApplication in 2.915 seconds (JVM running for 3.5)
JVMのメモリが自動で設定されていることに注目してください。
アプリケーションにアクセスします。
$ curl localhost:8080/actuator/health -w '\n'
{"status":"UP"}
$ curl localhost:8080/actuator/info -w '\n'
{"message":"Hello World!"}
デプロイ先は