今更ですが、コンテナの作成方法、kubectl コマンドの使い方をメモします。いつも複雑すぎて忘れるので。。
前提
- Spring Boot Initializr で Gradle ベースのひな型をダウンロードします。VSCode を使うと便利。
- Docker Desktop 最新版をインストールしておきます。kubectl も1つ前の安定板がインストールされます。
- Docker Desktop の Settings で “Enable Kubernetes” のチェックをオンにします。(忘れやすい)
Spring Boot プログラムの確認
Spring Boot Initializr の出力をそのままコンパイルできます。(sample-app という名称とします。)
./gradlew package
パッケージ化に成功すると、./build/libs/sample-app-0.0.1-SNAPSHOT.jar が作成されます。
コンテナ化
Spring Boot プログラムをコンテナ化します。まず以下のような Dockerfile を用意します。
FROM gradle:jdk21 as build
WORKDIR /tmp
COPY ./src ./src
COPY ./gradle ./gradle
COPY build.gradle .
COPY compose.yaml .
COPY gradlew .
COPY settings.gradle .
RUN ./gradlew build
FROM openjdk:21-jdk
COPY --from=build /tmp/build/libs/sample-app-0.0.1-SNAPSHOT.jar /app/app.jar
EXPOSE 8080
ENTRYPOINT ["java","-jar","/app/app.jar"]
OpenJDK21 を使っていますが、お好みで OpenJDK17 等を使うことも可能です。sample-app フォルダ直下で、
docker build -t sample-app:latest .
を実行し、sample-app:latest タグのついたコンテナを作成します。
docker images
で sample-app が作成され、ローカルキャッシュにあることを確認します。
Kubernetes 用 pod.yaml の作成
コマンド kubectl に与える pod.yaml ファイルを作成します。
apiVersion: v1
kind: Pod
metadata:
creationTimestamp: null
labels:
run: sample-app
name: sample-app
spec:
containers:
- image: sample-app
name: sample-app
imagePullPolicy: Never
command: ["java","-jar","/app/app.jar"]
dnsPolicy: ClusterFirst
restartPolicy: Never
status: {}
Kubernetes の起動
Docker Deskop をインストール済みなので、minikube 等をインストールしなくても kubectl コマンドを使用可能です。
kubectl create -f ./pod.yaml
で sample-app を起動します。コンポーネントがないと起動後すぐ終了するようです。
> kubectl get pods
NAME READY STATUS RESTARTS AGE
sample-app 0/1 Completed 0 13h
使い終わったら sample-app を削除します。
kubectl delete -f ./pod.yaml
コメントを残す