はじめに
本記事は、以下の参考記事をもとに最後まで実践してみて、初心者の自分が詰まった部分、どうなんとなくわかったかをまとめたものです。
参考記事:1時間でなんとなくわかった気になる Open Liberty でアプリケーション開発 & コンテナビルド & OpenShift へデプロイ
- 知らなかった用語
- 詰まったところ
- なんとなくわかったところ
1.知らなかった用語
登場する用語で、理解があやふやなところをまとめました。
Podman(ポッドマン)
Dockerの代替となるコンテナ管理ツールです。Dockerとほぼ一緒。
# Dockerの場合
docker build -t myapp:1.0 .
# Podmanの場合(ほぼ同じ)
podman build -t myapp:1.0 .
Maven(メイヴン)
Javaプロジェクトのビルド自動化ツールです。
pom.xmlで設定を管理し、./mvnw installでビルドします。
curlとwgetの違い
curl(カール)
- データ転送・API テストに特化
- 標準出力に結果を表示
- RESTful APIのテストに最適
curl http://localhost:9080/api/helloworld
wget(ダブルゲット)
- ファイルダウンロードに特化
- ファイルとして保存
- 再帰的ダウンロードが得意
server.xml
Open Libertyサーバーの設定ファイルです。
<server>
<featureManager>
<feature>jakartaee-10.0</feature>
</featureManager>
<httpEndpoint id="defaultHttpEndpoint"
host="*"
httpPort="9080"
httpsPort="9443" />
<webApplication location="liberty-container.war"
contextRoot="/liberty-container" />
</server>
-
<featureManager>: 使用する機能を指定 -
<httpEndpoint>: ポート設定(host="*"で外部からアクセス可能に) -
<webApplication>: アプリケーション設定
pom.xml
Mavenプロジェクトの設定ファイル(Project Object Model)です。
<project>
<groupId>com.babatch.demo</groupId>
<artifactId>liberty-container</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>war</packaging>
<properties>
<maven.compiler.source>21</maven.compiler.source>
<maven.compiler.target>21</maven.compiler.target>
</properties>
<dependencies>
<!-- 依存ライブラリ -->
</dependencies>
<build>
<plugins>
<plugin>
<groupId>io.openliberty.tools</groupId>
<artifactId>liberty-maven-plugin</artifactId>
<version>3.10.2</version>
</plugin>
</plugins>
</build>
</project>
liberty-maven-plugin により、Libertyサーバーを事前インストールせずに開発・テストが可能です。
2. 詰まったところ
①コマンドをどこでうつか
ターミナルでもOKなコマンドなのか、指定の位置で打たなければいけないコマンドなのか、どこですればいいか考える場面が多かった。例えば下のコマンド。
1. podman rmi localhost/liberty-container:1.0-SNAPSHOT
2. podman manifest create liberty-container:1.0-SNAPSHOT
3. podman build --platform linux/amd64,linux/arm64 --manifest liberty-container:1.0-SNAPSHOT
1はローカルのコンテナイメージを削除するだけだからどこでもOK。
2もmanifest(コンテナイメージを作成するための型?)を作成するだけだからどこでもOK。
3はDockerfileのあるディレクトリをビルドコンテキストとして、各アーキテクチャのイメージをビルドシソの結果をmanifestに紐づけるからDockerfileがあるアプリケーションでコマンド打たないといけない。ディレクトリに依存する。
②ローカルからOpenshiftクラスターへのイメージのpush
ローカルとOpenshiftクラスターで別々のイメージレジストリがあるから、ローカルのイメージをそのまま用いてデプロイはできないというのはなんとなく知っていたが、改めて手を動かすと
ローカルでのタグ付けやopenshiftへのログイン、イメージレジストリのRouteなど全体像が描けず時間がかかった。
┌─────────────────────────────────────────────────────────────────────┐
│ ローカル環境 │
├─────────────────────────────────────────────────────────────────────┤
│ │
│ ┌──────────────────────────────────────────────┐ │
│ │ localhost/liberty-container:1.0-SNAPSHOT │ │
│ │ (ローカルのコンテナイメージ) │ │
│ └──────────────────┬───────────────────────────┘ │
│ │ │
│ │ ① podman tag │
│ │ (クラスタ側の名前を付与) │
│ ▼ │
│ ┌──────────────────────────────────────────────────────────────┐ │
│ │ default-route-openshift-image-registry.apps.itz-dywlsr... │ │
│ │ /liberty-container/liberty-container:1.0-SNAPSHOT │ │
│ │ (タグ付けされたイメージ) │ │
│ └──────────────────┬───────────────────────────────────────────┘ │
│ │ │
└─────────────────────┼────────────────────────────────────────────────┘
│
│ ② podman login
│ (認証: admin + OCトークン)
│
│ ③ podman manifest push --all
│ (マルチアーキテクチャー対応push)
│
▼
┌─────────────────────────────────────────────────────────────────────┐
│ OpenShift クラスター │
├─────────────────────────────────────────────────────────────────────┤
│ │
│ ┌────────────────────────────────────────────────────────────┐ │
│ │ Internal Image Registry │ │
│ │ (openshift-image-registry namespace) │ │
│ │ │ │
│ │ Route: default-route-openshift-image-registry.apps... │ │
│ │ ┌──────────────────────────────────────────────────────┐ │ │
│ │ │ Project: liberty-container │ │ │
│ │ │ ┌────────────────────────────────────────────────┐ │ │ │
│ │ │ │ Image: liberty-container:1.0-SNAPSHOT │ │ │ │
│ │ │ │ - amd64 アーキテクチャー │ │ │ │
│ │ │ │ - arm64 アーキテクチャー │ │ │ │
│ │ │ │ (マルチアーキテクチャー対応) │ │ │ │
│ │ │ └────────────────────────────────────────────────┘ │ │ │
│ │ └──────────────────────────────────────────────────────┘ │ │
│ └────────────────────────────────────────────────────────────┘ │
│ │
│ 次のステップ: │
│ OpenLibertyApplication CRDを使用してデプロイ │
│ ↓ │
│ Route経由で外部アクセス可能に │
│ │
└─────────────────────────────────────────────────────────────────────┘
3. OpenLibertyなんとなくわかったところ
Operatorなしの場合だと手動でデプロイのための各リソースを作成し、yaml設定が面倒だけど、OpenLibertyだとOpenLibertyOperatorのおかげで、たった一つのyamlファイルを作成するだけでデプロイが完了して楽。
Operatorなしの場合(従来)
手動で作成が必要:
- Deployment - Podの管理
- Service - Pod間の通信
- Route - 外部公開
- ConfigMap - 設定管理
- Secret - 認証情報管理
→ YAMLファイルいちいち作るのめんどい。。。
Open Liberty Operatorを使った場合
たった7行のYAMLでデプロイ完了!
apiVersion: apps.openliberty.io/v1
kind: OpenLibertyApplication
metadata:
name: liberty-container
spec:
applicationImage: <プロジェクト名>/liberty-container:1.0-SNAPSHOT
expose: true ← これだけでRouteも自動作成!
