Think Twice
IT技術メモ | Javaのメモ
Created: 2023-05-10 / Updated: 2023-06-26

Docker ComposeでJavaの開発環境を構築する


Docker Composeを使って、手軽にJavaの開発環境を整える手順をメモしておきます。

目次


はじめに

前提

手順

以下手順で進めます。

それでは始めましょう。

1. 必要なファイルの準備

作成するファイルなど

以下のようにプロジェクトディレクトリを作成します。(この例ではjava-dev1としています)

プロジェクトディレクトリ
Copy
java-dev1/
├── Dockerfile              ・・・(1)
└── docker-compose.yml      ・・・(2)

(1)Dockerfile 作成

今回は以下のdocker imageを利用します。

Dockerfile
Copy
FROM eclipse-temurin:20-jdk-alpine

# 必要なソフトウェアのインストール
RUN apk update && \
    apk add maven

WORKDIR /usr/src/app

COPY . .

# コンテナを起動し続ける
ENTRYPOINT ["tail"]
CMD ["-f", "/dev/null"]

(2)docker-compose.yml 作成

docker-compose.yml
Copy
version: '3.9'
services:
  app:
    build: .
    volumes:
      - .:/usr/src/app

2. イメージのビルドとコンテナの起動

Copy
docker-compose up -d --build

3. コンテナに接続

4. 開発開始

(3)pom.xml 作成

まず、プロジェクト直下に、pom.xmlを作成します。

コンテナ内
Copy
/usr/src/app/
├── Dockerfile
├── docker-compose.yml
└── pom.xml             ・・・(3)

pom.xml
Copy
<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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.example</groupId>
    <artifactId>app</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>20</maven.compiler.source>
        <maven.compiler.target>20</maven.compiler.target>
    </properties>

    <dependencies>
        <!-- ここに依存関係を追加します -->
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
            </plugin>

            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>exec-maven-plugin</artifactId>
                <version>1.6.0</version>
                <configuration>
                    <mainClass>com.example.app.Main</mainClass>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

(4)Main.java 作成

次にJavaソースを作成します。
プロジェクトディレクトリ/usr/src/app/に、まずはJavaのソースディレクトリsrc/main/javaを作成します。
さらに、Javaのソースディレクトリにパッケージ用のディレクトリcom/example/appも作成し、その配下にMain.javaを作成します。

コンテナ内
Copy
/usr/src/app/
├── Dockerfile
├── docker-compose.yml
├── pom.xml
└── src/
    └── main/
        └── java/
            └── com/
                └── example/
                    └── app/
                        └── Main.java  ・・・(4)

Main.java
Copy
package com.example.app;

public class Main {
    public static void main(String[] args) {
        var s = "Hello, World!";
        System.out.println(s);
    }
}

Javaソースのコンパイル (Maven)

プロジェクトディレクトリ/usr/src/app/で、以下コマンドを実行します。

Copy
mvn compile exec:java -Dexec.mainClass="com.example.app.Main"

Javaの実行 (Maven)

プロジェクトディレクトリ/usr/src/app/で、以下コマンドを実行します。

Copy
mvn exec:java -Dexec.mainClass="com.example.app.Main"
実行結果
Copy
 :
(省略)
 :
Hello, World!
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  13.179 s
[INFO] Finished at: 2023-05-10T05:53:11Z
[INFO] ------------------------------------------------------------------------
/usr/src/app # 

コンテナの停止

コンテナの起動していた方のターミナルにて、以下コマンドを実行します。

Copy
docker-compose down

コンテナの再起動

再度、コンテナを起動させたい場合、2. イメージのビルドとコンテナの起動から実行して下さい。

5. 補足

VSCodeでのJavaのデバッグ

コンテナを開いたVSCodeで、以下Extensionを入れることで、デバッグ実行も可能となります。

参考

関連メモ

2023-06-26 更新

参照

Special thanks