# LM Studio をdockerで動かした - LM StudioをDockerで動かし、軽量用途の課金を回避するローカルAPI設計 - 目的: 社内検証のコストを抑えつつ再現性を確保する構成と運用の説明 --- ## 起: 問題提起 - 軽量な社内利用・検証用途では SaaS LLM の従量課金が過剰になる - ローカルLLMをAPI化して、コスト上限を物理リソースで制御したい - 個人・小規模チームでも再現可能な構...
インタラクティブなスライドプレイヤーを利用するにはJavaScriptを有効にしてください。
- LM StudioをDockerで動かし、軽量用途の課金を回避するローカルAPI設計
- 目的: 社内検証のコストを抑えつつ再現性を確保する構成と運用の説明
’’’
=== 起: 問題提起
- 軽量な社内利用・検証用途では SaaS LLM の従量課金が過剰になる
- ローカルLLMをAPI化して、コスト上限を物理リソースで制御したい
- 個人・小規模チームでも再現可能な構成を優先する必要がある
- 解決方針は「LM StudioをDocker上でAPI化して、課金を抑える設計を採用すること」
’’’
=== 承: 背景と現状
- ベースOSは ubuntu:24.04 を採用。LM Studio公式インストーラ前提のglibc環境を活用
- GUIは使わず、Electron系依存(GTK / X11)を明示的にインストールして依存解決を回避
- LM Studioは install.sh 経由で導入。公式手順を踏み、将来のアップデート追従を容易に
- APIポートは 1234 を公開。OpenAI互換APIとしてアプリ側の差し替えを容易に
- モデルは google/gemma-3-4b をデフォルト指定。過度な高性能より「使いすぎない制御」を重視
- 環境設計はCPU/GPU・メモリ・同時実行数で自然に利用制限がかかるようにする
’’’
- 課金を避けたい用途にはローカルLLMを選択。コストは物理リソースで管理する
- API公開を前提とした設計で、後の運用でAPIゲートウェイ等の制限を付けやすくする
- 起動・運用の柔軟性を高めるため、起動処理を Dockerfile から分離する entrypoint を採用
- 今後の検討領域
** GPU活用(–gpus all)の有無
** モデルキャッシュの volume化
** リクエスト数・並列数の制限設計 - 次のアクションとして、環境変数でモデル切替を可能にする、context length/threadsの調整、軽量モデルの比較検証を検討
’’’
- 解決策の核
** ubuntu:24.04 ベースで、公式インストール手順に沿って LM Studio を導入
** GUIは不要、依存は最小化して必要なライブラリだけをインストール
** LM Studioを API ポート 1234 で公開して、OpenAI互換APIとして扱える設計
** デフォルトモデルは google/gemma-3-4b、コストを抑えつつ現実的な性能を確保
** エントリポイントを分離して起動オプションの変更をDockerfileから切り離し、将来のアップデート追従を容易に - 実装イメージ(核心点)
** ベース: ubuntu:24.04
** GUI依存を明示的にインストールしつつGUIは使わない設計
** install.sh 経由で LM Studio 導入
** PATHとLMSTUDIO_DEFAULT_MODELの設定
** EXPOSE 1234、entrypoint.sh を用いた起動 - 実際のコード構成は以下のDockerfileが最小構成として機能する
=== [.notes]
このDockerfileは LM StudioをDocker上で動かし、ローカルLLMをAPIとして提供するための最小構成。
FROM ubuntu:24.04
ENV DEBIAN_FRONTEND=noninteractive
RUN apt-get update && +
apt-get install -y –no-install-recommends +
bash +
ca-certificates +
curl +
libasound2t64 +
libatomic1 +
libatk-bridge2.0-0 +
libatk1.0-0 +
libc6 +
libcairo2 +
libcups2 +
libdbus-1-3 +
libdrm2 +
libgbm1 +
libglib2.0-0 +
libgtk-3-0 +
libnspr4 +
libnss3 +
libpango-1.0-0 +
libx11-6 +
libx11-xcb1 +
libxcb-dri3-0 +
libxcomposite1 +
libxdamage1 +
libxext6 +
libxfixes3 +
libxkbcommon0 +
libxrandr2 +
libgomp1 +
libxshmfence1 +
xdg-utils && +
rm -rf /var/lib/apt/lists/*
[cols=2*]
|===
| RUN curl -fsSL https://lmstudio.ai/install.sh
| bash
|===
ENV PATH=/root/.lmstudio/bin:$PATH
ENV LMSTUDIO_DEFAULT_MODEL=google/gemma-3-4b
EXPOSE 1234
COPY docker/lmstudio/entrypoint.sh /usr/local/bin/lmstudio-entrypoint.sh
RUN chmod +x /usr/local/bin/lmstudio-entrypoint.sh
このDockerfileは LM StudioをDocker上で動かし、ローカルLLMをAPIとして提供するための最小構成。
構成の観点
- ベースは
ubuntu:24.04+
→ LM Studio公式インストーラが前提としているglibc環境に合わせるため - GUI不要だが、Electron系依存ライブラリ(GTK, X11系)を明示的にインストール +
→lmstudioバイナリ起動時の依存解決用 install.shを使って公式手順どおりにLM Studioを導入 +
→ 将来のアップデート追従を優先
判断基準
- 課金を避けたい用途(軽量な社内AI、検証用API)なのでローカルLLMを採用
- モデルは
google/gemma-3-4bをデフォルト指定 +
→ メモリ消費と性能のバランス重視 - APIポートは
1234を公開 +
→ LM Studioの標準API互換
運用上のポイント
- 実際の起動処理は
entrypoint.shに切り出し +
→ モデル切替やオプション変更をDockerfileに書かずに済む - 本番用途では
** GPU対応(--gpus all)
** モデルキャッシュのvolume化
** 利用制限(リクエスト数・並列数)
を検討余地あり
次に試すこと
LMSTUDIO_DEFAULT_MODELを環境変数で切替可能にする--context-lengthや--threadsの明示指定- 軽量モデル(Phi / Qwen)との比較検証
’’’