LoginSignup
1
0

Docker × Spring Boot

Last updated at Posted at 2022-10-08

Docker環境でSpring動作させるHow toです.
間違っていることもあると思うのですが,ご容赦くださいませ.

環境

  • Windows10
  • Docker Desktop v4.12.0
  • VSCode v1.71.2

Spring Bootプロジェクトの作成

Spring initializrでテンプレートを作成します

  1. Project:Gradle Project を選択
  2. Language:Java を選択
  3. Spring Boot:2.74 を選択
  4. Artifact:api と入力
  5. Java:14 を選択
  6. Dependencies:Spring Web , lombok を追加

Generateでダウンロードします

build.gradleの修正

VSCodeなどで編集します

build.gradle
plugins {
	id 'org.springframework.boot' version '2.7.4'
	id 'io.spring.dependency-management' version '1.0.14.RELEASE'
	id 'java'
}

group = 'com.example'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = 1.8

configurations {
	compileOnly {
		extendsFrom annotationProcessor
	}
}

repositories {
	mavenCentral()
}

dependencies {
	implementation 'org.springframework.boot:spring-boot-starter-web'
	compileOnly 'org.projectlombok:lombok'
	annotationProcessor 'org.projectlombok:lombok'
	implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
	testImplementation 'org.springframework.boot:spring-boot-starter-test'
}

tasks.named('test') {
	useJUnitPlatform()
}

apply plugin: 'application'
mainClassName = 'com.example.api.controller.HomeController'

コーディング

src/main/java/com/example/api/controller/HomeController.java
を作成して,以下のように編集します.

HomeContoroller.java
package com.example.api.controller;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PostMapping;
import com.example.api.model.User;

@SpringBootApplication
@Controller
public class HomeController {

    @GetMapping("/")
    private String hello() {
        return "hello";
    }

     public static void main(String[] args) {
        SpringApplication.run(HomeController.class, args);
    }
}

表示するhtmlファイルも作成します
src/main/resources/templates/hello.html
を作成して,以下のように編集します.

hello.html
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
  <meta charset="UTF-8">
  <title>Hello World!</title>
</head>
<body>
    <p>Hello World!</p>
</body>
</html>

これでSpring Bootの準備は完了です

Dockerの環境構築

docker-composeの作成

コンテナをアプリケーション用,DB用,メールサーバー用など管理したいときに使います.
今回はアプリケーションのコンテナのみです.port番号は8085に設定しています.

docker-compose.yml
version: '3.8'
services:
  java:
    image: openjdk:14-slim
    ports:
      - 8085:8080
    tty: true
    volumes:
      - ./server:/srv:cached
    working_dir: /srv

コンテナの作成

コンテナを作成します
ターミナルを開いて,ルートディレクトリまで移動します
以下のコマンドを打ちます
docker-compose up -d

次回からコンテナの起動は
docker start *コンテナ名*
停止は
docker stop *コンテナ名*
でできます
Docker Desktopが入ってればGUIでもできます

サーバに入る

Docker上でSpring Bootを動作させるためにコンテナのサーバに入ります.
以下のコマンドを打ちます
Docker exec -it *コンテナ名* bash

Spring Boot のビルド

無事サーバに入れたら前半で作成したSpring BootプロジェクトをDocker上でデプロイします.
sh gradlew build
以下のようにBUILD SUCCESSが出てればビルド成功です.

Starting a Gradle Daemon (subsequent builds will be faster)

BUILD SUCCESSFUL in 1m 45s
13 actionable tasks: 1 executed, 12 up-to-date

Spring Bootの起動

ビルドに成功すればbuild/libs 配下にjarファイルが生成されているはずです.該当ファイルを実行することでSpring Bootを起動することができます.
java -jar build/libs/api-0.0.1-SNAPSHOT.jar
以下のように表示されていれば成功です.

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::                (v2.7.4)

2022-10-08 06:51:54.366  INFO 248 --- [           main] c.example.api.controller.HomeController  : Starting HomeController 
using Java 14.0.2 on b5a35d4cb0bd with PID 248 (/srv/build/libs/api-0.0.1-SNAPSHOT.jar started by root in /srv)

~以下省略~

この状態で http://localhost:8085/にアクセスします
Hello World!が表示されていれば成功です!

参考

1
0
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
1
0