LoginSignup
5
1

More than 1 year has passed since last update.

SpringBoot+KotlinでWebアプリ開発からDockerでのビルドまで

Posted at

概要

Spring Boot + Kotlinで簡単なWebアプリケーションを作り、Dockerイメージにビルドする方法を記載します。

Webアプリケーションの開発

プロジェクトファイルの準備

spring initializrへアクセスし、以下の画面キャプチャのように設定してGENERATEボタンを押下することでプロジェクトを作成します。

  • Gradle Project
  • Kotlin
  • Jar
  • Java 11
  • Dependencies
    • Spring Web
    • Thymeleaf

ダウンロードしたプロジェクトファイルをunzipし、インストールしておいたIntelliJ IDEAのFile > Openから開きます。

image.png

コーディング

以下のKotlinファイルを作成します。

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

import org.springframework.stereotype.Controller
import org.springframework.ui.Model
import org.springframework.web.bind.annotation.GetMapping
import org.springframework.web.bind.annotation.RequestMapping

@Controller
class Controller {
    @GetMapping("/demo")
    fun index(model: Model): String {
        model.addAttribute("message", "Hello World!")
        return "index"
    }
}

上記のコードは/demoのパスにアクセスした際に、return "index"で指定したindex.htmlのファイルが表示されるように紐づけています。

また、model.addAttributeで指定したmessage属性の値Hello World!がindex.htmlへ渡されることになります。

続いて、index.htmlを作成しましょう。

demo/src/main/resources/templates/index.html
<!DOCTYPE html>
<html lang="en" xmlns:th="http://www.w3.org/1999/xhtml">
<head>
    <meta charset="UTF-8">
    <title>Hello World!!</title>
</head>
<body>
    <p th:text="${message}"></p>
</body>
</html>

上記HTMLファイルでは、<p th:text="${message}"></p>の部分で、model.addAttributeにて指定した属性値を取得しています。

Webアプリの起動

シェルにて以下のコマンドを実行することでWebアプリが起動します。

$ ./gradlew bootRun

image.png

なお、IntelliJのUIからもアプリを起動することは出来ます。

起動したWebアプリの画面

ブラウザにてlocalhost:8080/demoにアクセスすることで以下の応答が得られます。

image.png

Dockerイメージのビルドおよび起動手順

Boot SpringのProject直下に以下のDockerfileを作成する。

gradlew bootJarではなくgradlew buildを記述してしまうと、*-plain.jarが生成されてしまいdocker buildに失敗します。

Dockerfile
FROM adoptopenjdk/openjdk11:alpine
VOLUME /tmp
RUN mkdir /work
COPY . /work
WORKDIR /work
RUN /work/gradlew bootJar
RUN mv /work/build/libs/*.jar /work/app.jar
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/work/app.jar"]

シェルで以下のコマンドを実行することで、Dockerイメージの作成および実行が完了します。

bash
$ docker build --no-cache -t <image name> .
$ docker run -p 8081:8080 <image name>

参考

  • Dockerイメージのビルドでは、以下の記事を参考にさせてもらいました。以下の記事のやり方ではNo such file or directoryのエラーによってDockerイメージのビルドに失敗してしまったため本記事ではその修正対応を行っております。

修正対応したエラー内容
mv: can't rename '/work/build/libs/<project name>-plain.jar': No such file or directory
mv: can't rename '/work/build/libs/<project name>.jar': No such file or directory
The command '/bin/sh -c mv /work/build/libs/*.jar /work/app.jar' returned a non-zero code: 1
5
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
1