LoginSignup
2
2

More than 3 years have passed since last update.

Docker+Springbootアプリの構築方法(基礎学習用)

Last updated at Posted at 2020-10-19

はじめに

ここ最近、メンテナンスやらドキュメント作成やらでソースをゼロから構築する機会がなく、基礎的な部分について忘れがちな状況である。

そんなとき、たまたまみたこの動画をみた。

How to create Docker Image and run Java App (Spring Boot Jar) in a Docker Engine | Tech Primers(2017)
https://www.youtube.com/watch?v=FlSup_eelYE

動画の内容が非常にわかりやすく、そういえばシンプルにゼロから作ったことがないことを思い出しため、勉強用に構築作業を実施。

構築要件

Dockerコンテナ上でSpringbootアプリが動くようにする。
外部からRestAPIでアクセスできるようにする。

DockerDesktop のセットアップ

windows 環境でDockerを動かせるようにする。

インストーラー

こちらの公式からダウンロード可能
https://hub.docker.com/editions/community/docker-ce-desktop-windows
[Docker Desktop Installer.exe]を起動して手順に沿う

Docker起動

インストーラー後の再起動で起動する

ProxySetUp(必要に応じて)

~/.docker/config.json ファイルにproxies 以下を追加する。

{
  "credsStore": "desktop",
  "stackOrchestrator": "swarm",
  "credStore": "desktop",
  "proxies":
     {
       "default":
       {
         "httpProxy": "http://127.0.0.1:3001",
         "httpsProxy": "http://127.0.0.1:3001",
         "noProxy": "*.test.example.com,.example2.com"
       }
     }
}

<参考>
https://docs.docker.com/network/proxy/

Springboot 初期構築

○ SpringbootのProjectを作成
https://start.spring.io/

RestAPI を作りたいために、Dependency にRest Repositoryを追加。
※ 目的にあったライブラリを追加する。

image.png

設定をしたあと、GENERATEボタンを押下するとZIPファイルがダウンロードされる

 ローカルに配置

image.png

Rest用のサンプルモジュールを作成

poc.dockerspringboot配下にcontrollerパッケージを作成して、サンプルファイルを作成


package poc.dockerspringboot.controller;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/rest/message/helloWorldOnDocker")
public class HelloWorldOnDocker {

    @GetMapping
    public String hello(){
        return "Hello from Docker Container";
    }
}

maven ビルドを実施

mvn clean install の実施
image.png

Docker File のセットアップ

Docker Fileの作成

プロジェクト直下にDockerfile を作成

image.png

作成例

FROM adoptopenjdk:11-jre-openj9
ADD target/docker-springboot.jar docker-springboot.jar
EXPOSE 8081
ENTRYPOINT ["java", "-jar", "docker-springboot.jar"]

FROM: ベースイメージの指定(Java)

OpenJDKの中で、商用でも使えるadoptopenjdkを利用する。
https://hub.docker.com/_/adoptopenjdk

ADD:モジュールの追加

生成したモジュールをDockerに追加する。
target配下にモジュールができているが、jar のファイル名が長いためアウトプット名称を[finalName]で指定する。

<build>
    <finalName>docker-springboot</finalName>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

参考:spring-boot-maven-pluginの設定情報
https://spring.pleiades.io/spring-boot/docs/current/maven-plugin/reference/html/

EXPOSE: 外部公開用のポート

Dockerコンテナで開放したいポートを指定

コンテナ内部で、spring-boot 起動時のデフォルトポートは8080
この値を変更したい場合は、application.properties に、server.port=8082 などを追加

Docker起動時に、内部で起動しているポートと外部で公開するポートの紐づけを行う。

ENTRYPOINT: 起動ポイント

jar コマンドでモジュールを起動。
このコマンドを実行することで、組み込みサーバー(Tomcat)が起動してアクセスを受け付けるようになる。

コンテナ起動

# イメージ作成
docker build -f Dockerfile -t docker-spring-boot .

# 作成物の確認
docker images

# コンテナ起動
docker run -p 8081:8080 docker-spring-boot


アクセス確認

http://localhost:8081/rest/message/helloWorldOnDocker
image.png

さいごに

新しい技術的な発見はないものの、たまにこういった作業を実施すると思考がクリアになる。
あとから振り替えられるように、ガイドライン的に記載。

2
2
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
2
2