【Docker】Java、Gradleの開発環境をDockerで構築してみる
この記事の目次
はじめに
Gradleの勉強がてら、Gradleの実行環境をDockerで構築してみました。Dockerで構築することで作ったり壊したりOSを変えたりできるので個人的に勉強用の環境構築はDockerで行うケースが多いです。
今回の記事では、Gradleを用いたJavaの開発環境をDokcerで構築する手順について解説します。
Java周りの実行環境について
- Java 21
- Gradle 8.8
今回はGradleを使った環境を構築します。
Gradleとはいわゆるビルドツールで、
- 外部パッケージのインストール、バージョン管理
- Javaファイルのコンパイル
- 自動テスト
- Jarの作成(パッケージ化)
などを行なうためのツールです。JavaのビルドツールとしてMavenも非常に有名ですが、機能性、拡張性の面でGradleの方が優れている(らしい)のでGradleを選択しました。
使用するファイルについて
ディレクトリ構造について
project_dir/ ├── app/ │ ├── Dockerfile │ └── src/ └── docker-compose.yml
プロジェクトのルートディレクトリ(project_dir)直下にdocker-compose.ymlがあり、アプリケーションコンテナ用のappディレクトリがあります。このappディレクトリ内にはDockerfileとsrcディレクトリがあり、ソースコードはこのsrcディレクトリで管理されます。
特に珍しくもないよくある構造です。
プロジェクトのルートディレクトリ(project_dir)直下にdocker-compose.ymlがあり、アプリケーションコンテナ用のappディレクトリがあります。このappディレクトリ内にはDockerfileとsrcディレクトリがあり、ソースコードはこのsrcディレクトリで管理されます。
特に珍しくもないよくある構造です。
docker-compose.ymlについて
version: "3.8" services: app: container_name: java build: context: ./app tty: true volumes: - ./app/src:/root/src ports: - 8080:8080 working_dir: /root
こちらもそこまで珍しくないですね。
portは8080番を開けています。これは自分が今後個人的にSpringbootを使うために開けているポートです。またvolumesに/app/srcディレクトリを指定してます。これでホストとコンテナのファイルの連携をしています。
Dockerfileについて
FROM openjdk:21-bookworm RUN apt-get update RUN apt-get -y install curl zip git RUN curl -s "https://get.sdkman.io" | bash RUN echo ". $HOME/.sdkman/bin/sdkman-init.sh; sdk install gradle 8.8" | bash
本題の部分です。
ベースイメージにはopenjdk:21-bookwormを使用しました。
jdkとは「Java Development Kit」の略で、以下のようなコンポーネントが含まれます。
- Javaコンパイラ(javac)
- Javaランタイム環境(JRE)
- 開発ツール(デバッグ、パッケージング、ドキュメント化)
ちなみにこのJDK、OpenJDK以外にも種類があります。JDKディストリビューションといい各社がオリジナルのJDKを提供しており、いくつか調べたものを抜粋します。
- OpenJDK: オープンソースのJDKで、Java Specification Requestという公式の仕様に完全準拠したJDK。
- Oracle JDK: Oracle社が提供する商用JDK。OpenJDKを元に開発されている。商用ライセンスがあり、エンタープライズ向けのサポートやサービスが提供されている。
- Amazon Corretto: AWSによって提供されているJDK。商用利用含め、完全無料で利用可。AWS環境での最適化が行われており、AWS上での利用が推奨されているJDK。
- Azul Zulu: Azul Systemsによって提供されるJDK。様々なOSやアーキテクチャへ対応。
さくっと調べただけでもそこそこ種類がありました。ただどれもOpenJDKをベースに開発されているらしいです。故に今回は一番基本的なOpenJDKを使って環境を作ってみます。
SDKMANについて
RUN curl -s "https://get.sdkman.io" | bash RUN echo ". $HOME/.sdkman/bin/sdkman-init.sh; sdk install gradle 8.8" | bash
この部分のコマンドで出てきてるやつですね。
SDKMANとは、「Software Development Kit Manager」の略で、Java、Gradle、Maven、Groovy、Kotlin、Spring Bootなどのインストール、バージョン管理を行うツールです。Java周りに特化したパッケージ管理ツールとでも言いましょうか。debian系でいうApt、macでいうHomebrewみたいなやつです。
今回のDockerfileではsdk install gradle 8.8 でGradleをインストールしています。この8.8の部分を変えればバージョンを変えることができます。
いざ環境構築
コンテナ立ち上げ
これまでのファイルを用意し、プロジェクトのルートディレクトリ内で、以下のコマンドを実行します。
docker compose up -d
その後、VScodeのDevContainerでコンテナ内に入ります。
コンテナに入れました。
Gradleでプロジェクトを作成する
ターミナルを立ち上げます。
srcディレクトリ内で`gradle init` を実行。すると対話型のインターフェースとともに、Gradleを使用した開発環境の設定を行えます。
今回は以下を選択しました。ほとんど1を選択しています。
- Select type of build to generate:
→1: Application
- Select implementation language:
→1: Java
- Enter target Java version (min: 7, default: 21):
→21
- Project name (default: src):
→src
- Select application structure:
→1: Single application project
- Select build script DSL:
→2: Grooby
- Select test framework:
→1: JUnit 4
- Generate build using new APIs and behavior (some features may change in the next minor release)? (default: no) [yes, no]
→no
選択するとプロジェクトの設定ファイルやディレクトリ構造が自動的に作成されます。
これでGradleによるJavaプロジェクトの作成ができました。
試しにsrcディレクトリで`gradle run` を実行すると、、、
デフォルトで作成されたApp.javaを実行できました!
これにてDocker上にGradleを用いたJavaの開発環境の構築は完了です!
それではよいエンジニアライフを!
カテゴリー: