[A-00181] Docker,Kubernetesでmicroserviceを作成する
関連記事は下記
Docker, Kubernetesを使ってmicroserviceを作りたいと思います。
・ContainerでSpringBootを動かす
まずはspring-bootをContainer上で起動したいと思います。
まずspirnginitializrで適当なプロジェクトを作成します。

作成したら適当なフォルダに解凍して展開します。
pom.xmlに依存関係を足します。下記に内容に修正します。
<?xml version="1.0" encoding="UTF-8"?>
<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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>3.2.2</version>
<relativePath/>
<!-- lookup parent from repository -->
</parent>
<groupId>com.micrsrvc.infr</groupId>
<artifactId>microservice-infra</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>microservice-infra</name>
<description>Microservice Infrastructure Testing</description>
<properties>
<java.version>21</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-web -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>3.2.2</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-thymeleaf -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
<version>3.2.2</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<finalName>app</finalName>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
ディレクトリ構成は下記の通り

package com.micrsrvc.infr.microservice.infra.controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/api/")
public class GreetingController {
@GetMapping
public String greeting() {
return new String("Guten Morgen!");
}
}
server.port=8080
上記のソースを作成して下記のコマンドを実行します。
mvn spring-boot:run
postmanでテストを実行すると下記の通りになります。

これでcontainer化する資材が完成しました。
次にDockerfileを作成します。
FROM eclipse-temurin:21-jdk-alpine
VOLUME /tmp
ARG JAR_FILE
COPY ${JAR_FILE} app.jar
ENTRYPOINT ["java", "-jar", "/app.jar"]
Dockerfileの配置場所は下記の通りです。

上記を作成したらdockerコマンドで作業を進めていきます。
docker buildでDockerfileからimageを作成します。
docker build --build-arg JAR_FILE=target/*.jar -t myorg/myapp .
docker image lsを実行すると下記の通り、imageとして登録されていることが確認できます。
MacBook-Pro:microservice-infra$ docker image ls
REPOSITORY TAG IMAGE ID CREATED SIZE
myorg/myapp latest 021cc6d46660 6 minutes ago 366MB
<none> <none> 541890e22d7b 8 minutes ago 337MB
asia-northeast1-docker.pkg.dev/xxxx/quickstart-docker-repo/quickstart-
次にdocker contailerを確認すると下記の通り、containerが登録されています。
MacBook-Pro:microservice-infra$ docker container ls -la
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a8df3fda8913 myorg/myapp "java -jar /app.jar" 8 minutes ago Exited (130) 4 minutes ago blissful_nash
次にdocker runします。8080ポートが未使用であることを確認してください。
docker run -p 8080:8080 myorg/myapp
上記を実行するとSpringBootの立ち上げログが表示されます。process runningの状態になったらpostmanでアクセスしてみます。

・Docker ContainerからHostOSのMySQLに接続する
・DB用Containerを作成する
microserviceの構築のため、mysqlをcontainer化してサーバーとして立てたいと思います。
・Appendix
公式ドキュメントはこちら
https://spring.pleiades.io/guides/topicals/spring-boot-docker/
参考ドキュメントはこちら
コメントを残す