Spring Boot アプリケーション開発のキックスタート

Dockerでは、活気に満ちた多様で創造的なコミュニティを非常に誇りに思っています。 時々、私たちはブログでコミュニティからのクールな貢献を特集し、私たちのコミュニティが行っている素晴らしい仕事のいくつかを強調しています。 Dockerで何か素晴らしいことに取り組んでいますか? あなたの貢献をアジート・シン・ライナ(@ajeetraina)に送ってください Docker Community Slack そして、私たちはあなたの作品を特集するかもしれません!

適切なアプリケーション フレームワークとテクノロジを選択することは、堅牢で応答性の高い Web アプリの構築を成功させるために重要です。 エンタープライズ開発者は、アプリケーション構築のベスト プラクティスを特定するのに定期的に苦労しています。 2021年の Java開発者生産性レポートによると、調査対象の開発者の62%がメインフレームワークテクノロジーとしてSpring Bootを使用しています。 Javaコミュニティ内でのマイクロサービスに対する需要の高まりが、この重要な採用を推進しています。

アプリ フレームワーク 1

出典 ~ 2021年版Java開発者生産性レポート

 

Spring Boot は、世界をリードする Java Web フレームワークです。 オープンソースのマイクロサービスベースであり、開発者がスケーラブルなJavaアプリを構築するのに役立ちます。 開発者は、自動構成、組み込みサーバー、および簡素化された依存関係管理のためにSpringを気に入っています。 これは、開発チームがサービスをより迅速かつ効率的に作成するのに役立ちます。 したがって、ユーザーは初期設定にほとんど時間をかけません。 これには、重要なパッケージまたはアプリケーションサーバーのダウンロードが含まれます。

開発者が Spring Boot で直面する最大の課題は、並行性、つまり同時に多くのことを行う必要性です。 Spring Boot は、未使用の依存関係を持つデプロイバイナリサイズを不必要に増やす可能性もあります。 これにより、JARが肥大化し、パフォーマンスに影響を与えながらアプリケーション全体のフットプリントを増やす可能性があります。 その他の課題には、カスタマイズされたロギングメカニズムを構築する際の高い学習曲線と複雑さが含まれます。

これらの欠点をどのように相殺できますか? Dockerは、プロジェクトごとに選択したツール、アプリケーションスタック、デプロイ環境を使用して自由に革新できるようにすることで、ワークフローを簡素化および高速化します。 Spring Boot アーティファクトは、Docker コンテナー内で直接実行できます。 これは、マイクロサービスをすばやく作成する必要がある場合に便利です。 このプロセスの動作を見てみましょう。

アプリケーションのビルド

このチュートリアルでは、Spring Boot を使用してアプリケーション開発を高速化する方法について説明します。

まず、Docker を使用せずに、Spring Boot を使用して簡単な Web アプリを作成します。 次に、そのアプリケーション専用の Docker イメージをビルドします。 また、Docker Compose を使用して、コンテナー内にアプリケーションを迅速にデプロイする方法についても説明します。 始めましょう。

主要コンポーネント

始める

システムに Maven および OpenJDK パッケージをインストールしたら、次の手順に従って、Spring Boot を使用して単純な Web アプリケーションを構築します。

Spring Initializr から始める

Spring Initializr は、Spring プロジェクト用のクイックスタートジェネレータです。Java、Kotlin、Groovyの基本言語生成など、いくつかの一般的な概念の実装を備えたJVMベースのプロジェクトを生成するための拡張可能なAPIを提供します。 Spring Initializr は、Apache Maven と Gradle の実装によるビルドシステムの抽象化もサポートしています。 さらに、実際のプロジェクトを生成し、そのメタデータを既知の形式で提供するためのWebエンドポイントを公開します。 これにより、サードパーティのクライアントは必要な場所で支援を提供できます。

ZIP ファイルを生成するために、この 事前に初期化されたプロジェクト を開きます。 これがどのように見えるかです:

スクリーンショット 2022 05 24 at 12.22.午前00時2分

 

このデモでは、メタデータ用に Maven ビルド自動化と Java (Spring Web 依存関係)、および Java 17 を組み合わせました。

 

スクリーンショット 2022 05 24 at 1.06. 22午前

 

「生成」をクリックして「スプリングブートドッカー.zip」をダウンロードします。 unzip コマンドを使用してファイルを抽出します。

プロジェクト構造

ファイルを解凍すると、次のプロジェクト ディレクトリ構造が表示されます。

tree spring-boot-docker
spring-boot-docker
├── HELP.md
├── mvnw
├── mvnw.cmd
├── pom.xml
└── src
├── main
│   ├── java
│   │   └── com
│   │       └── example
│   │           └── springbootdocker
│   │               └── SpringBootDockerApplication.java
│   └── resources
│       ├── application.properties
│       ├── static
│       └── templates
└── test
└── java
└── com
└── example
└── springbootdocker
└── SpringBootDockerApplicationTests.java

 

ディレクトリには src/main/java  プロジェクトのソース コードが含まれ、ディレクトリには src/test/java テスト ソースが含まれ、 pom.xml ファイルはプロジェクトのプロジェクト オブジェクト モデル (POM) です。

この pom.xml ファイルは、Maven プロジェクトの構成の中核です。 これは、カスタマイズされたプロジェクトをビルドするために必要なほとんどの情報を含む単一の構成ファイルです。 POMは巨大で、気が遠くなるように思えるかもしれません。 ありがたいことに、それを効果的に使用するために、すべての複雑さを理解する必要はまだありません。 プロジェクトのPOMは次のとおりです。

<?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.5.13</version>
		<relativePath/> <!-- lookup parent from repository -->
	</parent>
	<groupId>com.example</groupId>
	<artifactId>spring-boot-docker</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<name>spring-boot-docker</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>
	</dependencies>

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

</project>

 

ファイルは、 SpringbootDockerApplication.java com.example.springbootdocker 必要なSpringフレームワークをパッケージ化してインポートします。 多くのSpring Boot開発者は、自動構成、コンポーネントスキャン、および追加の構成定義を「アプリケーションクラス」に使用するアプリを好みます。 1 つの @SpringBootApplication  注釈を使用して、これらの機能を有効にすることができます。 同じ注釈により、現在のパッケージとそのサブパッケージのコンポーネントスキャンもトリガーされます。 これを設定し、ベースパッケージを手動で指定することで別の場所に移動することもできます。

次の例に示すように、クラシック コントローラーに注釈を付けて "Hello World!" を表示する単純な RESTful Web サービスを作成しましょう。

package com.example.springbootdocker;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@SpringBootApplication
public class SpringBootDockerApplication {

        @RequestMapping("/")
        public String home() {
                return "Hello World!";
        }

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

}

 

@RestControler 他の @RequestMapping 2つの人気のある注釈です。 このアノテーションにより @RestController 、RESTful Web サービスの作成が単純化されます。 これは便利に結合 @Controller@ResponseBody 、コントローラクラスのすべての要求処理メソッドに注釈を付ける @ResponseBody 必要がなくなります。 一方、アノテーションはWebリクエストを @RequestMapping スプリングコントローラメソッドにマップします。

まず、クラス @SpringBootApplication @RestControllerにフラグを立てることができます と として 、Spring MVCにWebリクエストに利用させます。@RequestMapping / を home() メソッドにマップし、Hello World レスポンスを送信します。main() メソッドは、Spring Boot の SpringApplication.run() メソッドを使用してアプリケーションを起動します。

次のコマンドは、コンパイルされたコードを取得し、JAR などの配布可能な形式にパッケージ化します。

./mvnw パッケージ

[INFO] Scanning for projects...
[INFO]
[INFO] -------------------&amp;lt; com.example:spring-boot-docker &amp;gt;-------------------
[INFO] Building spring-boot-docker 0.0.1-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO]
[INFO] --- maven-resources-plugin:3.2.0:resources (default-resources) @ spring-boot-docker ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Using 'UTF-8' encoding to copy filtered properties files.
[INFO] Copying 1 resource
[INFO] Copying 0 resource
[INFO]
[INFO] --- maven-compiler-plugin:3.8.1:compile (default-compile) @ spring-boot-docker ---
[INFO] Nothing to compile - all classes are up to date
[INFO]
[INFO] --- maven-resources-plugin:3.2.0:testResources (default-testResources) @ spring-boot-docker ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Using 'UTF-8' encoding to copy filtered properties files.
[INFO] skip non existing resourceDirectory /Users/johangiraldohurtado/Downloads/spring-boot-docker/src/test/resources
[INFO]
[INFO] --- maven-compiler-plugin:3.8.1:testCompile (default-testCompile) @ spring-boot-docker ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 1 source file to /Users/johangiraldohurtado/Downloads/spring-boot-docker/target/test-classes
[INFO]
[INFO] --- maven-surefire-plugin:2.22.2:test (default-test) @ spring-boot-docker ---
…
…
[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 4.37 s - in com.example.springbootdocker.SpringBootDockerApplicationTests
[INFO]
[INFO] Results:
[INFO]
[INFO] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
[INFO]
[INFO]
[INFO] --- maven-jar-plugin:3.2.2:jar (default-jar) @ spring-boot-docker ---
[INFO] Building jar: /Users/johangiraldohurtado/Downloads/spring-boot-docker/target/spring-boot-docker-0.0.1-SNAPSHOT.jar
[INFO]
[INFO] --- spring-boot-maven-plugin:2.5.13:repackage (repackage) @ spring-boot-docker ---
[INFO] Replacing main artifact with repackaged archive
[INFO] ------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  11.461 s
[INFO] Finished at: 2022-05-12T12:50:12-05:00
[INFO] ------------------------------------------------------------------------

JAR ファイルとしてのアプリパッケージの実行

JAR を正常にビルドしたら、アプリ パッケージを JAR ファイルとして実行します。

java -jar target/spring-boot-docker-0.0.1-SNAPSHOT.jar

結果は次のとおりです。

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

2022-05-12 13:02:35.591  INFO 3594 --- [           main] c.e.s.SpringBootDockerApplication        : Starting SpringBootDockerApplication v0.0.1-SNAPSHOT using Java 17.0.2 on Johans-MacBook-Air.local with PID 3594 (/Users/johangiraldohurtado/Downloads/spring-boot-docker/target/spring-boot-docker-0.0.1-SNAPSHOT.jar started by johangiraldohurtado in /Users/johangiraldohurtado/Downloads/spring-boot-docker)
2022-05-12 13:02:35.597  INFO 3594 --- [           main] c.e.s.SpringBootDockerApplication        : No active profile set, falling back to 1 default profile: "default"
2022-05-12 13:02:37.958  INFO 3594 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8080 (http)
2022-05-12 13:02:37.979  INFO 3594 --- [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
2022-05-12 13:02:37.979  INFO 3594 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet engine: [Apache Tomcat/9.0.62]
2022-05-12 13:02:38.130  INFO 3594 --- [           main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2022-05-12 13:02:38.130  INFO 3594 --- [           main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 2351 ms
2022-05-12 13:02:39.015  INFO 3594 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8080 (http) with context path ''
2022-05-12 13:02:39.050  INFO 3594 --- [           main] c.e.s.SpringBootDockerApplication        : Started SpringBootDockerApplication in 4.552 seconds (JVM running for 5.486)

 

これで、 http://localhost:8080 の Web ブラウザーまたは次の curl コマンドを使用して、"Hello World" ページにアクセスできます。

curl localhost:8080
Hello World

 

この例のために以前に開発したコードにアクセスするには、 ここ をクリックしてください。

Spring ブートアプリケーションのコンテナ化

Dockerは、Javaアプリケーションをコンテナ化するのに役立ち、完全なSpringアプリケーション、ランタイム、構成、およびOSレベルの依存関係をバンドルできます。 これには、クロスプラットフォームのマルチアーキテクチャWebアプリケーションを出荷するために必要なすべてのものが含まれます。

Docker公式イメージを使用して、Dockerコンテナ内でこのアプリを簡単に実行する方法を評価しましょう。 まず、 Dockerデスクトップをダウンロードする必要があります。 Docker Desktop は、有用なイメージを見つけやすくしながら、イメージ構築プロセスを高速化します。 ダウンロードが完了したら、インストールプロセスを完了します。

Docker は Dockerfile を使用して、各イメージの "レイヤー" を指定します。 各レイヤーには、基本イメージの標準構成に起因する重要な変更が格納されます。 Spring Boot プロジェクトに次の空の Dockerfile を作成します。

タッチドッカーファイル

お気に入りのテキスト エディターを使用して、この Dockerfile を開きます。 次に、基本イメージを定義する必要があります。

Java プログラムを実行するために Docker イメージを作成する場合は、ビルド プロセスを高速化し、コンテナーをより速いペースで起動するのに役立つ、より小さな基本イメージを使用することを常にお勧めします。 また、単純なプログラムを実行するには、コードの開発やコンパイルが不要なため、JDKの代わりにJREを使用する必要があります。

アップストリームのJava JDKは、公式のJREパッケージを配布していません。したがって、Docker  Hub で利用可能な一般的な eclipse-temurin:17-jdk-focal Docker イメージを活用します。 Eclipse Temurin プロジェクトは、ランタイムバイナリの構築をサポートするコードとプロセス、および高性能でエンタープライズ規模のクロスプラットフォームである関連テクノロジーを提供します。

日食テムリンから:17-JDK-フォーカル

次に、イメージのアプリケーション コードを格納するディレクトリをすばやく作成しましょう。 これは、アプリケーションの作業ディレクトリとして機能します。

WORKDIR /app

次の COPY 命令は、Maven ラッパーと pom ファイルをホスト マシンからコンテナー イメージにコピーします。pom.xmlファイルには、依存関係、ビルドディレクトリ、ソースディレクトリ、テストソースディレクトリ、プラグイン、目標など、プロジェクトをビルドするためのプロジェクトと構成情報が含まれています。

コピー .mvn/ ./mvn

コピー mvnw pom.xml ./

次の RUN 命令は、プラグインとレポート、およびそれらの依存関係を含むすべてのプロジェクトの依存関係を解決する目標をトリガーします。

実行 ./mvnw 依存性:オフラインにする

次に、Mavenプロジェクトの最も重要なディレクトリである/srcをコピーする必要があります。 これには、アーティファクトのJavaソースコードと事前環境構成ファイルが含まれています。

COPY src ./src

Spring Boot Maven プラグインには、アプリケーションをすばやくコンパイルして実行するために使用できる実行目標が含まれています。 最後の行は、アプリ パッケージをコンパイルして実行するように Docker に指示します。

CMD ["./mvnw", "スプリングブーツ:ラン"]

完全なドッカーファイルは次のとおりです。

FROM eclipse-temurin:17-jdk-focal

WORKDIR /app

COPY .mvn/ .mvn
COPY mvnw pom.xml ./
RUN ./mvnw dependency:go-offline

COPY src ./src

CMD ["./mvnw", "spring-boot:run"]

ドッカーイメージの構築

次に、Docker イメージをビルドする必要があります。 次のコマンドを入力してこのプロセスを開始すると、すぐに出力が生成されます。

docker build --platform linux/amd64 -t spring-helloworld .

docker image ls
REPOSITORY          TAG       IMAGE ID       CREATED         SIZE
spring-helloworld   latest    4cf762a7b96d   4 minutes ago   124MB

 

Docker Desktop の直感的なダッシュボードを使用すると、コンテナー、アプリケーション、イメージを Docker Desktop 内から直接管理できます。 GUIは、数回クリックするだけでこれを可能にします。 それでも可能ですが、これらのコアアクションを実行するためにCLIを使用する必要はありません。

上部のクジラ メニュー アイコンから [ダッシュボード] を選択して、Docker ダッシュボード にアクセスします。

スクリーンショット 2022 05 25 at 9.07. 04午前

[画像]をクリックします。[イメージ] ビューには Docker イメージの一覧が表示され、イメージを機能的なコンテナーとして実行できます。

スクリーンショット 2022 05 25 at 9.10.午前6時

さらに、イメージを Docker Hub に直接プッシュして、共有とコラボレーションを簡単に行うことができます。

スクリーンショット 2022 05 25 at 9.11.午前22時

[イメージ] ビューには、[検査] オプションも含まれています。これにより、環境変数、ポート情報などが表示されます。 重要なのは、 イメージ ビューを使用すると、イメージから直接コンテナーを実行できることです。 必要に応じて、コンテナーの名前、公開ポート、マウントされたボリュームを指定するだけです。

スクリーンショット 2022 05 25 at 9.23. 24午前

スプリングブートドッカーコンテナを実行する

Docker は、分離されたコンテナーでプロセスを実行します。 コンテナーは、ローカルまたはリモートのホスト上で実行されるプロセスです。 オペレーターが docker run を実行すると、実行されるコンテナー プロセスは、独自のファイル システム、ネットワーク、およびホストからの個別のプロセス ツリーで分離されます。

次の docker run コマンドは、最初に指定されたイメージに対して書き込み可能なコンテナーレイヤーを作成してから、それを開始します。

ドッカーラン-p 8080:8080 -tスプリング-ハローワールド

これがあなたの結果です:

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

2022-05-12 18:31:38.770  INFO 1 --- [           main] c.e.s.SpringBootDockerApplication        : Starting SpringBootDockerApplication v0.0.1-SNAPSHOT using Java 17.0.2 on 3196593a534f with PID 1 (/app.jar started by root in /)
2022-05-12 18:31:38.775  INFO 1 --- [           main] c.e.s.SpringBootDockerApplication        : No active profile set, falling back to 1 default profile: "default"
2022-05-12 18:31:39.434  INFO 1 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat initialized with port(s): 8080 (http)
2022-05-12 18:31:39.441  INFO 1 --- [           main] o.apache.catalina.core.StandardService   : Starting service [Tomcat]
2022-05-12 18:31:39.442  INFO 1 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet engine: [Apache Tomcat/9.0.62]
2022-05-12 18:31:39.535  INFO 1 --- [           main] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2022-05-12 18:31:39.535  INFO 1 --- [           main] w.s.c.ServletWebServerApplicationContext : Root WebApplicationContext: initialization completed in 682 ms
2022-05-12 18:31:39.797  INFO 1 --- [           main] o.s.b.w.embedded.tomcat.TomcatWebServer  : Tomcat started on port(s): 8080 (http) with context path ''
2022-05-12 18:31:39.805  INFO 1 --- [           main] c.e.s.SpringBootDockerApplication        : Started SpringBootDockerApplication in 1.365 seconds (JVM running for 1.775)

 

Docker ダッシュボードに移動し、ブラウザーでアプリを開きます。

スクリーンショット 2022 05 25 at 9.31. 27午前

次に、[ ログ] をクリックしてアプリの動作を確認します。

スクリーンショット 2022 05 25 at 9.32. 午前50時

Docker ダッシュボードの [統計 ] タブでは、CPU 消費量、メモリ使用量、ディスクの読み取りと書き込み、およびネットワークの使用状況を表示できます。

スクリーンショット 2022 05 25 at 9.42. 49午前

コンテナー化されたアプリケーションの機能は、 次の URL http://localhost:8080 で確認することもできます。

curl localhost:8080
Hello Developers From Docker!

 

Spring Bootを使い始めるための別の方法を模索したいですか? あなたのような開発者向けに構築されたこの Dockerイメージ をチェックしてください。

Docker Composeを使用したマルチコンテナスプリングブートアプリの構築

サンプルの Spring Boot アプリをビルドし、関連する Docker イメージを作成する方法を効果的に学習しました。 次に、Docker Compose を使用してマルチコンテナーの Spring Boot アプリを作成しましょう。

このデモでは、人気のある 素晴らしい作成リポジトリを活用します。

リポジトリのクローン作成

git clone https://github.com/docker/awesome-compose

 

spring-postgres プロジェクトと一致するようにディレクトリを変更すると、次のプロジェクトディレクトリ構造が表示されます。

.
├── README.md
├── backend
│   ├── Dockerfile
│   ├── pom.xml
│   └── src
│       └── main
│           ├── java
│           │   └── com
│           │       └── company
│           │           └── project
│           │               ├── Application.java
│           │               ├── controllers
│           │               │   └── HomeController.java
│           │               ├── entity
│           │               │   └── Greeting.java
│           │               └── repository
│           │                   └── GreetingRepository.java
│           └── resources
│               ├── application.properties
│               ├── data.sql
│               ├── schema.sql
│               └── templates
│                   └── home.ftlh
├── db
│   └── password.txt
└── docker-compose.yaml

13 directories, 13 files

 

私たちの docker compose ファイルでもピークを見てみましょう:

services:
  backend:
    build: backend
    ports:
      - 8080:8080
    environment:
      - POSTGRES_DB=example
    networks:
      - spring-postgres
  db:
    image: postgres
    restart: always
    secrets:
      - db-password
    volumes:
      - db-data:/var/lib/postgresql/data
    networks:
      - spring-postgres
    environment:
      - POSTGRES_DB=example
      - POSTGRES_PASSWORD_FILE=/run/secrets/db-password
    expose:
      - 5432
volumes:
  db-data:
secrets:
  db-password:
    file: db/password.txt
networks:
  spring-postgres:

 

作成ファイルは、バックエンドと db の 2 つのサービスを持つアプリケーションを定義します。 アプリケーションのデプロイ中に、docker compose は、ファイルごとにバックエンド サービス コンテナーのポート 8080 をホストのポート 8080 にマップします。 ホストのポート 8080 がまだ使用されていないことを確認します。

作成ファイルを使用して、環境変数を決定できます。 たとえば、バックエンド サービスで接続されたデータベースを指定できます。 データベースでは、データベースの名前、パスワード、およびパラメータを定義できます。

指定されたサービスからコンテナーを再作成できる作成ファイルの動作のおかげで、重要な情報を格納するボリュームを定義することが重要です。

docker 作成コマンドを実行してアプリケーションを起動します。

ドッカーコンポーズアップ-d

コンテナーの一覧には、次に示すように、実行中の 2 つのコンテナーとそのポート マッピングが表示されます。

docker compose ps
Name                         Command               State           Ports
-------------------------------------------------------------------------------------------
spring-postgres_backend_1   java -cp app:app/lib/* com ...   Up      0.0.0.0:8080-&amp;gt;8080/tcp
spring-postgres_db_1        docker-entrypoint.sh postgres    Up      5432/tcp

 

アプリケーションが起動したら、Web ブラウザーで [http://localhost:8080 ] に移動します。 次のカールを実行してWebページを形成することもできます。

$ curl localhost:8080
<!DOCTYPE HTML>
<html>
<head>
  <title>Getting Started: Serving Web Content</title>
  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
	<p>Hello from Docker!</p>
</body>

コンテナの停止と削除

サンプル アプリケーションが正常にビルドされました。おめでとうございます。 ただし、今度はオフラインにする時が来ました。 これは、次のコマンドを使用してすばやく簡単に実行できます。

$ docker compose down
Stopping spring-postgres_db_1      ... done
Stopping spring-postgres_backend_1 ... done
Removing spring-postgres_db_1      ... done
Removing spring-postgres_backend_1 ... done
Removing network spring-postgres_default

 

または、Docker Desktopのサイドバーから[コンテナ/アプリ]セクションに移動し、アクティブな各コンテナにカーソルを合わせて、四角い[停止]ボタンをクリックします。 このプロセスには約10秒かかり、コンテナをエレガントにシャットダウンします。

結論

Spring Boot アプリケーションをコンテナー化する方法と、それがよりスムーズなデプロイに役立つ理由について説明しました。 また、Docker Compose を利用して、シンプルな 2 層構造の Web アプリケーションを構築しました。 このプロセスは迅速であり、特にDockerデスクトップを使用している間、貴重な時間を他の開発タスクに費やすことができます。 成功するためにコンテナやDockerに関する高度な知識は必要ありません。

参照:

 

フィードバック

「春のブートアプリケーション開発をキックスタートする」に関する0の考え