水無瀬のプログラミング日記

プログラムの勉強した時のメモ

Docker上でSpring bootのビルド&実行するまで

はじめに

JavaというかSpringを触っている今日このごろ。
ついでにDockerで動かそうと思ったのでその設定をしていく。

前提

Dockerが使えること。 設定方法については割愛。

環境

  • OS: macOS Mojave
  • Docker: Docker for Mac v2.0.0.3

Java(Spring boot)の設定

雛形ダウンロード

サクッと雛形をSpring Initializrで作成する。
指定したのは下記の通り。書いてないとこは何でも良いと思う。

項目 内容
Project Gradle project
Language Java
Spring boot 2.2.0(SNAPSHOT)
packaging jar
Java version 11
Dependencies Lombok,Web

ちょっとアプリ改修

このままでも動くけど動くだけなので軽く修正を加えることにする。
内容はただ単にレスポンスを返せるようにするだけ。
まず、自動生成されたクラスと同列にindexController.javaを作成する。
作成したファイルの内容は下記の通り。

$ touch src/main/java/...(package)/IndexContoroller.java
package hoge;

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

@RestController
public class IndexController {

    @GetMapping("index")
    @Override
    public String getIndexPage() {
        return "Hello World!";
    }
}

Dockerの設定

Dockerfileをちまちま書いていく。
調べた感じみんなローカルでビルドした後Dockerで動かしているのが多かったけど、
全部Dockerでやりたいので必要なファイルをコピってビルド & 実行。

Dockerfile

FROM openjdk:latest

RUN mkdir /app
WORKDIR /app
COPY ./gradlew /app
COPY ./build.gradle /app
COPY ./settings.gradle /app
COPY ./src /app/src
COPY ./gradle /app/gradle
ENTRYPOINT ["sh", "./gradlew", "bootRun"]

実行

準備が終わったので実行してみる。
ローカルから叩いてちゃんとレスポンスが取れればOK。

$ docker build -t spring-docker ./
# Springがport8080で起動するのでローカルからは3000にする
$ docker run -p 3000:8080 spring-docker

問題なく起動したら適当にcurlで確認してみる。
下記のようになればOK。

$ curl localhost:3000/index
  Hello World!

まとめ

今回はDocker + Spring bootの設定をしてみた。
思ってたより楽だったし、久しぶりにJavaも触りたいのでもうちょっと何かを作ってみたいところ。
上でも書いたけど、意外とDocker上でビルドとかしないんだろうか。。。
それでは今回はこの辺で。