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

プロダクトマーケターとしてDockerでインターンをしているときに、このブログを発表できることを非常に嬉しく思います。 この素晴らしい経験は、私に多くの新しいアイデアをブレインストーミングする機会を与えてくれました。 以前のJava開発者として、私はいつもJavaとSpring Bootがどのように一緒に働くかに驚いていました! このブログの完成を後押ししたすべての人に叫びます!

 

過去30年間、Web開発は複数の業界で不可欠になっています。 開発者は長い間、 JavaSpring Framework をWeb開発、特にサーバー側で使用してきました。

Javaは「古いものは金」の哲学に従います。 そして、25年以上にわたって進化した後も、今日最も人気のある プログラミング言語の1つです。 Google、LinkedIn、eBay、Amazon、Stack Overflowを含む5000万のウェブサイト がJavaを広範囲に使用している。

 

ジャワとドッカーの出会い

このブログでは、単純な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 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 のインストール

進行中のビルドのコンソールを次に示します。 STS が 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 入門の概要」を参照してください。