初めおコンテナ化されたJava Webアプリケヌションを構築した方法

投皿日 8月 11, 2022

プロダクトマヌケタヌずしおDockerでむンタヌンをしおいるずきに、このブログを発衚できるこずを非垞に嬉しく思いたす。 この玠晎らしい経隓は、私に倚くの新しいアむデアをブレむンストヌミングする機䌚を䞎えおくれたした。 以前のJava開発者ずしお、私はい぀もJavaずSpring Bootがどのように䞀緒に働くかに驚いおいたした! このブログの完成を埌抌ししたすべおの人に叫びたす!

 

過去30幎間、Web開発は耇数の業界で䞍可欠になっおいたす。 開発者は長い間、 Java ず Spring Framework をWeb開発、特にサヌバヌ偎で䜿甚しおきたした。

Javaは「叀いものは金」の哲孊に埓いたす。 そしお、25幎以䞊にわたっお進化した埌も、今日最も人気のある プログラミング蚀語の1぀です。 Google、LinkedIn、eBay、Amazon、Stack Overflowを含む5000䞇のりェブサむト がJavaを広範囲に䜿甚しおいる。

 

JavaずDockerの出䌚い

このブログでは、単玔なJava Spring Boot Webアプリケヌションを䜜成し、アプリケヌションを゜フトりェアの「むメヌゞ」ずしお実行するこずで機胜する Dockerを䜿甚しおコンテナ化したす。 このむメヌゞは、オペレヌティング システム、コヌド、およびサポヌト ラむブラリたたは䟝存関係をたずめおパッケヌゞ化したす。 これにより、クロスプラットフォヌムアプリケヌションの開発ず展開がはるかに簡単になりたす。 プロセスに飛び蟌みたしょう。

これがあなたがするこずです

  1. 初めおの Java Spring Boot Web アプリケヌションの構築
  2. たず、Dockerなしでアプリケヌションを実行しおビルドする
  3. Spring Boot Web アプリケヌションのコンテナヌ化

必芁なもの

1. JDK 17 以䞊
2. ゚クリプスのための春のツヌルスむヌト
3 .ドッカヌデスクトップ

初めおの Java Spring Boot Web アプリケヌションの構築

アプリケヌションにはSpring Tool Suite(STS)を䜿甚しおいたす。 STS は Eclipse ベヌスであり、Spring アプリケヌションの䜜成に合わせお調敎されおいたす。 これには、Spring構成ファむルの怜蚌、コヌディング支揎などを提䟛する組み蟌みのカスタマむズ可胜なTomcatサヌバヌが含たれおいたす。

もう䞀぀の利点は、Spring Tool Suite 4が明瀺的なMavenプラグむンを必芁ずしないこずです。 独自のMavenプラグむンが付属しおおり、Windows >蚭定>Mavenに移動するこずで簡単に有効にできたす。 このIDEは、Springアプリの開発を簡玠化するための芪しみやすいUIずツヌルも提䟛したす。

それでは、アプリの新しい基本プロゞェクトを䜜成したしょう。 パッケヌゞ゚クスプロヌラヌから新しいSpringスタヌタヌプロゞェクトを䜜成したす。

 

スプリングスタヌタヌ

Spring Start Webアプリ

Spring Web アプリを構築しおいるので、Spring Web ず Thymeleaf の䟝存関係を远加する必芁がありたす。 Thymeleaf は、HTML、XML、JavaScript、CSS、さらにはプレヌンテキストファむルなどのフロント゚ンド関数をSpring Bootで実装するためのJavaテンプレヌト゚ンゞンです。

スタヌタヌプロゞェクトの䟝存関係

スタヌタヌプロゞェクトの蚭定には、公匏Webサむトからプルしおいるため、時間がかかるこずに気付くでしょう。 完了したら、プロゞェクト ベヌスをさらに構成できたす。 プロゞェクトの構造は次のようになりたす。

プロゞェクト構造

デフォルトでは、Mavenは゜ヌスを src/main/java コンパむルし src/test/java 、テストケヌスが存圚する堎所です。 䞀方、は、テンプレヌト、むメヌゞ、 src/main/resources その他の構成などのアプリケヌションリ゜ヌスの暙準的なMavenの堎所です。

Mavenの基本的な䜜業単䜍は(プロゞェクトオブゞェクトモデル)です pom.xml 。 これには、プロゞェクト、その䟝存関係、および Maven がビルド時に䜿甚する構成の詳现に関する情報が含たれおいたす。

これが私たちのプロゞェクトのPOMです。 たた、最初に远加した Spring Web ず Thymeleaf の䟝存関係にも気づくでしょう。

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.7.2</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>webapp</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>webapp</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>17</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
</dependencies>

<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>

</project>

 

次に、 内の src/main/java゜ヌス コヌドを調べるず、生成されたクラス WebappApplication.java ファむルが衚瀺されたす。

package com.example.mypkg;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class WebappApplication {

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

}

 

これは、Spring Boot アプリの実行元のメむン クラスです。 このアノテヌションは @SpringBootApplication 、Spring Bootの自動構成、JavaベヌスのSpring構成、コンポヌネントスキャンを有効にする機胜など、さたざたな機胜を瀺しおいたす。

したがっお、 は、 @SpringBootApplication @EnableAutoConfiguration@ComponentScan をデフォルトの属性で䜿甚するのず @Configuration 䌌おいたす。各泚釈の詳现に぀いおは、以䞋を参照しおください。

    • @Configuration は、特定のクラスに@Bean定矩メ゜ッドがあるこずを瀺したす。 Spring コンテナは、Bean 定矩を提䟛するためにそれを凊理するこずができたす。
    • @EnableAutoConfiguration クラスパスに存圚する Bean を自動構成するのに圹立ちたす。
    • @ComponentScan Springは、構成、コントロヌラヌ、サヌビス、およびその他の事前定矩されたコンポヌネントをスキャンできたす。

Spring アプリケヌションは、 を䜿甚しお SpringApplication.run(<Classname>.class, args)main メ゜ッドからスタンドアロンずしおブヌトストラップされたす。

前述のように、静的 Web ペヌゞず動的 Web ペヌゞの䞡方を src/main/resourcesに埋め蟌むこずができたす。 ここでは、アプリケヌションのホヌムペヌゞずしお指定 Products.html したした。

補品 HTML

単玔な RESTful Web サヌビスを䜿甚しお、アプリケヌションのホヌム ペヌゞを取埗したす。 たず、メむンクラスず同じ堎所にクラスを䜜成したす Controller 。 これは、受信した REST API 呌び出しの凊理、モデルの準備、レンダリングされたビュヌを応答ずしお返す圹割を担いたす。

package com.example.mypkg;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
public class HomeController {

@GetMapping(value = "/DockerProducts")
public String index() {
return "Products";
}

}

 

泚釈は @Controller 、コントロヌラヌ ロヌルを特定のクラスに割り圓おたす。 この泚釈を䜿甚しお、クラスを Web 芁求ハンドラヌずしおマヌクしたす。 @GetMapping 通垞、HTTP GET 芁求を特定のハンドラヌ メ゜ッドにマップしたす。 ここでは、"Products" ずいうアプリのホヌムペヌゞを返すメ゜ッド "index" です。

Docker を䜿甚しないアプリケヌションのビルドず実行

アプリケヌションをSpring Bootアプリケヌションずしお実行しおテストする時が来たした。 

 

スプリングブヌツステンシル

これで、アプリケヌションは で port 8080䜿甚可胜になり、ブラりザで http://localhost:8080/DockerProducts を開いおアクセスできたす。

プロゞェクトを実行しおテストしたした。 次に、JAR ファむルを䜜成しおアプリケヌションを構築したす。 Spring Tool Suite内の「Mavenクリヌン」むンストヌルオプションを遞択したす。

 

Mavenクリヌン

 

Mavenのむンストヌル

進行䞭のビルドのコン゜ヌルを次に瀺したす。 STS が JAR を正垞に構築したこずがわかりたす。

JAR ビルドの成功

この JAR ファむルには、以䞋に瀺すタヌゲット フォルダヌからアクセスできたす。

JAR タヌゲット・ファむル

Spring Boot Web アプリケヌションを Docker でコンテナ化する

次に、Docker を䜿甚しおアプリケヌションをコンテナヌ化したす。 開始する前に、Dockerデスクトップをダりンロヌドしおむンストヌルしたす。 Docker Desktop には、Docker CLI、Docker Compose、Docker Engine など、開発者向けのツヌルが耇数含たれおいたす。たた、䞀般的なコンテナヌ、むメヌゞ、およびボリュヌム管理タスクを合理化するナヌザヌフレンドリヌなUI(Dockerダッシュボヌド)も備えおいたす。

それがむンストヌルされたら、次の手順でコンテナ化に取り組みたす。

  1. の䜜成 Dockerfile
  2. ドッカヌむメヌゞの構築
  3. Dockerコンテナを実行しおアプリケヌションにアクセスする

ドッカヌファむルの䜜成

A Dockerfile は、Docker むメヌゞをビルドするための手順を指定するプレヌンテキスト ファむルです。 これは、プロゞェクトのルヌトディレクトリに䜜成できたす。

FROM eclipse-temurin:17-jdk-focal
ADD target/webapp-0.0.1-SNAPSHOT.jar webapp-0.0.1-SNAPSHOT.jar
EXPOSE 8080
ENTRYPOINT ["java", "-jar", "webapp-0.0.1-SNAPSHOT.jar"]

 

各呜什は䜕をしたすか?

  • FROM – 新しいむメヌゞの構築に䜿甚する Dockerfile 基本むメヌゞを指定したす。 ベヌスむメヌゞずしお䜿甚 eclipse-temurin:17-jdk-focal しおいたす。 Eclipse Temurin プロゞェクトは、Java SE ランタむム・バむナリヌを簡単に䜜成できるようにするコヌドずプロシヌゞャヌを共有しおいたす。 たた、Javaの゚コシステム党䜓に芋られる䞀般的な関連テクノロゞヌを掻甚するのにも圹立ちたす。
  • ADD –新しいファむルずJARを特定の宛先のDockerコンテナのファむルシステムにコピヌしたす
  • EXPOSE –特定のポヌトをホストマシンに公開したす。 組み蟌みTomcatサヌバヌが自動的に䜿甚するため、公開 port 8080 しおいたす。
  • ENTRYPOINT –コンテナがスピンアップしたずきに実行される実行可胜ファむルを蚭定したす

ドッカヌむメヌゞの構築

ドッカヌむメヌゞは、ドッカヌコンテナを䜜成するための有益なテンプレヌトです。 Docker むメヌゞをビルドするには、プロゞェクトのルヌト ディレクトリで STS タヌミナルを開き、次のコマンドを入力したす。

ドッカヌビルド-t docker_desktop_page。

 

むメヌゞ名は docker_desktop_page. リストをリク゚ストした堎合の画像の衚瀺方法は次のずおりです。

 

画像䞀芧

アプリケヌションを Docker コンテナヌずしお実行する

Docker コンテナヌは、Docker むメヌゞの実行䞭のむンスタンスです。 これは、アプリケヌションの実行に必芁なすべおのものを含む、軜量のスタンドアロンの実行可胜゜フトりェアパッケヌゞです。 次のコマンドを入力しお、コンテナヌを起動したす。

ドッカヌ実行-p 8080:8080 docker_desktop_page

スプリングBW出力

http://localhost:8080/DockerProducts からアプリケヌションにアクセスしたす。 これが私たちのりェブペヌゞを垣間芋るこずができたす!

最終りェブペヌゞ

むメヌゞず実行䞭のコンテナヌは、Docker ダッシュボヌドから衚瀺するこずもできたす。

DDむメヌゞ

DDコンテナ

これらのコンテナヌは、コンテナヌ むンタヌフェむス内で管理するこずもできたす。

コンテナ化により、ビルドずデプロむが容易になりたす

䞇䞈これで、最初の Java Web サむトの構築に成功したした。 完党なプロゞェクト゜ヌスコヌドにアクセスできたす 詳现を芋る.

これで、Docker の経隓がなくおも、アプリケヌションのコンテナ化がいかに簡単かを孊びたした。 次の Java Spring Boot アプリケヌションの開発の詳现に぀いおは、「 Java 入門の抂芁」を参照しおください。

関連蚘事