[A-00181] Docker,Kubernetesでmicroserviceを作成する

関連記事は下記

Docker, Kubernetesを使ってmicroserviceを作りたいと思います。

・ContainerでSpringBootを動かす

まずはspring-bootをContainer上で起動したいと思います。

まずspirnginitializrで適当なプロジェクトを作成します。

https://start.spring.io/

作成したら適当なフォルダに解凍して展開します。

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/

参考ドキュメントはこちら

https://qiita.com/saitoshi/items/a931399e81e63e8e4f1e

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

*