(O+P)ut

アウトプット



(O+P)ut

エンジニアのアウトプット

【SpringBoot】WASLibertyにwarファイルを配置して動作確認する

スポンサーリンク

はじめに

Windows10&DockerDesktopを利用している環境にてSpringBootのwarファイルをLibertyにデプロイした流れを説明します。

以下記事のWindowsバージョンです。

環境情報
  • Windows 10
  • DockerDesktop
  • Eclipse(STS)

warファイルの準備

Eclipseでwarファイルを生成しました。スタータープロジェクトをMavenで作成しました。

└── demo
    ├── HELP.md
    ├── mvnw
    ├── mvnw.cmd
    ├── pom.xml
    ├── src
    │   ├── main
    │   │   ├── java
    │   │   │   └── com
    │   │   │       └── example
    │   │   │           └── demo
    │   │   │               ├── DemoApplication.java
    │   │   │               ├── Hello.java
    │   │   │               └── ServletInitializer.java
    │   │   └── resources
    │   │       ├── application.properties
    │   │       ├── static
    │   │       └── templates
    │   └── test
    │       └── java
    │           └── com
    │               └── example
    │                   └── demo
    │                       └── DemoApplicationTests.java
    └── target
        ├── classes
        │   ├── application.properties
        │   └── com
        │       └── example
        │           └── demo
        │               ├── DemoApplication.class
        │               ├── Hello.class
        │               └── ServletInitializer.class
        ├── demo-0.0.1-SNAPSHOT
        │   ├── META-INF
        │   └── WEB-INF
        │       ├── classes
        │       │   ├── application.properties
        │       │   └── com
        │       │       └── example
        │       │           └── demo
        │       │               ├── DemoApplication.class
        │       │               ├── Hello.class
        │       │               └── ServletInitializer.class
        │       └── lib
        ├── generated-sources
        │   └── annotations
        ├── generated-test-sources
        │   └── test-annotations
        ├── maven-archiver
        │   └── pom.properties
        ├── maven-status
        │   └── maven-compiler-plugin
        │       ├── compile
        │       │   └── default-compile
        │       │       ├── createdFiles.lst
        │       │       └── inputFiles.lst
        │       └── testCompile
        │           └── default-testCompile
        │               ├── createdFiles.lst
        │               └── inputFiles.lst
        ├── surefire-reports
        │   ├── com.example.demo.DemoApplicationTests.txt
        │   └── TEST-com.example.demo.DemoApplicationTests.xml
        └── test-classes
            └── com
                └── example
                    └── demo
                        └── DemoApplicationTests.class

唯一作成したHello.javaは以下

package com.example.demo;

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

@RestController
@RequestMapping
public class Hello {

    @RequestMapping("hello")
    private String hello() {
        return "HelloWorld";
    }
}

この状態でpom.xmlにて右クリックし「maven install」を行えば以下のようにwarファイルが作成されます。

[INFO] Building war: C:\XX\demo\target\demo-0.0.1-SNAPSHOT.war

Libertyコンテナを起動する

「websphere-liberty」イメージを利用します。

ポイントは今回のwarファイルを「/config/dropins/」配下に配置することです。これによって自動デプロイされます。

以下はPowerShellのワンライナー。ポートは80をアクセスすればコンテナ内の9080に転送するようにしています。

> docker run -d -p 80:9080 -v C:\Users\XX\..\demo-0.0.1-SNAPSHOT.war:/config/dropins/app.war websphere-liberty

ちなみにコンテナ内に確認すると以下のプロセスが起動しています。

default@1f249f2fd45b:/$ ps x
  PID TTY      STAT   TIME COMMAND
    1 ?        SLsl   1:10 /opt/ibm/java/jre/bin/java -javaagent:/opt/ibm/wlp/bin/tools/ws-javaagent.jar -Djava.awt.head  .. bash

動作検証を行う

今回は「app.war」と名前を変えて配置したので「/hello」と合わせて以下のURLにアクセスすると確認できます。

$ curl http://localhost/app/hello
Hello World!

ブラウザに同URLを入れても同じ結果が確認できます。

app本体やapp配下の別のパスを入れても404でエラーとなり

$ curl http://localhost/app
Error 404:
$ curll http://localhost/app/a
Error 404:

そもそも別のパスを入れればLivertyのエラー画面になります。

$ curl http://localhost/hoge
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
...
content="WebSphere Application Server Version V8.5 Liberty Profile - Context Root Not Found" />
...

ちなみに

同warファイルをVisualStudioCodeで作成して配置すると以下エラーとなり詰まったので今回はEclipseを採用しました。

$ curl http://localhost/app/hello
Error 404: javax.servlet.ServletException: java.io.FileNotFoundException: SRVE0190E: File not found: /hello

終わりに

冒頭のリンク先では以下のようにwarファイルの配置をワンクッションおいてましたがDockerDesktopではそのまま配置できます。

ダウンロードしたサンプルアプリケーションを、PC 環境(例: /c/Users/shimizu/ci.docker.tutorials/app/ServletApp.war)から仮想マシン(default)(例: /tmp/ServletApp.war)にコピーします。

以上、ご参考になれば幸いです。