DockerとVS Codeで作るJava開発環境(JDK11)— ローカルを汚さずに学習・実行まで
Dockerで「ローカルを汚さない」Java開発をする
Javaの学習やちょっとした検証を始めるとき、地味に困るのが開発環境です。
- PCにJDKを入れると、バージョン違いでハマる
- 既存の開発環境と競合する
- 別PCへ移したときに再構築が面倒
そこでおすすめなのが Dockerコンテナ内にJDKを用意して、VS Codeで編集するやり方です。
この方法なら「PC側はほぼ手を入れず」、コンテナを起動するだけで 同じJDK11環境をいつでも再現できます。
この記事では、VS Codeの Dev Containers を使って、JDK11(Temurin)でJavaをコンパイル・実行する最小構成を作ります。
ゴール
- ローカルにJDKを入れずにJavaを実行できる
- VS Codeで編集し、コンテナ内のJDK11で
javac/javaが使える - ディレクトリを丸ごとコピーしても同じ環境で動く
前提
- Docker(Docker Engine / Docker Desktop のどちらでもOK)
- VS Code
- VS Code拡張:Dev Containers
プロジェクト構成
Javaのディレクトリは Maven/Gradle 風にしておくと、VS Code側の認識も安定しやすく、将来的な拡張もしやすいです。
java-docker-dev/
├─ src/
│ └─ main/
│ └─ java/
│ └─ com/
│ └─ example/
│ └─ Hello.java
└─ .devcontainer/
├─ devcontainer.json
└─ docker-compose.yml
HelloWorld(サンプル)
src/main/java/com/example/Hello.java
package com.example;
public class Hello {
public static void main(String[] args) {
System.out.println("Hello from Docker JDK 11!");
}
}
Dev Containers 用の設定ファイルを作る
.devcontainer/docker-compose.yml
JDK11入りのイメージに Eclipse Temurin を使います。
services:
java-dev:
image: eclipse-temurin:11-jdk
working_dir: /work
volumes:
- ..:/work
command: sleep infinity
ポイントは2つです。
volumes: - ..:/work
VS Codeで開いているプロジェクト(.devcontainerの1つ上)を、コンテナの/workにマウントします。
つまり、ホスト側で編集したソースがそのままコンテナから見えます。command: sleep infinity
コンテナを“作業用に起動しっぱなし”にするための設定です。VS Codeがいつでも接続できます。
.devcontainer/devcontainer.json
{
"name": "java11-dev",
"dockerComposeFile": "docker-compose.yml",
"service": "java-dev",
"workspaceFolder": "/work",
"customizations": {
"vscode": {
"extensions": [
"ms-vscode-remote.remote-containers",
"vscjava.vscode-java-pack"
]
}
}
}
devcontainer.json は、VS Code に対して
- どのコンテナ(docker-compose / Dockerfile)を使うか
などを指示する“プロジェクト専用の設定”です。
このファイルがあると、VS Code の Reopen in Container で同じ環境を再現できます。
- ワークスペースをコンテナ内のどこに置くか(例:
/work) - コンテナ内で自動的に入れる拡張機能
- コンテナ内で適用したい VS Code 設定(任意)
たとえばこの記事で使ったように、
"customizations": {
"vscode": {
"extensions": ["vscjava.vscode-java-pack"]
}
}
これは “コンテナ内のVS Code環境”に拡張機能を入れる設定で、Java拡張(Java Pack)を入れておくことで、補完や定義ジャンプも効きやすくなります。
VS Codeでコンテナを開く
- VS Codeでプロジェクトフォルダ(例:
java-docker-dev/)を開く - コマンドパレットから
Dev Containers: Reopen in Container - しばらく待つと、VS Codeがコンテナ内に接続した状態になります
以降、VS Codeのターミナルはコンテナ内で動くので、java / javac はコンテナ側のものが使われます。

コンテナ内でコンパイル&実行
VS Codeのターミナルで以下を実行します。
javac -d out src/main/java/com/example/Hello.java
java -cp out com.example.Hello
成功すると次のように表示されます。
Hello from Docker JDK 11!

この方法のメリット
- ローカルにJDKを入れなくていい(環境を汚さない)
- JDKバージョンを固定できる(チームや別PCでも再現性が高い)
- プロジェクトごとに環境を分けられる(JDK11/17/21の共存も簡単)
- ディレクトリごとコピーすれば、ほぼ同じ手順で動く
おわりに
Javaの学習や検証のたびにローカル環境を整えるのは、意外とコストがかかります。
Docker + Dev Containersにしてしまえば、「環境構築」ではなく「コードを書く」ことに集中できます。
次のステップとして、Maven/Gradleをコンテナに組み込んだり、JUnitでテストを回す構成にするのもおすすめです。必要になったら、そこも同じ方針で拡張できます。