QuarkusとDocker環境を組み合わせて効率的に開発する方法:初心者でもできるコンテナ開発入門
生徒
「Quarkusの開発ではDockerが便利と聞きました。実際にはどんな場面でDockerを使うんですか?」
先生
「Dockerを使うと、データベースやメッセージングなどの外部サービスを簡単に立ち上げられるので、Quarkusの開発効率がとても上がります。」
生徒
「Quarkusアプリ自体もDockerで動かせるんですか?」
先生
「もちろん可能です。しかもQuarkusは軽量なので、Dockerと相性が抜群です。それでは実際にDockerと組み合わせた開発手順を見ていきましょう。」
1. DockerとQuarkusを組み合わせるメリットとは?
Quarkus(クォーカス)は、クラウドネイティブ環境での動作を前提に設計されたモダンなJavaフレームワークです。最大の特徴は、従来のJavaフレームワークと比較して「圧倒的な起動の速さ」と「メモリ消費量の少なさ」にあります。この特性が、軽量な実行環境であるDockerと組み合わさることで、コンテナのメリットを最大限に引き出すことができます。
特に初心者にとって、Dockerを利用する最大の利点は「環境構築の自動化と統一」です。プログラミングを始めたばかりの時、自分のパソコンだけで動く設定を作ってしまうと、他の人の環境や本番サーバーで動かないという問題がよく起こります。Dockerを使えば、開発者全員が同じ環境で開発を進められるため、無駄なエラーに悩まされる時間が大幅に削減されます。
例えば、従来のJavaが「豪華なフルコース料理」を準備するような重さだったのに対し、Quarkusは「必要な具材だけを詰め込んだ高機能な軽食」のようなイメージです。この「軽食」をDockerという「デリバリーBOX」に入れることで、どこへでも素早く、確実に届けることが可能になります。
また、Quarkus独自の強力な機能に「Dev Services」があります。これは、ソースコードを書き換えるだけで、背後で必要なDockerコンテナ(データベースなど)をQuarkusが勝手に立ち上げてくれる機能です。初心者でも難しい設定ファイルを記述することなく、モダンなマイクロサービス開発の恩恵をすぐに享受できる点が、世界中のエンジニアに支持されている理由です。
2. QuarkusアプリをDockerで動かす基本構成
ここではQuarkusアプリをDocker上で動かすための最小構成を作成します。まずはQuarkusプロジェクトのルートにDockerfileを作成します。Quarkusは「JVMモード」と「ネイティブモード」の二つのビルド方式がありますが、今回は一般的に使われるJVMモードのDockerfileを紹介します。
FROM eclipse-temurin:17-jre
WORKDIR /app
COPY target/quarkus-app/quarkus-run.jar /app/app.jar
CMD ["java", "-jar", "app.jar"]
このDockerfileを使うことで、どの環境でも同じQuarkusの実行環境を再現できます。またDockerイメージは軽量で、クラウドサービスにも展開しやすい構成になります。
3. Quarkusアプリ用のサンプルREST API
Dockerで実行する前に、動作確認用のQuarkus REST APIを作成しておきましょう。以下のようなシンプルなAPIを作成しておくと、Docker環境での動作確認が簡単になります。
import jakarta.ws.rs.GET;
import jakarta.ws.rs.Path;
import jakarta.ws.rs.Produces;
import jakarta.ws.rs.core.MediaType;
@Path("/docker")
public class DockerResource {
@GET
@Produces(MediaType.TEXT_PLAIN)
public String hello() {
return "Docker上でQuarkusが動作しています。";
}
}
APIを用意したら、ビルドして動作させるためのDockerコマンドを実行します。
4. QuarkusアプリをDockerでビルドして実行する方法
次に、QuarkusアプリをDockerイメージ化して実行します。
docker build -t quarkus-docker-sample .
docker run -p 8080:8080 quarkus-docker-sample
コンテナが起動すると、ブラウザで http://localhost:8080/docker にアクセスすることで、Quarkus REST API のレスポンスが得られます。
Docker上でQuarkusが動作しています。
このように、DockerはQuarkusアプリの実行環境を簡単に構築できる強力なツールです。
5. Dev Servicesを使ったDocker連携の自動化
Quarkusには「Dev Services」という優れた機能があり、開発時にDockerコンテナを自動起動できます。例えばデータベース(PostgreSQLなど)を利用する場合、設定なしで自動的にDockerコンテナが起動し、開発用のDBとして使えるようになります。
これにより、Dockerの操作に不慣れな初心者でもコンテナ環境を活用しながらアプリ開発を進めることができます。
quarkus.datasource.db-kind=postgresql
quarkus.datasource.username=user
quarkus.datasource.password=pass
quarkus.datasource.jdbc.url=jdbc:postgresql://localhost:5432/mydb
設定を記述するだけで、Quarkusが必要なコンテナを自動的に起動してくれます。
6. docker-composeで外部サービスとまとめて起動する
複雑な環境ではDocker Composeを使って、Quarkusアプリ・データベース・メッセージングサービスなど複数コンテナを一括管理できます。
version: '3'
services:
db:
image: postgres:15
environment:
POSTGRES_PASSWORD: pass
POSTGRES_USER: user
ports:
- "5432:5432"
このようにdocker-compose.ymlを作成しておけば、以下のコマンドで一括起動できます。
docker compose up -d
Quarkusとの連携がスムーズになり、開発全体が一段と効率的になります。
まとめ
QuarkusとDockerを組み合わせた開発の全体像
この記事では、QuarkusとDocker環境を組み合わせて効率的に開発する方法について、初心者にも分かりやすい形で解説してきました。 Quarkusは軽量で高速なJavaフレームワークとして設計されており、コンテナ技術との相性が非常に良い点が大きな特徴です。 Dockerを使うことで、開発環境と本番環境の差異を減らし、同じ設定・同じ動作をどこでも再現できるようになります。 これは個人開発だけでなく、チーム開発やマイクロサービス構成においても大きなメリットとなります。
特にJava開発では、環境構築の手間や依存関係の違いが原因でトラブルが起こりがちですが、 Dockerコンテナを活用することで、OSやローカル環境に依存しない安定した開発基盤を整えることができます。 Quarkusは起動が速く、メモリ消費も抑えられているため、Docker上でも快適に動作し、 コンテナ開発に初めて触れる人でも扱いやすいフレームワークと言えるでしょう。
DockerfileとREST APIを通して理解する実践ポイント
Dockerfileを用意することで、Quarkusアプリを簡単にDockerイメージ化できる点も重要なポイントです。 記事内で紹介したように、JVMモードのDockerfileを使えば、 特別な設定をしなくてもJavaアプリケーションをコンテナとして起動できます。 この仕組みを理解することで、開発環境だけでなく、検証環境や本番環境への展開もスムーズになります。
また、REST APIのサンプルを通して、Docker上でQuarkusアプリが正しく動作しているかを確認する流れも学びました。 ブラウザでエンドポイントにアクセスし、期待したレスポンスが返ってくることで、 コンテナ環境でも通常のJavaアプリと同じ感覚で開発できることが実感できたはずです。 この「いつも通り動く」という感覚が、Dockerを使い続ける上での安心感につながります。
Dev Servicesとdocker composeによる開発効率の向上
QuarkusのDev Servicesは、Dockerと連携した開発をさらに快適にしてくれる機能です。 データベースやメッセージングサービスなど、通常であれば手動で起動が必要な外部サービスを、 設定だけで自動的にDockerコンテナとして起動してくれます。 これにより、開発者はインフラの準備に時間を取られることなく、 アプリケーションのロジックや設計に集中できるようになります。
さらにdocker composeを使えば、Quarkusアプリと複数の外部サービスをまとめて管理できます。 コマンド一つで環境全体を起動・停止できるため、開発の切り替えや再現性が大幅に向上します。 この仕組みを理解しておくことで、実務に近い開発スタイルを早い段階から身につけることができます。
まとめ用サンプルプログラム
以下は、Docker環境での動作確認を意識したシンプルなQuarkus REST APIの例です。 記事内と同じクラス構成とアノテーションを使い、 Docker上でも問題なく動作することを確認しやすい形になっています。
import jakarta.ws.rs.GET;
import jakarta.ws.rs.Path;
import jakarta.ws.rs.Produces;
import jakarta.ws.rs.core.MediaType;
@Path("/summary-docker")
public class SummaryDockerResource {
@GET
@Produces(MediaType.TEXT_PLAIN)
public String summary() {
return "QuarkusとDockerを組み合わせた開発のまとめ";
}
}
このようなシンプルなAPIを用意しておくことで、 Dockerビルドやdocker runの結果をすぐに確認でき、 コンテナ環境での動作確認がより分かりやすくなります。
生徒
「QuarkusとDockerを組み合わせることで、 環境構築がとても楽になることがよく分かりました。 Java開発なのに、こんなに手軽に動かせるのは意外でした。」
先生
「Dockerを使うことで、環境差異の問題を減らせるのが大きな利点ですね。 Quarkusは軽量なので、コンテナ環境でもストレスなく動かせます。」
生徒
「Dev Servicesでデータベースが自動起動するのも便利でした。 自分でDockerコマンドをたくさん覚えなくても開発できそうです。」
先生
「最初は細かい操作よりも、仕組みを理解することが大切です。 QuarkusとDockerの連携を知っておくと、 実務でもすぐに応用できるようになりますよ。」
生徒
「これからはDockerを前提にした開発にも挑戦してみます。 Quarkusなら安心して始められそうです。」
先生
「その意気です。少しずつ経験を積みながら、 コンテナ開発の理解を深めていきましょう。」