Quarkus の Testcontainers を Podman で動かす
概要
Quarkus で開発をする際に自動的に必要な Docker コンテナを立ち上げてくれますが Podman の Docker 互換 API で動かすこともできるとのことだったのでその覚え書きです。
環境
- Fedora 39
- OpenJDK 21 (Temurin 21.0.2)
- Quarkus 3.7.4
- Podman 4.9.3
セットアップ
Docker と異なり Podman は本来デーモン起動を必要としないのですが、これでは testcontainers を立ち上げられないため、 Docker 互換の API を提供する podman-docker
をインストールして systemd サービスを起動しておきます。
nukosuke@fedora ~> sudo dnf install -y podman podman-docker podman-remote
nukosuke@fedora ~> systemctl --user enable podman.socket --now
nukosuke@fedora ~> podman info
...
remoteSocket:
exists: true
path: /run/user/1000/podman/podman.sock
...
/run/user/1000/podman/podman.sock
に sock ファイルが作成されていることが確認できます。ここでの 1000
はユーザの UID ですので適宜読み替えてください。( --user
ではなく root 起動した場合は /run/podman/podman.sock
)
# ~/.config/fish/config.fish
set -x TESTCONTAINERS_RYUK_DISABLED true
Quarkus 公式の記事では DOCKER_HOST
環境変数を指定する方法が紹介されていますが、何故か私の環境ではこれが無視され testcontainers が /run/docker.sock
を探しにいってコンテナの起動に失敗するので、 .testcontainers.properties
に docker.host
を指定することで対処しました。
# ~/.testcontainers.properties
docker.host=docker.host=unix\:///run/user/1000/podman/podman.sock
ryuk.container.privileged=true
Quarkus プロジェクトに依存を追加する
この記事では Amazon DynamoDB を使用するために DynamoDB Enhanced Client の Quarkus extension を追加しています。この extension では LocalStack 経由で DynamoDB Local が立ち上がります。
// build.gradle
dependencies {
// ...
implementation enforcedPlatform("${quarkusPlatformGroupId}:quarkus-amazon-services-bom:${quarkusPlatformVersion}")
implementation 'io.quarkiverse.amazonservices:quarkus-amazon-dynamodb-enhanced'
// ...
}
これで開発に必要なコンテナイメージが自動的に pull
& 起動されるようになりました。
nukosuke@fedora ~/w/g/n/quarkus-podman (work/setup)> ./gradlew quarkusDev
...
2024-02-24 23:14:59,003 INFO [io.qua.ama.com.dep.DevServicesLocalStackProcessor] (build-38) Amazon Dev Services for localstack (dynamodb) started. Other Quarkus applications in dev mode will find the LocalStack automatically.
__ ____ __ _____ ___ __ ____ ______
--/ __ \/ / / / _ | / _ \/ //_/ / / / __/
-/ /_/ / /_/ / __ |/ , _/ ,< / /_/ /\ \
--\___\_\____/_/ |_/_/|_/_/|_|\____/___/
2024-02-24 23:14:59,970 INFO [io.quarkus] (Quarkus Main Thread) platform 1.0.0-SNAPSHOT on JVM (powered by Quarkus 3.7.4) started in 8.039s. Listening on: http://localhost:8080
...
docker
コマンドを叩いてみると、localstack
コンテナが立ち上がっていることが確認できました。(実際に動いているのは podman ですが podman-docker
パッケージに含まれる docker
コマンドが docker CLI をエミュレートしています)
nukosuke@fedora ~/w/g/n/quarkus-podman (work/setup)> docker ps
Emulate Docker CLI using podman. Create /etc/containers/nodocker to quiet msg.
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
b4ef9a759761 docker.io/localstack/localstack:3.0.1 21 seconds ago Up 21 seconds (healthy) 0.0.0.0:38403->4566/tcp lucid_easley