Docker を使用した Spring Boot アプリケーションのコンテナ化

Docker を使用した Spring Boot アプリケーションのコンテナ化

Spring Boot アプリケーションを Docker 化する場合、スムーズで効率的なデプロイメントを実現するためには、ベスト プラクティスに従うことが重要です。この記事では、これらのプラクティスを詳しく説明し、Docker 化プロセスを簡素化するのに役立つコード例を示します。

1 適切なベースイメージを選択する

Spring Boot アプリケーションに適切なベースイメージを選択することは非常に重要です。互換性と効率性を確保するために、Java バージョンと一致する OpenJDK ベース イメージを選択します。以下は OpenJDK 11 を使用したサンプル コード スニペットです。

 FROM openjdk:11 COPY target/my-application.jar app.jar ENTRYPOINT ["java", "-jar", "/app.jar"]

2. 合理化されたイメージを構築する

転送を高速化し、ストレージ要件を削減し、コンテナの起動を高速化するために、Docker イメージを可能な限り小さく保ちます。これを実現するには、マルチステージビルドを使用します。次に例を示します。

 # 第一阶段:构建应用程序FROM maven:3.8.3-jdk-11 AS build COPY . /app WORKDIR /app RUN mvn package -DskipTests # 第二阶段:创建精简镜像FROM openjdk:11-jre-slim COPY --from=build /app/target/my-application.jar /app.jar ENTRYPOINT ["java", "-jar", "/app.jar"]

3 環境変数の使用

環境変数を使用して、Docker イメージを再構築せずに Spring Boot アプリケーションを動的に構成します。次の例では、プロファイルをアクティブにする環境変数を設定します。

 FROM openjdk:11 ENV SPRING_PROFILES_ACTIVE=production COPY target/my-application.jar app.jar ENTRYPOINT ["java", "-jar", "/app.jar"]

4 Docker Compose を使用したサービスの定義

Docker Compose を使用してアプリケーションのサービスと依存関係を定義し、管理と展開のプロセスを簡素化します。次の例は、Spring Boot アプリケーションと MySQL データベースを定義する方法を示しています。

 version: '3' services: db: image: mysql:5.7 environment: MYSQL_ROOT_PASSWORD: my-secret-pw MYSQL_DATABASE: my-database volumes: - db_data:/var/lib/mysql web: build: . ports: - "8080:8080" environment: SPRING_DATASOURCE_URL: jdbc:mysql://db:3306/my-database SPRING_DATASOURCE_USERNAME: root SPRING_DATASOURCE_PASSWORD: my-secret-pw volumes: db_data:

5 リバースプロキシの使用

リバース プロキシを使用して着信トラフィックを管理することで、アプリケーションのスケーラビリティ、セキュリティ、負荷分散を強化します。以下は、Docker Compose 環境で Nginx をリバース プロキシとして使用する例です。

 version: '3' services: web: build: . environment: SPRING_PROFILES_ACTIVE: production ports: - "8080:8080" proxy: image: nginx ports: - "80:80" volumes: - ./nginx.conf:/etc/nginx/nginx.conf:ro depends_on: - web

6 ヘルスチェックによる監視

ヘルスチェックを実装してアプリケーションの正常性を確保し、アプリケーションの状態に基づいて自動的に回復またはスケーリングします。次のように Docker イメージにヘルスチェックを追加します。

 FROM openjdk:11 COPY target/my-application.jar app.jar HEALTHCHECK --interval=5s \ --timeout=3s \ CMD curl -f http://localhost:8080/actuator/health || exit 1 ENTRYPOINT ["java", "-jar", "/app.jar"]

7. Docker Cache による最適化

Docker キャッシュを使用すると、イメージの構築を高速化できます。マルチステージビルドと依存関係のキャッシュにより、ビルド時間を大幅に短縮できます。次に例を示します。

 FROM openjdk:11 as builder WORKDIR /app COPY pom.xml . RUN mvn dependency:go-offline COPY src/ ./src/ RUN mvn package -DskipTests FROM openjdk:11 COPY --from=builder /app/target/my-application.jar app.jar ENTRYPOINT ["java", "-jar", "/app.jar"]

8 .dockerignore ファイルの使用

.dockerignore ファイルを使用して、Docker ビルド コンテキストから不要なファイルとディレクトリを除外し、ビルドのパフォーマンスとセキュリティを向上させます。

 # 忽略根目录下的所有文件* # 包含src 目录!src/ # 包含pom.xml 文件!pom.xml # 排除target 目录及其内容target/

9. タグを使用してメタデータを追加する

メタデータ タグを追加することで、Docker イメージの使いやすさと保守性を向上させます。これらのタグは、バージョンやメンテナーなど、イメージに関する情報を提供します。次に例を示します。

 FROM openjdk:11 LABEL maintainer="John Doe <[email protected]>" LABEL versinotallow="1.0" LABEL descriptinotallow="My Spring Boot application" COPY target/my-application.jar app.jar ENTRYPOINT ["java", "-jar", "/app.jar"]

10. コンテナオーケストレーションを採用する

実稼働環境では、Kubernetes や Docker Swarm などのコンテナ オーケストレーション ツールを使用します。これらのツールは、展開、スケーリング、管理を自動化し、高い可用性とスケーラビリティを保証します。以下は、Kubernetes デプロイメント ファイルのサンプル スニペットです。

 apiVersion: apps/v1 kind: Deployment metadata: name: my-application labels: app: my-application spec: replicas: 3 selector: matchLabels: app: my-application template: metadata: labels: app: my-application spec: containers: - name: my-application image: my-registry/my-application:1.0 ports: - containerPort: 8080

要約すると、これらのベスト プラクティスに従うことで、Spring Boot アプリケーションの Docker 化のプロセスが大幅に簡素化され、開発者は Docker を最大限に活用して、さまざまなプラットフォームへの展開を容易にできるようになります。

<<:  クラウドネイティブなデータガバナンスソリューションを設計する方法

>>:  Didi の弾力性のあるクラウド ハイブリッド展開の実装に関する 10,000 語の説明

推薦する

ウェブサイトの勝利戦略

インターネット上に自分だけの楽園を作りたいと思うネットユーザーはますます増えており、ウェブマスターと...

悪くない!ニューヨークのVultrの月額2.50ドルのVPSの簡単なレビュー

Vultrの512Mメモリ搭載の2.5ドルのKVM VPSは数日前から再入荷しています。今回Vult...

オープンソースはイノベーションの可能性を刺激し、RHEL 9 は「イノベーション センター」を定義します

「オープンソースは世界中の可能性を刺激することができます。それは、イノベーションを制限する2つの根本...

鍾志新:百度は新しいサイトのための新しいルールを策定した(推測)

過去 1 か月間、フォーラムやグループで多くの友人が「私の Web サイトは 1 か月以上構築されて...

セール中の共有ホスティングブランドのリスト

2017年のブラックフライデーには、海外のウェブホスティングブランドも当然プロモーションを実施します...

外部リンクの浮き沈みは検索エンジンのデータの削除によるものである

Baidu は数日前に大規模なアップデートを実施し、インデックスされたウェブサイトの数と外部リンクの...

Baiduのホットワードを使ってオリジナル作品を簡単に作る方法

偽オリジナリティに対する私の嫌悪感は長年続いている。自分のウェブサイトを持つ前は、検索エンジンで検索...

Raksmart 韓国 VPS シンプルレビュー、中国と韓国への直接接続、超高性能

韓国の VPS は当然中国に近いため、直接接続の条件下では速度は当然非常に速くなります。ウェブマスタ...

SEOはあなたの生命線ではない

近年の SEO 業界の急速な発展に伴い、SEO 最適化は徐々に多くの企業にとって重要なプロモーション...

7月12日の百度の調整結果に関する詳細な分析と提案

十数個のウェブサイトのデータを数え終えたところです。今朝目覚めると、手元にある十数個のウェブサイトが...

iovz: 韓国CN2+SK\香港3ネットワーク直結\ロサンゼルスAS4837、クラウドサーバー/独立サーバー、月払い20%割引\年払い30%割引

iovz は現在、韓国、香港、ロサンゼルスのデータセンターのクラウド サーバーと独立サーバーに特別割...

推奨: kazila-weird merchant/Xen/年間30ドルの支払い/64Mメモリ/3Gハードディスク/50gトラフィック

kazila.com は Hostcat に何度も登場しています。この VPS 販売業者は 2008...

vdsmarket: 月額 0.99 ドル、ロシア VPS、KVM/Windows 互換/無制限トラフィック

Russia は、ロシアのチェリャビンスクに拠点を置くホスティング ビジネスです。Web サイトは英...

Googleは昨年、検索アルゴリズムを450回調整した。

Google は社内の仕組みについて口を閉ざしていることで知られているが、うっかり漏れてしまうような...