Kubernetes 運用メモ

今更ですが、コンテナの作成方法、kubectl コマンドの使い方をメモします。いつも複雑すぎて忘れるので。。

前提

  1. Spring Boot Initializr で Gradle ベースのひな型をダウンロードします。VSCode を使うと便利。
  2. Docker Desktop 最新版をインストールしておきます。kubectl も1つ前の安定板がインストールされます。
  3. 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
投稿者について
みのしす

小さいときは科学者になろうとしたのに、その時にたまたま身に着けたプログラミングで未だに飯を食っているしがないおじさんです。(年齢的にはもうすぐおじいさん)

コメントを残す

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