RHELでの開発を想定して、Cloud Workstationsのベースも同じにできるか、試してみました。
また以下の手順で、Cloud Workstationsだけでなく、ローカルのDocker上でも動作するWeb IDE環境を構築できます。
今回のまとめ
- ✅ RockyベースのCode OSSカスタムイメージをCloud Workstations上で動作させることは可能。
- ❌ Gemini Code Assistは使用できるがAgentは動作せず、Google提供のベースイメージ(Debianベースのみ)を利用する必要がありそう。
- ❌ Podmanはcgroup v2依存のため、Cloud Workstationsの標準環境ではそのまま動作しない。
- ⚠️ コンテナの永続化も含め、カスタムイメージの作成はまだまだやることがある。
👉 結論として、RHEL系の場合でのAIを活用した開発は「DebianベースのGoogle提供のベースイメージのWorkstations + Rockyコンテナ (Docker上)を使ったデバッグ」で行うのが現実的と感じました。
構成
- 以下のようにRockyベースのCode OSSイメージを作成してArtifact Registryに登録して、それをもとにワークステーションを作成します。
- 設定の永続化や、コンテナ上でのDBを含む開発環境の構築は今後の課題で、今回は以下を全部は構築できていません。
①まずは以下のようなDockerfileを作成しました(Powered by Chat GPT5.0)。
以下も参考にしながらChat GPT5.0で進めてみます。
https://cloud.google.com/workstations/docs/customize-container-images?hl=ja
Dockerfile(PoC用)
※実運用ではパスワード設定等を確認ください。
FROM rockylinux:9
# 依存(軽量の curl-minimal を使用)
RUN dnf -y update && \
dnf -y install --setopt=install_weak_deps=False \
curl-minimal tar shadow-utils libX11 mesa-libgbm nss alsa-lib procps-ng && \
dnf clean all && rm -rf /var/cache/dnf
# sudo のインストールと NOPASSWD 設定
RUN dnf -y install sudo && \
echo '%wheel ALL=(ALL) NOPASSWD: ALL' >> /etc/sudoers
# 非rootユーザー
RUN useradd -m -u 1000 coder
RUN usermod -aG wheel coder
# code-server を取得・配置(必要なバージョンに合わせて VERSION を調整)
ENV VERSION=4.89.1
RUN curl -fsSL https://github.com/coder/code-server/releases/download/v${VERSION}/code-server-${VERSION}-linux-amd64.tar.gz \
| tar -xz -C /opt && \
ln -s /opt/code-server-${VERSION}-linux-amd64 /opt/code-server && \
mkdir -p /home/coder/.config/code-server && chown -R coder:coder /home/coder /opt/code-server*
# 起動エントリポイント(8080 で無認証・TLSなし)
COPY entrypoint.sh /usr/local/bin/entrypoint.sh
RUN chmod +x /usr/local/bin/entrypoint.sh
USER coder
EXPOSE 8080
ENTRYPOINT ["/usr/local/bin/entrypoint.sh"]
entrypoint.sh(PoC用)
※実運用ではパスワード設定等を確認ください。
#!/usr/bin/env bash
set -euo pipefail
CFG="$HOME/.config/code-server/config.yaml"
mkdir -p "$(dirname "$CFG")"
cat > "$CFG" <<'EOF'
bind-addr: 0.0.0.0:8080
auth: none
disable-telemetry: true
cert: false
EOF
exec /opt/code-server/bin/code-server \
--user-data-dir "$HOME/.local/share/code-server" \
--extensions-dir "$HOME/.local/share/code-server/extensions" \
--disable-telemetry
②Google CloudのCloud Shellを使います。
上記の2ファイルを配置します。
事前に以下APIを必要に応じて有効化しておきます。
- artifactregistry.googleapis.com
- cloudbuild.googleapis.com
以下をCloud Shellから実行します。
# 0) 変数
export PROJECT_ID="your-gcp-project-id"
export REGION="asia-northeast1"
export REPO="dev-images" # お好みのリポジトリ名
export IMAGE="code-server" # お好みのイメージ名
export TAG="v0.1" # タグ
# 1) プロジェクト選択
gcloud config set project "$PROJECT_ID"
# 3) Artifact Registry(Docker)リポジトリを作成(初回のみ)
gcloud artifacts repositories create "$REPO" \
--repository-format=docker \
--location="$REGION" \
--description="Dev images"
③Cloud Buildで“その場から”ビルド&Pushします。
Dockerfile
と entrypoint.sh
があるディレクトリで以下をCloud Shellから実行:
# Cloud Build で Dockerfile をビルドし、完成イメージを直接 Artifact Registry へ push
gcloud builds submit . \
--tag "$REGION-docker.pkg.dev/$PROJECT_ID/$REPO/$IMAGE:$TAG"
gcloud builds submit
にてデフォルトでカレントディレクトリの Dockerfileを使用し、ビルド成果物を--tag
で指定した Artifact Registry に push します。
ちなみにentrypoint.sh
は code-server を auth: none
で起動しており 8080 を全開にします。これは今回の作成するCloud Workstationsのクラスタの外部IP無しかつVPCネットワークは、サブネットのFirewallで、INGRESS:0.0.0.0/0を拒否しています( Firewallではサービスアカウントの指定を忘れずに )。
④Cloud Workstationsを作成
クラスタを作成→クラスタ構成作成と進む。
この時に以下に注意。
- カスタムコンテナのイメージで先ほど作ったArtifact Registryのイメージを選択する。
- 環境変数にHOME=/tmp/codeを追加。その他は同じ(ここは権限設定の関係で暫定的)。
- 外部IPを許可しない、SSHも許可しない。
Cloud Workstationsを作成し、8080で接続。
⑤ Gemini Code Assistをインストール
- ExtensionからGemini Code Assistをインストール
- Gemini Code AssistにSign inしてブラウザで認証
- Gemini Code Asssitを使う。
最後に
agentが動きません。
Podmanも動きません。
Podmanは5.xになり、cgroupv1では動かくなったようです。
Cloud Workstationsのホストもデフォルトではcgroupv2ではなくcgroupv1のようで、Podman4.xのインストールもうまくいかず、Podmanまで使える環境構築は今後の課題です。
コンテナの永続化をこれからです。
コンテナを再起動すると初期状態に戻るので、永続化設定ももう少し見てみる必要がありそうです。
結論
Podman上でPostgreSQLまでを動かし、Cloud Workstations上で、Agentでの開発やPythonやJavaのデバッグができる環境を目指したかったですが、課題が多いです。
特にGemini Code Assistの機能をフルに使うには、Google提供のBaseイメージを使うのがよさそうです。RHEL系の動作検証は、DebianベースのCloud Workstations上のDocker上でRHEL系のコンテナを使い行うのが現実的なようなです。
お疲れ様でした。