GUIと日本語環境が使えるお手軽Docker環境の使い方
おすすめDocker環境
株式会社松尾研究所のからあげ(@karaage0703)です。以前環境構築方法として、Dockerを紹介しました。
上記記事では、Dockerのセットアップから基礎的な使い方までを厚く説明しました。その分、実際のDockerの使いこなしの部分やDockerfile、Docker Composeに関しては、紹介のみにとどまる形になってしまいました。
そのため、本記事では補足として、おすすめのDocker環境を題材に、活用方法に加えてDockerfileとDocker Composeの簡単な説明をしたいと思います。
GUIと日本語環境が使えるDocker環境
以前紹介した記事では、DockerのデメリットとしてGUIを使うケースが苦手と書きましたが、今回はその欠点を補うことができるようなDocker環境を紹介したいと思います。
ベースとなるのはWebtopというソフトウェアです。Webtopは、デスクトップ環境が構築されたDockerコンテナ内のVNCサーバに、ブラウザでアクセスすることで、Dockerコンテナ内でGUIを扱うことができます。
上記リポジトリをベースに、以下の3点を変更したリポジトリを作成しました。本記事ではこちらを使用します。
- 日本語対応
- セットアップの簡易化
- docker-compose → docker compose置き換え
こちらのリポジトリを使うことで、GUI付きのDocker環境を手軽に構築することができます。
Webtopの使い方
Dockerfile等を説明する前に、まずは使ってみた方がメリットが分かりやすいと思うので、実際にWebtopの使用例を説明します。OSはDockerがセットアップされていれば、MacOS, Linux, Windows(WSL2)どれでも使用可能です。操作も共通です。
Docker, Docker Composeはセットアップされている前提です。まだセットアップされていない方は、こちらの記事を参考にセットアップして基礎的な使い方を確認しておいてください。
以下コマンドでリポジトリをダウンロードします。
$ cd && git clone https://github.com/karaage0703/docker-webtop
続いて、以下docker composeコマンドでwebtopを起動します。初回は、Dockerイメージのビルドのため時間がかかります。
$ cd ~/docker-webtop
$ docker compose up webtop
起動したら、以下のアドレスにWebブラウザでアクセスしましょう。今回はGoogle Chromeを使用しています。
http://localhost:3000/
以下のような画面が出たらOKです。
これでブラウザ経由でDocker内のGUI環境を自由に使えます。
左下のアイコンからターミナルを立ち上げることができます。
ターミナルは最初から日本語化がされています。
日本語入力は、クリップボードを使用するのが手軽です。ホストPC側で日本語文章をコピーしておき、Docker環境にペーストすることができます。右下にはクリップボードで履歴管理もできるので、ここから選択して貼り付けることもできます。
データは、~/docker-webtop/data
のフォルダがDocker環境にマウントされているので、開発や実験したいファイルは~/docker-webtop/data
以下におきましょう。
GUIでなく、CUI環境を使いたいときは、コンテナを立ち上げたまま、以下のdockerコマンドを実行することでコンソールにログインできます。
$ docker exec -it webtop /bin/bash
WebtopでAIエージェントを動かす
Webtopの活用方法として、Webtop環境でAIエージェントを動かしてみましょう。AIエージェントは、人間が細かく指示を出さなくても、AIが複雑な仕事をやりとげてくれる仕組みです。
AIエージェントは自身でそのゴールを達成するためには何が必要なのかを考え、自分で一つひとつのタスクに分解し、利用可能なツールを駆使しながらゴールを達成しようと自律的に行動します。
その仕事、AIエージェントがやっておきました。 ――ChatGPTの次に来る自律型AI革命より引用
AIエージェントは、便利でパワフルな一方、様々なことをやらせようとするとGUI環境が必要だったり、一つ間違えるとAIエージェント自身が、PC環境を破壊してしまう可能性があります。そのため、今回紹介するWebtopのような、使い捨てできるGUI付きのDocker環境とは非常に相性がよいです。
今回は、AIエージェントの中でもベンチマークで高い性能を示しているMetaGPTを試してみます。
Data Interpreter: An LLM Agent For Data Scienceより引用
DockerのGUI環境でREADMEの通りに動かしてみましょう。
以下コマンドでMetaGPTをインストールして、初期化します。
$ pip install --upgrade metagpt
$ metagpt --init-config
コンフィグファイル~/.metagpt/config2.yaml
のapi_key
にOpenAIのAPI Keyを入力します。
サンプルのIrisのデータセット(機械学習分野のチュートリアルで用いられることの多いデータ)を分析する以下コードを実行します。
import asyncio
from metagpt.roles.di.data_interpreter import DataInterpreter
async def main():
di = DataInterpreter()
await di.run("Run data analysis on sklearn Iris dataset, include a plot")
asyncio.run(main())
AIエージェントが動き出しました。
途中、環境のセットアップでエラーが出ましたが、エラーをもとにAIエージェントが自律的に対応し、グラフの可視化まで実施してくれました。
今回はここまでにします。
Docker環境の解説
今回のGUIを実現したDocker環境の説明です。
Docker環境を構築するので重要なのは、DockerイメージのもととなるDockerfileとDocker Composeの設定ファイルとなるdocker-compose.yamlの2つです。
Dockerfile
Dockerfileの中身は以下です。
最初の以下の行で、Webtopのイメージを土台としています。
FROM lscr.io/linuxserver/webtop:ubuntu-kde
Dockerfileはこのように既存のイメージをベースに、カスタムしたイメージを作り上げることができます。今回はRUN apt-get -y install fonts-takao
で日本語フォントを追加することで日本語化を実現しています。
Open CV関係のエラー
DockerfileでビルドするときImportError: libGL.so.1: cannot open shared object fil e: No such file or directory
やImportError: libgthread-2.0.so.0: cannot open shared object file: No such file or directory
といったエラーが発生する場合があります。
これは、OpenCV関係のライブラリがないことが原因です。対策としてはDockerfileに以下2行を追記してください。
RUN apt-get install -y libgl1-mesa-dev
RUN apt-get install -y libglib2.0-0
Docker Compose
Docker Composeは、Dockerで複数コンテナを使用するときに便利な仕組みです。Dockerの複雑なオプションを管理する役割もあります。今回は、主に後者の目的で使っています。
docker-compose.yaml
では、先程のDockerfile
を指定し、ボリュームのマウント等複数の設定を行っています。ここで設定をすることでdocker compose up webtop
というシンプルなコマンドで複雑な設定を実現することができます。
docker-compose.yaml
にGPUの設定をすれば、Docker上でGPUを使うことも可能です。今回準備したdocker-compose.yaml
もwebtop-gpu
というGPUに対応した設定を用意しています。具体的な設定はdocker-compose.yamlを確認しましょう。
GPUがセットアップされたPC環境であれば、以下のようにwebtop
をwebtop-gpu
に変えることで、GUI付きのGPU環境を構築することが可能です。
$ docker compose up webtop-gpu
GPUが必要な人は試してみてください。その他、個々人が必要な環境に応じてDockerfileを書き換えると、便利に使えると思います。
Dockerfileを書き換えた後は、以下コマンドでDockerイメージをビルドしなおしましょう。
$ docker compose build --no-cache webtop
新旧のdocker composeコマンドに関して(docker compose vs docker-compose)
Docker Composeのコマンド体系はdocker-compose
とdocker compose
の2種類があり紛らわしいですが、後者のdocker compose
のサブコマンドを使うコマンド体系がオフィシャルの推奨です。
またdocker-compose.yaml
は公式サイトによるとcompose.yaml
が推奨のようですが、この記事では分かりやすさを重視してよく使われるdocker-compose.yaml
を使用します。
VS Codeエディタでの開発
コーディングのときは、VS CodeエディタでDockerコンテナを使用して開発したくなるかもしれません。その場合は、Dev Containers拡張機能を使用しましょう。
.devcontainer.json
ファイルを用意しています。F1
キーを押したあと「開発コンテナー:コンテナーでフォルダを開く」を選択しましょう。
これでDockerコンテナ内で開発ができます。VS Codeエディタの「表示→ターミナル」でターミナルを選択することでコンテナ内のコマンド操作も可能となります。
使用するコンテナの指定などの設定は.devcontainer.jsonファイルでおこないます。
他の用途のDocker環境に関して
最近ホットなLLM開発環境に関しては、松尾研発スタートアップである株式会社Elithの大森さんが、とても分かりやすい記事を書いてくださっています。
また、私もWeb上に公開されている様々なLLMをDocker環境で動かすためのソフトを個人的に公開しています。
興味ある方はこれらのDockerfile
、docker-compose.yaml
の設定例なども参考にしてみてください。
まとめ
GUIと日本語環境が使えるお手軽Docker環境の紹介に加えて、Dockerfile、Docker Composeに関して説明しました。AIエージェントや、GUIが必要なソフト(シミュレータ等)を動かすケースでは、今回紹介したGUIが使えるDocker環境が役立つのではないかと思います。
また、目的に合わせた環境構築は、開発を加速するために非常に重要です。本記事の内容がそのための参考になれば幸いです。
謝辞
WebtopはTatsuya Ishikawaさんに教えていただきました。感謝いたします。
参考記事
関連記事
Discussion
超初心者質問で申し訳ありません。
この記事で記載されているAIエージェントを動かすためには、ホストPCでGPUは必要なのでしょうか?(Docker入れたらGPU要らないということではないですよね?もしくは、CPUだけのPCでも動くには動くけど永遠に終わらないとか?)
かなり低次元な質問をしているかもしれませんが、もし宜しければご教示頂けると幸いです。
この記事では、OpenAIのAPIを使っているので、GPUは不要です。
エージェントはかなりトークン数使うので、API料金は少し気にしたほうが良いかもしれません。
OpenAIのサイトの設定で制限をかけるのがオススメです。
ご返信ありがとうございます!
GPU不要で、API料金に注意、ですね、承知しました!
APIはいったん10ドル以内にしてあります。
こちらのやり方、トライしてみます!!
日本語の入力、確かにコピペで割り切るのが楽ですよね。
ところで、最新の docker compose だと、ファイル名は compose.yaml が推奨のようです。
https://docs.docker.com/compose/compose-application-model/ の記述に
Docker Compose relies on a YAML configuration file, usually named compose.yaml.
とあります。自分の記事も、そろそろ compose.yaml にしていこうと考えているところです。compose.yaml
に関しては知らなかったです。ありがとうございます。ただ、Dockerに関しては悩ましいのですが推奨よりデファクトを重視して記事を書こうと思いますので、いったんこのままにして補足として説明を追記しようと思います。
例えばこちらの新旧のdockerコマンドに関して(docker run vs docker container run)にも書いているのですが、Dockerの推奨あんまり使われてないから、推奨で説明すると逆に分かりづらそうですので。
周辺環境が追随できていないこともあるので、切り替え時期は悩ましいですよね。VS Code の Docker 拡張が以前は対応していなかったのですが、最近のものは問題がないので、自分はそろそろ compose.yaml にしつつあります。