PodmanでJava + Spring Boot + MariaDBの環境構築

# はじめに
有料化に伴い、仕事ではDocker以外を使っている方も多いのではないでしょうか？今回の記事では、Dockerと互換性があるPodmanを使って、Java、Spring Boot、MariaDBをセットアップする方法を紹介します。

# 前提条件
- Podmanがインストールされていること
- Pythonとpipがインストールされていること

# 環境構築の流れ
## podman-composeのインストール
最初にpodman-composeをインストールします。podman-composeはPythonで書かれているため、pipを使用します。
```terminal
pip3 install podman-compose
```
インストール後に、podman-composeのPathが通っていることを確認します。
```terminal
which podman-compose
```
通っていなければ追加します。
```terminal
echo 'export PATH=$PATH:/Users/yourusername/Library/Python/3.9/bin' >> ~/.bashrc
// または
echo 'export PATH=$PATH:/Users/yourusername/Library/Python/3.9/bin' >> ~/.zshrc
```
シェルの再読み込み
```terminal
source ~/.bashrc
// または
source ~/.zshrc
```

# プロジェクトの作成
https://start.spring.io/

Spring Initializrを使用してSpring Bootプロジェクトを作成します。
とりあえず今回はMariaDBを使用するので、以下の依存関係を追加してみてください。
- Spring Web
- Spring Batch
- Spring Data JPA
- MariaDB Driver

# Dockerfileの作成
プロジェクトのルートディレクトリにDockerfileを作成します。
```Dockerfile
# ベースイメージとしてOpenJDK 17を使用
FROM openjdk:17-jdk-slim

# 作業ディレクトリを設定
WORKDIR /app

# Mavenビルドのために必要なファイルをコピー
COPY mvnw .
COPY .mvn .mvn
COPY pom.xml .

# 依存関係をダウンロード
RUN ./mvnw dependency:go-offline

# プロジェクトのソースコードをコピー
COPY src src

# プロジェクトをビルド
RUN ./mvnw package -DskipTests

# アプリケーションを実行
CMD ["java", "-jar", "target/your-app-name.jar"]
```

# docker-compose.ymlの作成
プロジェクトのルートディレクトリにdocker-compose.ymlファイルを作成します。
```yaml
version: '3.8'

services:
  app:
    build: .
    ports:
      - "8080:8080"
    environment:
      - SPRING_PROFILES_ACTIVE=dev
    depends_on:
      - db

  db:
    image: mariadb:10.5
    environment:
      MYSQL_ROOT_PASSWORD: rootpassword
      MYSQL_DATABASE: mydatabase
      MYSQL_USER: myuser
      MYSQL_PASSWORD: mypassword
    ports:
      - "3306:3306"
    volumes:
      - db-data:/var/lib/mysql

volumes:
  db-data:
```

# Spring Bootの設定ファイルの更新
src/main/resources/application.propertiesまたはapplication.ymlに、DB接続のための設定を追加します。以下を追記してください。
```properties
spring.datasource.url=jdbc:mariadb://db:3306/mydatabase
spring.datasource.username=myuser
spring.datasource.password=mypassword
spring.jpa.hibernate.ddl-auto=update
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MariaDBDialect
```
# Hello Worldしてみる
src/main/java/com/example/projectname/にHelloController.javaを作成して以下を追加してください。
```java
package com.example.earthquakenotification;

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

@RestController
public class HelloController {
    @GetMapping("/")
    public String hello() {
        return "Hello world";
    }
}
```

# podman-composeによるビルドと起動
プロジェクトのルートディレクトリで以下のコマンドを実行します。
```terminal
podman-compose up --build
```
これで、Java、Spring Boot、MariaDBを使用するための環境が構築されます。
アプリケーションには http://localhost:8080 でアクセスできます！
以下のように、Hello Worldがでたら完了です！(※私の環境では8080は別で使っていたので、8081にしています。)
![Screenshot 2024-09-18 at 11.25.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2728030/8dca975c-93a4-a27d-e84e-f49f60f4d868.png)


# まとめ
この記事では、podman-composeを使用してJava、Spring Boot、MariaDBをセットアップする方法を紹介しました。Dockerのビジネス利用有料化に伴い、Podmanは優れた代替ツールとして注目されています。Podmanを使用することで、セキュリティ面での利点を享受しながら、既存のDocker環境をスムーズに移行することができます。ぜひこちらの記事が参考になればうれしいです！