【Kotlin】Kotlin + Spring Boot + MavenをDockerで動かしてみる

はじめに

こんにちは、がんがんです。
前回の備忘録にて、KotlinのHello WorldをDocker上にて行っていきました。
gangannikki.hatenadiary.jp


今回はSpring Bootを加えて、Kotlin + Spring Boot on Dockerの実験を行っていこうと思います。
また、ビルドツールにはMavenを使っていこうと思います。

参考

公式ドキュメント

Kotlin + Spring Boot + Dockerというドキュメントはなかったので、下記の2つのドキュメントを参考にしていきました。
spring.pleiades.io

spring.pleiades.io

参考記事

qiita.com

環境

  • Kotlin
  • Spring Boot
  • Maven

Spring Bootのひな形は以下の通りです。今回はspring initializrからダウンロードしました。

ドキュメントを参考にする場合はDependenciesを適宜追加してください。
f:id:gangannikki:20200904230944j:plain


コンソールから取得する場合は下記の通りです。

$  curl https://start.spring.io/starter.zip -d language=kotlin -d style=web -d packageName=com.example.demo -d name=Demo -o demo.zip
$  unzip demo.zip && rm demo.zip

Dockerfileの準備

最終的にはGCP上での実験を行いたいので今回もDockerの準備をしていきます。docker-compose.ymlを用意するほどでもないかと思ったので、今回はDockerfileのみです。

Dockerfile
FROM openjdk:14-jdk-alpine

RUN mkdir /work
COPY ./demo /work
WORKDIR /work

RUN /work/mvnw package
RUN mv /work/target/*.jar /work/app.jar
ENTRYPOINT [ "java", "-jar", "/work/app.jar" ]

コントローラーの用意

せっかくなのでコントローラーも追加しておきます。コードの内容は参考記事とほとんど同じです。

/src/main/kotlin/com/example/demo/Controller.kt
package com.example.demo

import org.springframework.web.bind.annotation.GetMapping
import org.springframework.web.bind.annotation.RestController

@RestController
class Controller {

    @GetMapping(path = ["hello"])
    fun hello(): String {
        return "Hello Kotlin, Hello Spring-Boot."
    }
}

実行

コントローラーの準備が完了したら実行させていきます。

#  コンソール1
$  docker build --no-cache -t springio/demo .
$  docker run -p 8081:8080 springio/demo

サーバーが立ち上がったら別のコンソールを立ち上げてアクセスしてみます。ちゃんとreturnが返ってきますね。

#  コンソール2
$ curl localhost:8081/hello
Hello Kotlin, Hello Spring-Boot.

実験が完了したらきちんとdocker stopコマンドを実行する必要があります。

prune処理しておくと良さげ

実行とはあまり関係ないですが、イメージやコンテナが残ってしまうのでpruneですべてを消去しておくことをオススメします。

$  docker container prune
$  docker image prune

おわりに

今回はKotlin + Spring Boot + Maven on Dockerの実験を行いました。
現状の実験は、最終的にGCP上で動作させることをゴールとして実験を進めています。そのため、次回はGCP上で実験を行っていきたいと思います。