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 語の説明

推薦する

U-Mail: メールマーケティングのタブーと行動規範

月収10万元の起業の夢を実現するミニプログラム起業支援プラン最近、U-Mailのウェブサイトをよくフ...

ウェブサイトのアンカーテキスト内部リンクの役割を見落としている可能性があります

ウェブマスターや SEO 担当者がウェブサイトのコンテンツを書くとき、テキストにキーワード アンカー...

V5Net: 物理マシンプロモーション、香港 CN2 サーバー 30% オフ、香港インターナショナル + 香港ハイディフェンス + 韓国 BGP 20% オフ

v5server は現在、香港データセンターの専用サーバーを 30% 割引で提供しています。このサー...

A5 Webmaster Networkの第3回サーバーウェブサイトセキュリティトレーニングの申し込み受付中

なぜサーバー ウェブサイト セキュリティ トレーニングに参加する必要があるのでしょうか? 最新の統計...

VMware管理クラスタは管理を支援できる

VMware 管理クラスターは、管理ツールを整理し、問題が発生した場合に重要なソフトウェアとハ​​ー...

SEOは長期的な発展を目指しています。グレーな業界には近づかないでください。

今日正午、SEOの友人のウェブサイトがハッキングされたので、彼は私の2番目の兄(朱偉坤先生)に相談し...

ウェブマスターネットワークからの毎日のレポート:ソーシャルQ&Aウェブサイトが増加、Sina Weiboが正式にリストアップ

1. 垂直型電子商取引が「資本+利益」詐欺を打破するのは難しいのか?外部の力を借りて生き残ることがで...

トラフィック調査: Python がプログラマーと企業に最も多く検索されるプログラミング言語に

技術の急速な発展により、すべてのソフトウェア開発者、エンジニア、その他の技術者は、常に技術の最前線に...

alphavps.bg-4 USD/KVM/2 GB RAM/50 GB HDD/1 TB トラフィック

AlphaVPS.bg は、2017 年に設立された DA International Group ...

モノのインターネットにおけるクラウドコンピューティングの応用の分析

モノのインターネットは、インターネットの発展から生まれたネットワーク概念です。モノのインターネット技...

ファーウェイクラウドウランチャブデータセンターが国家新データセンターリストに選出

工業情報化部は3月28日、新データセンターの建設と応用を加速し、経済社会の各分野のデジタル変革をより...

virmach 30%割引コードが市場に再登場、ローエンドVPS業界の価格は血まみれ、コンピュータルームを切り替える+ IPを切り替える+ Windows

低価格 VPS 業界の屠殺業者である virmach は、すでに低価格戦略を展開している中で、今月、...

#黒5# hostgator: 最大 85% オフ、安定した強力な cpanel ホスティング、OpenStack クラウド サーバーなど。

大手ブランドの cpanel パネルを備えた安定した Web ホスティングがお好みなら、これは年に一...