masked雑記

IT関連の記事を書く

Corretto11 + Maven + SpringBoot + Dockerでアプリを動かす

目的

Corretto11を利用してDockerコンテナを動かしたい

2019/3/17追記

Corretto11のDockerが公開されました。

corretto-11-docker/Dockerfile at 13edf15055f74d5cbe0c3f5f8a0c1665414cadfd · corretto/corretto-11-docker · GitHub

使用している環境

Docker version 18.09.2
Corretto11 (java version "11.0.2" 2019-01-15 LTS)
maven (Apache Maven 3.6.0 (97c98ec64a1fdfee7767ce5ffb20918da4f719f3; 2018-10-25T03:41:47+09:00))

プロジェクトを作成する

mvn -B archetype:generate -DgroupId=com.maskedgetter -DartifactId=rest-service -Dversion=1.0.0-SNAPSHOT -DarchetypeArtifactId=maven-archetype-quickstart

pom.xmlを編集

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.maskedgetter</groupId>
  <artifactId>rest-service</artifactId>
  <packaging>war</packaging>
  <version>1.0.0-SNAPSHOT</version>
  <name>rest-service</name>
  <url>http://maven.apache.org</url>

  <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.1.3.RELEASE</version>
  </parent>

  <dependencies>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-test</artifactId>
    </dependency>
  </dependencies>
  
  <build>
    <plugins>
      <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
      </plugin>
    </plugins>
  </build>
</project>

App.javaを編集

作成されたApp.javaを編集して、/にアクセスされた時に0を返すように実装する。

package com.maskedgetter;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.boot.web.servlet.support.SpringBootServletInitializer;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

@SpringBootApplication
@RestController
public class App extends SpringBootServletInitializer{
    public static void main( String[] args ){
        SpringApplication.run(App.class, args);
    }

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
        return application.sources(App.class);
    }

    @RequestMapping(value = "/", method = RequestMethod.GET)
    public String getZero() {
        return "0";
    }

}

warファイルを作成

mvn clean package spring-boot:repackage

Dockerfileを作成

FROM amazonlinux:2

ENV \
  JAVA_HOME=/opt/jdk \
  PATH=${JAVA_HOME}/bin:PATH \
  APP_NAMW=

RUN \
  yum -y update && \
  yum -y install wget gzip tar && \
  wget https://d2jnoze5tfhthg.cloudfront.net/amazon-corretto-11.0.2.9.1-linux-x64.tar.gz && \
  tar xvzf amazon-corretto-11.0.2.9.1-linux-x64.tar.gz && \
  rm amazon-corretto-11.0.2.9.1-linux-x64.tar.gz && \
  mv amazon-corretto-11.0.2.9.1-linux-x64/ /opt/jdk && \
  rm -rf /var/cache/yum/* && \
  yum clean all && \
  wget http://ftp.yz.yamagata-u.ac.jp/pub/network/apache/tomcat/tomcat-9/v9.0.16/bin/apache-tomcat-9.0.16.tar.gz && \
  tar xvzf apache-tomcat-9.0.16.tar.gz && \
  rm apache-tomcat-9.0.16.tar.gz && \
  mv apache-tomcat-9.0.16 /opt/tomcat

COPY ./target/rest-service-1.0.0-SNAPSHOT.war /opt/tomcat/webapps/rest-service.war

CMD ["sh", "/opt/tomcat/bin/catalina.sh", "run"]

Dockerイメージの作成と実行

docker build -t spring-corretto11 .
docker run --name spring-corretto11 -itd -p 8080:8080 spring-corretto11

リンクにアクセス
http://0.0.0.0:8080/rest-service/ f:id:lambdakura:20190226003654p:plain 0が出た

メモ

コンテナにアクセスしたい

docker exec -it spring-corretto11 /bin/bash

コンテナを止めたい

docker stop spring-corretto11

参考にしたサイト

Getting Started · Building a RESTful Web Service