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!"}

デプロイ先は