Docker コンテナ内で Java EE ウェブアプリを構築する方法

DockerBeginner
オンラインで実践に進む

はじめに

このチュートリアルでは、Java EE ウェブアプリケーションを構築し、それを Docker コンテナにデプロイする方法を学びます。Docker は人気のあるコンテナ化プラットフォームで、アプリケーションとその依存関係を単一のポータブルなユニットにパッケージ化することができ、ソフトウェアの開発、テスト、デプロイを容易にします。このガイドの最後まで進めることで、Docker を活用して Java EE ウェブアプリケーションの開発とデプロイを効率化する方法をより深く理解することができます。

Docker と Java EE の紹介

Docker とは?

Docker は、開発者がコンテナ内でアプリケーションを構築、デプロイ、実行できるオープンソースのプラットフォームです。コンテナは軽量で独立した実行可能なソフトウェアパッケージで、コード、ランタイム、システムツール、ライブラリなど、アプリケーションを実行するために必要なすべての要素を含んでいます。Docker は、さまざまなコンピューティングプラットフォーム間で一貫した信頼性の高い環境を提供することで、アプリケーションの作成、デプロイ、管理のプロセスを簡素化します。

Java EE とは?

Java EE (Java Enterprise Edition) は、大規模なエンタープライズレベルのアプリケーションを開発および実行するための Java API とランタイム環境のコレクションです。分散型の多層 Java アプリケーションを構築するための標準的なサービス、API、プロトコルを提供します。Java EE には、ウェブサービス、セキュリティ、トランザクション管理などの機能が含まれており、エンタープライズレベルのウェブアプリケーションを構築する際の人気のある選択肢となっています。

Docker を使用して Java EE アプリケーションをコンテナ化する利点

Docker を使用して Java EE アプリケーションをコンテナ化することにはいくつかの利点があります。

  • 一貫したデプロイ: Docker コンテナは、アプリケーションとその依存関係が一緒にパッケージ化されることを保証し、さまざまなコンピューティングプラットフォーム間で一貫した信頼性の高い環境を提供します。
  • スケーラビリティ: Docker を使用すると、需要に応じてアプリケーションを簡単に拡張または縮小でき、システム全体のパフォーマンスとリソース利用率が向上します。
  • 分離性: コンテナは高度な分離性を提供し、あるアプリケーションの依存関係や設定が同じホスト上で実行されている他のアプリケーションに干渉しないことを保証します。
  • ポータビリティ: Docker コンテナは、複雑な設定変更を必要とせずに、異なる環境(開発、ステージング、本番など)間で簡単に移動できます。
  • 効率性: Docker コンテナは軽量で、従来の仮想マシンと比較して少ないリソースを使用するため、アプリケーションのデプロイと実行により効率的です。

Docker と Java EE の始め方

Docker と Java EE を始めるには、システムに Docker をインストールする必要があります。公式の Docker ウェブサイト (https://www.docker.com/get-started) から Docker をダウンロードしてインストールできます。Docker をインストールしたら、Docker コンテナ内で Java EE アプリケーションを構築して実行を開始できます。

graph TD
    A[Java EE Application] --> B[Docker Container]
    B --> C[Docker Host]
    C --> D[Docker Engine]
    D --> E[Host Operating System]

次のセクションでは、Java EE ウェブアプリケーションを開発し、Docker を使用してコンテナ化するプロセスについて詳しく説明します。

Java EE ウェブアプリケーションの開発

Java EE ウェブアプリケーションの作成

Java EE ウェブアプリケーションを開発するには、IntelliJ IDEA、Eclipse、NetBeans などの統合開発環境 (IDE) を使用できます。これらの IDE は、開発プロセスを簡素化するためのツールとフレームワークを提供します。

以下は、Jakarta EE(旧称 Java EE)を使用して簡単な Java EE ウェブアプリケーションを作成する方法の例です。

  1. 新しいプロジェクトを作成する: IDE で、新しい Maven または Gradle プロジェクトを作成し、「Java EE」または「Jakarta EE」のプロジェクトテンプレートを選択します。
  2. 依存関係を追加する: プロジェクトの pom.xml または build.gradle ファイルに、jakarta.servlet-apijakarta.faces-api など、Java EE ウェブアプリケーションに必要な依存関係と、使用する予定の他のライブラリを追加します。
  3. アプリケーションロジックを開発する: Java クラス、JSF (JavaServer Faces) または Servlet コンポーネント、およびウェブアプリケーションのビジネスロジックを実装するために必要なその他のファイルを作成します。
  4. ウェブアプリケーションを構成する: プロジェクト内に web.xml ファイルを作成するか(またはアノテーションを使用して)、サーブレット、フィルター、およびその他のウェブアプリケーション設定を構成します。
  5. アプリケーションをビルドしてテストする: IDE のビルドと実行機能を使用して、Java EE ウェブアプリケーションをローカルでコンパイル、パッケージ化、テストします。
graph TD
    A[Java EE Web Application] --> B[Jakarta EE API]
    B --> C[Servlet Container]
    C --> D[Application Server]
    D --> E[Host Operating System]

Java EE ウェブアプリケーションのデプロイ

Java EE ウェブアプリケーションを開発したら、Apache Tomcat、WildFly、GlassFish などのアプリケーションサーバーにデプロイできます。デプロイプロセスは通常、以下の手順で構成されます。

  1. アプリケーションをパッケージ化する: IDE またはビルドツール(例:Maven、Gradle)を使用して、Java EE ウェブアプリケーションを WAR (Web Application Archive) ファイルにパッケージ化します。
  2. WAR ファイルをデプロイする: WAR ファイルをアプリケーションサーバーのデプロイディレクトリにコピーするか、サーバーの管理コンソールを使用してアプリケーションをデプロイします。
  3. アプリケーションサーバーを起動する: アプリケーションサーバーがまだ起動していない場合は、起動して Java EE ウェブアプリケーションをデプロイして実行します。

アプリケーションをデプロイした後は、適切な URL(例:http://localhost:8080/your-app)を使用してウェブブラウザからアクセスできます。

これで Java EE ウェブアプリケーションの開発について基本的な理解ができたので、次のステップである Docker を使用してアプリケーションをコンテナ化してデプロイすることに移りましょう。

Java EE アプリケーションのコンテナ化とデプロイ

Java EE ウェブアプリケーション用の Docker イメージの作成

Docker を使用して Java EE ウェブアプリケーションをコンテナ化するには、Docker イメージを作成する必要があります。以下は使用できる Dockerfile の例です。

## Use a base image with Java and an application server
FROM openjdk:11-jdk-slim as builder

## Copy the Java EE web application WAR file into the container
COPY target/*.war /app.war

## Use a lightweight application server image as the final image
FROM tomcat:9.0-jdk11-openjdk-slim

## Copy the WAR file into the Tomcat webapps directory
COPY --from=builder /app.war /usr/local/tomcat/webapps/

## Expose the default Tomcat port
EXPOSE 8080

## Start the Tomcat server
CMD ["catalina.sh", "run"]

この例では、マルチステージビルドプロセスを使用しています。最初のステージ builder では、Java EE ウェブアプリケーションの WAR ファイルをコンテナにコピーします。2 番目のステージ tomcat:9.0-jdk11-openjdk-slim は、最終的なイメージとして使用される軽量の Tomcat イメージです。その後、WAR ファイルが Tomcat の webapps ディレクトリにコピーされ、Tomcat サーバーが起動されます。

Docker イメージのビルドと実行

Docker イメージをビルドするには、Dockerfile が含まれるディレクトリで次のコマンドを実行します。

docker build -t my-java-ee-app .

これにより、タグが my-java-ee-app の Docker イメージが作成されます。

Docker コンテナを実行するには、次のコマンドを使用します。

docker run -p 8080:8080 my-java-ee-app

これにより、Docker コンテナが起動し、コンテナのポート 8080 がホストのポート 8080 にマッピングされるため、ウェブブラウザから http://localhost:8080 で Java EE ウェブアプリケーションにアクセスできます。

Java EE アプリケーションを Docker Swarm または Kubernetes にデプロイする

Java EE ウェブアプリケーションをコンテナ化し、Docker コンテナで実行できるようになったら、スケーラビリティと高可用性のために Docker Swarm または Kubernetes クラスターにデプロイできます。

Docker Swarm では、docker service create コマンドを使用してサービスを作成し、Docker イメージと必要な構成オプションを指定できます。

Kubernetes クラスターでは、Deployment、Service、その他の Kubernetes リソースを作成して、Java EE ウェブアプリケーションのデプロイとスケーリングを管理できます。

graph TD
    A[Java EE Web App Docker Image] --> B[Docker Container]
    B --> C[Docker Swarm or Kubernetes]
    C --> D[Production Environment]

Java EE ウェブアプリケーションをコンテナ化し、コンテナオーケストレーションプラットフォームにデプロイすることで、一貫したデプロイ、スケーラビリティ、ポータビリティなどの Docker の利点を生かして、エンタープライズレベルのウェブアプリケーションを信頼性高く効率的に運用することができます。

まとめ

このチュートリアルでは、Java EE ウェブアプリケーションを構築し、それを Docker コンテナにデプロイする方法について包括的なガイドを提供しました。Java EE アプリケーションをコンテナ化することで、異なる環境間でのポータビリティ、スケーラビリティ、一貫性を向上させることができます。Docker はデプロイプロセスを簡素化し、基盤となるインフラストラクチャに関係なく、アプリケーションが同じように動作することを保証します。このチュートリアルで得た知識を活用して、自信を持って Docker を使用して Java EE ウェブアプリケーションの開発とデプロイを効率化することができます。