Docker Composeを使って、手軽にJavaの開発環境を整える手順をメモしておきます。
目次
はじめに
前提
- Dockerはインストール済みとして話を進めます。
- VSCodeにDev Containersが導入されていること。
手順
以下手順で進めます。
- 必要なファイルを準備
- Docker Composeでイメージのビルドとコンテナの起動
- VSCodeの
Dev Containers
でコンテナに接続 - 開発をはじめる
それでは始めましょう。
1. 必要なファイルの準備
作成するファイルなど
以下のようにプロジェクトディレクトリを作成します。(この例ではjava-dev1
としています)
プロジェクトディレクトリ
java-dev1/ ├── Dockerfile ・・・(1) └── docker-compose.yml ・・・(2)
- プロジェクトディレクトリはローカルの任意の場所で大丈夫です。(例:
C:\docker\java-dev1
など) - ファイルは文字コードを
UTF-8
として作成して下さい。
(1)Dockerfile 作成
今回は以下のdocker imageを利用します。
eclipse-temurin:20-jdk-alpine
Dockerfile
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
version: '3.9' services: app: build: . volumes: - .:/usr/src/app
2. イメージのビルドとコンテナの起動
docker-compose up -d --build
3. コンテナに接続
- VSCodeを立ち上げます。
Remote Explorer
を開き、Dev Containers
を選択します。- リストの中に
java-dev1
があると思うので、Attach to Container
を選択します。 - コンテナが立ち上がってきたら、
/usr/src/app
を開きます。 - 1. 必要なファイルの準備にて準備したプロジェクトディレクトリがマウントされているため、同じファイルが見えるはずです。
4. 開発開始
(3)pom.xml 作成
まず、プロジェクト直下に、pom.xml
を作成します。
コンテナ内
/usr/src/app/ ├── Dockerfile ├── docker-compose.yml └── pom.xml ・・・(3)
pom.xml
<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>
- あとで、Mavenを利用してコンパイルと実行を行うので
maven-compiler-plugin
とexec-maven-plugin
のプラグインを追記しておきます。
(4)Main.java 作成
次にJavaソースを作成します。
プロジェクトディレクトリ/usr/src/app/
に、まずはJavaのソースディレクトリsrc/main/java
を作成します。
さらに、Javaのソースディレクトリにパッケージ用のディレクトリcom/example/app
も作成し、その配下にMain.java
を作成します。
コンテナ内
/usr/src/app/ ├── Dockerfile ├── docker-compose.yml ├── pom.xml └── src/ └── main/ └── java/ └── com/ └── example/ └── app/ └── Main.java ・・・(4)
Main.java
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/
で、以下コマンドを実行します。
mvn compile exec:java -Dexec.mainClass="com.example.app.Main"
- これでJavaソースがコンパイルされます。
Javaの実行 (Maven)
プロジェクトディレクトリ/usr/src/app/
で、以下コマンドを実行します。
mvn exec:java -Dexec.mainClass="com.example.app.Main"
実行結果
: (省略) : 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 #
- これでJavaが実行できました。
コンテナの停止
コンテナの起動していた方のターミナルにて、以下コマンドを実行します。
docker-compose down
コンテナの再起動
再度、コンテナを起動させたい場合、2. イメージのビルドとコンテナの起動から実行して下さい。
5. 補足
VSCodeでのJavaのデバッグ
コンテナを開いたVSCodeで、以下Extensionを入れることで、デバッグ実行も可能となります。
Extension Pack for Java
Debugger for Java
Java Language Support