2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

OpenShift のこと Web ブラウザで全部やってみる (その 2)

2
Posted at

OpenShift のこと Web ブラウザで全部やってみる (その 2)

これは Red Hat Advent Calendar 2025 の 12/24 の記事です。メリークリスマス!

はじめに

だいぶ前にこんな記事を書きました。

この時取り上げたのは Web Terminal Operator でしたが、今回は前の記事でもちょろっと触れていた Red Hat OpenShift Dev Spaces について書いていこうと思います。

OpenShift Dev Spaces の概要については既に解説記事があるのでそちらを見ていただくと良いと思いますが、ざっくり説明すると OpenShift 上でセルフホストする Web IDE (VSCode / IntelliJ IDEA) です。

今回はこの OpenShift Dev Spaces、特 Dev Spaces で利用できる Kubedock について話そうと思います。

そもそもなぜ OpenShift Dev Spaces が必要なのか?

アプリケーション開発ライフサイクルのうち、ローカル開発環境での開発サイクル ( Inner loop ) を回すときに以下のような課題に直面したことはありませんか?

  • 環境構築の複雑さ: 新しいプロジェクトを始めるたびに、開発環境のセットアップに時間がかかる(Node.js、Python、Java などのランタイム、データベース、各種ツールのインストールと設定)
  • 依存関係の管理: プロジェクトごとに異なるバージョンのランタイムやライブラリが必要で、環境の切り替えが面倒
  • チーム間の環境差: メンバーごとに OS(Windows、macOS、Linux)やツールのバージョンが異なり、同じ手順で動かない
  • セキュリティの懸念: ローカル環境に本番に近いデータや認証情報を配置することへの不安
  • オンボーディングの時間: 新しいメンバーがプロジェクトに参加する際、環境構築に数日かかる

Dev Spaces を利用すると開発者は上記のような環境構築の問題に煩わされることなく、ブラウザでアクセスさえすればアプリケーション開発のすべての準備が整った開発環境を利用できるようになります。

また、 Devfile というフォーマットで IDE の設定や開発者のための独自コマンド定義を宣言的に管理することができます。

この Devfile をソースコードと同じリポジトリ上でバージョン管理することで、開発者間で差分のない開発環境を実現できます。

Kubedock とは何か?なぜ必要なのか?

Kubedock は Kubernetes クラスタ上の Pod (コンテナ) 上でコンテナを実行するための Docker API の最小限の実装です。

OpenShift Dev Spaces が提供する IDE 環境 (Workspace) は OpenShift 上の Pod として動作するため、Kubedock が利用できるようになる前は Podman やコンテナに依存するようなツール (Testcontainers など) はこれまで利用できませんでした。

Kubedock が利用できるようになったことで、現在は Dev Spaces でもローカルの IDE と同様にコンテナが実行できるようになっています。

実際にやってみる

Kubedock を利用したコンテナ実行は以下のような Devfile を Git リポジトリに追加することで利用できます。

schemaVersion: 2.2.0
metadata:
  name: kubedock-sample-devfile
components:
  - name: tools
    container:
      image: quay.io/devfile/universal-developer-image:latest
      memoryLimit: 8Gi
      memoryRequest: 1Gi
      cpuLimit: "2"
      cpuRequest: 200m
      env:
        - name: KUBEDOCK_PARAMS
          value: "--reverse-proxy --kubeconfig /home/user/.kube/config --initimage quay.io/agiertli/kubedock:0.13.0"
        - name: USE_JAVA17
          value: "true"
        - value: /home/jboss/.m2
          name: MAVEN_CONFIG
        - value: -Xmx4G -Xss128M -XX:MetaspaceSize=1G -XX:MaxMetaspaceSize=2G
          name: MAVEN_OPTS
        - name: KUBEDOCK_ENABLED
          value: 'true'
        - name: DOCKER_HOST
          value: 'tcp://127.0.0.1:2475'
        - name: TESTCONTAINERS_RYUK_DISABLED
          value: 'true'
        - name: TESTCONTAINERS_CHECKS_DISABLE
          value: 'true'
      endpoints:
        - exposure: none
          name: kubedock
          protocol: tcp
          targetPort: 2475
        - exposure: public
          name: http-booster
          protocol: http
          targetPort: 8080
          attributes:
            discoverable: true
            urlRewriteSupported: true
        - exposure: internal
          name: debug
          protocol: http
          targetPort: 5005
      volumeMounts:
        - name: m2
          path: /home/user/.m2
  - name: m2
    volume:
      size: 10G

Devfile を Git リポジトリに追加し、ブラウザから以下の形式の URL にアクセスします。

https://<openshift_dev_spaces_fqdn>#<git_repository_url>

しばらくすると以下のように VSCode が立ち上がるので、ターミナルを開いてコンテナの一連の操作を実行してみます。

スクリーンショット 2025-12-24 18.02.51.png

# OpenShift 内部イメージレジストリにログイン
$ podman login -u admin -p $(oc whoami -t) --tls-verify=false image-registry.openshift-image-registry.svc.cluster.local:5000/admin-devspaces
Login Succeeded!

# コンテナイメージのビルドと内部レジストリへのプッシュ
$ podman build -t user1-nginx-app . -f Dockerfile
STEP 1/3: FROM nginx:alpine
Resolved "nginx" as an alias (/etc/containers/registries.conf.d/000-shortnames.conf)
Trying to pull docker.io/library/nginx:alpine...
Getting image source signatures
Copying blob 085c5e5aaa8e done   | 
Copying blob 1074353eec0d done   | 
Copying blob 25f453064fd3 done   | 
Copying blob 33f95a0f3229 done   | 
Copying blob 567f84da6fbd done   | 
Copying blob da7c973d8b92 done   | 
Copying blob 0abf9e567266 done   | 
Copying blob de54cb821236 done   | 
Copying config 04da2b0513 done   | 
Writing manifest to image destination
STEP 2/3: COPY default.conf /etc/nginx/conf.d/
--> e41e583778f6
STEP 3/3: COPY index.html /usr/share/nginx/html/
COMMIT user1-nginx-app
--> 0ae69bc9f566
Successfully tagged localhost/user1-nginx-app:latest
0ae69bc9f566b82543df39c14caad9c524270454285d9525ae4763ae6a06447e

$ podman images
REPOSITORY                 TAG         IMAGE ID      CREATED         SIZE
localhost/user1-nginx-app  latest      0ae69bc9f566  26 seconds ago  55.2 MB
docker.io/library/nginx    alpine      04da2b0513cd  6 days ago      55.2 MB

$ podman push --tls-verify=false localhost/user1-nginx-app:latest image-registry.openshift-image-registry.svc.cluster.local:5000/admin-devspaces/user1-nginx-app:latest
Getting image source signatures
Copying blob ed5fa8595c7a done   | 
Copying blob fd1e40d7f74b done   | 
Copying blob 8ae63eb1f31f done   | 
Copying blob 7bb20cf5ef67 done   | 
Copying blob b3e3d1bbb64d done   | 
Copying blob 48078b7e3000 done   | 
Copying blob 67ea0b046e7d done   | 
Copying blob fb6c64633fd4 done   | 
Copying blob e6fe11fa5b7f done   | 
Copying blob 42cc4e8c87ef done   | 
Copying config 0ae69bc9f5 done   | 
Writing manifest to image destination

# コンテナの実行
$ podman run --rm -d -p 8080:8080 --tls-verify=false image-registry.openshift-image-registry.svc.cluster.local:5000/admin-devspaces/user1-nginx-app:latest

コンテナを実行すると IDE 上で以下のようなポップアップが表示されます。ブラウザの別タブが開き、 hello world が表示されたのでコンテナが実行できアクセスできることが確認できました。

スクリーンショット 2025-12-24 18.08.33.png

スクリーンショット 2025-12-24 18.08.46.png

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?