LoginSignup
3
0

More than 3 years have passed since last update.

JavaのWebアプリケーションをDockerのマルチステージビルドでデプロイする

Last updated at Posted at 2020-12-04

本記事は東京学芸大学 櫨山研究室 Advent Calendar 2020の四日目の記事になります.

概要

  • Javaで作成したWebアプリケーションをDockerを使ってデプロイする

本記事のコードは以下のGitHubリポジトリで公開しています.

動作させるアプリケーション

Building Java Web Applications, https://guides.gradle.org/building-java-web-applications/
Building Java Web Applications, https://medium.com/@tutorialspointexamples/building-java-web-applications-760d656061e4

にあるサンプルアプリケーションをDockerで動作させてみます.

※Gradleの公式ドキュメントがリンク切れだったので同じコードを紹介している別のリンクを載せています.

マルチステージビルド

コンテナを用いた開発では本番環境向けにサイズの小さいDockerイメージを作成することは重要になります.
よってビルド後の生成物だけを含んだイメージを作成するのが理想となります.

Dockerのマルチステージビルドはこのような要求を簡単に実現する方法になります.

今回のJavaのWebアプリケーションをマルチステージビルドの流れを図に起こすと以下のようになります.

はじめにビルドステージと命名したステージでソースコードをビルドしwarファイルを生成します.
その次の本番用ステージと命名したステージでwarファイルをjettyに配備します.

Dockerfile

この流れを記述したDockerfileは以下のようになります.

# ビルドステージ
FROM adoptopenjdk/openjdk8:alpine as builder
WORKDIR /webapp

# プロジェクトの配置とビルド
ADD ./ ./
RUN ./gradlew war

# 本番用ステージ
FROM jetty:9-jdk8

EXPOSE 8080

COPY --from=builder ./webapp/build/libs/sample-app.war /var/lib/jetty/webapps

公式のjettyイメージでは/var/lib/jetty/webapps/配下にwarファイルを配備することでデプロイが完了します.

Dockerイメージのビルドとコンテナの起動

dockerイメージのビルドし,コンテナを起動しアプリケーションが正常に動作しているかを確認します.

docker image build -t sample-app:latest .
docker container run -p 8080:8080 sample-app:latest

正常に起動したら,http://localhost:8080/sample-app/ にアクセスをします.
以下の画面になっていたら成功です.

テキストフィールドにworldと入力しSay Helloボタンをクリックしましょう.

きちんとHello, world!と出力されました.
これで正常に動作していることが確認できました.

Docker Imageのサイズを確認

サンプルアプリケーションでそもそものアプリケーションのサイズがとても小さいので比較にもなりませんがDockerのイメージサイズを確認しておきます.

# ベースのjettyのイメージサイズ
$ docker image ls jetty            
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
jetty               9-jdk8              12fc9041849d        10 days ago         525MB

# アプリケーションを配備したイメージサイズ
$ docker image ls sample-app
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
sample-app          latest              4096cac4f49a        10 minutes ago      525MB

本格的な開発ではDockerイメージの大きさがどの程度かを確認する癖をつけると良いでしょう🙇‍♂️

参考文献

マルチステージビルドの利用,https://matsuand.github.io/docs.docker.jp.onthefly/develop/develop-images/multistage-build/

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0