Docker環境でSpring動作させるHow toです.
間違っていることもあると思うのですが,ご容赦くださいませ.
環境
- Windows10
- Docker Desktop v4.12.0
- VSCode v1.71.2
Spring Bootプロジェクトの作成
Spring initializrでテンプレートを作成します
- Project:Gradle Project を選択
- Language:Java を選択
- Spring Boot:2.74 を選択
- Artifact:api と入力
- Java:14 を選択
- Dependencies:Spring Web , lombok を追加
Generateでダウンロードします
build.gradleの修正
VSCodeなどで編集します
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
を作成して,以下のように編集します.
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
を作成して,以下のように編集します.
<!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に設定しています.
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!が表示されていれば成功です!