#chiroito ’s blog

Java を中心とした趣味の技術について

OracleJDKのDocker イメージで任意のアプリケーションを実行する

Oracle JDK の Docker イメージ上で Java SE のアプリケーションを実行するには以下の手順が必要です。

  1. アプリケーションの用意
  2. OracleJDK 環境構築
  3. アプリケーションの実行

アプリケーションの用意

現場で使う場合には CI ツールでビルドされた jar/war/ear などのアーカイブをコピーして実行や、Git などのバージョン管理システムから最新のソースを取得して、maven などでビルドして実行するかと思います。 今回は簡単に試せるように、次のソースコード(HelloWorld.java)を渡して、Java SE のアプリケーションを作成します。

HelloWorld.java

public class HelloWorld {
    public static void main(String[] args){
        System.out.println("Hello World");
    }
}

OracleJDK 環境構築

Java SE のアプリケーションは JDK をインストールされていれば実行可能です。Java EE のアプリケーションを動かす場合には アプリケーションサーバがインストールされている環境が必要ですが、jar ファイルに組み込むアプリケーションサーバの場合は本手順で同様に実行できます。

Oracle JDK のDocker環境構築方法はこちらをご参照ください。

chiroito.hatenablog.jp

Java のアプリケーションを実行するまでの手順はソースコードをクラスファイルへコンパイルして、必要であれば Jar ファイルなどへアーカイブします。 今回はソースファイルが1つだけなのでクラスファイルを作成してアーカイブは行いません。

Dockerfile

FROM oracle/serverjre:8
COPY HelloWorld.java ~/
WORKDIR ~/
RUN javac HelloWorld.java
CMD ["java","HelloWorld"]

アプリケーションの実行

ここまで準備が出来たらビルドして実行します。ビルドや実行のオプションは必要に応じて変更します。

Docker ビルド

docker build -t hello .

Sending build context to Docker daemon 4.096 kB
Step 1 : FROM oracle/serverjre:8
 ---> baadd9279b4b
Step 2 : COPY HelloWorld.java ~/
 ---> 4215555f2923
Removing intermediate container 6701f92ad8e2
Step 3 : WORKDIR ~/
 ---> Running in a07a9ddf6e20
 ---> 441c75073eb9
Removing intermediate container a07a9ddf6e20
Step 4 : RUN javac HelloWorld.java
 ---> Running in 08ab5a1ee051
 ---> 30b2b81f1eb1
Removing intermediate container 08ab5a1ee051
Step 5 : CMD java HelloWorld
 ---> Running in 41a064eb6631
 ---> b87a08d86b08
Removing intermediate container 41a064eb6631
Successfully built b87a08d86b08

実行

最後に、作成したアプリケーションを Docker 上で実行してみましょう。
$ docker run hello

Hello World

これで任意のアプリケーションを実行することが出来るようになります。