🐳

GUIと日本語環境が使えるお手軽Docker環境の使い方

2024/04/15に公開
6

おすすめDocker環境

株式会社松尾研究所のからあげ(@karaage0703)です。以前環境構築方法として、Dockerを紹介しました。

https://zenn.dev/mkj/articles/33befbaf38c693

上記記事では、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置き換え

https://github.com/karaage0703/docker-webtop

こちらのリポジトリを使うことで、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.yamlapi_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の中身は以下です。
https://github.com/karaage0703/docker-webtop/blob/develop/container-ubuntu/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 directoryImportError: 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の複雑なオプションを管理する役割もあります。今回は、主に後者の目的で使っています。

https://github.com/karaage0703/docker-webtop/blob/develop/docker-compose.yaml

docker-compose.yamlでは、先程のDockerfileを指定し、ボリュームのマウント等複数の設定を行っています。ここで設定をすることでdocker compose up webtopというシンプルなコマンドで複雑な設定を実現することができます。

docker-compose.yamlにGPUの設定をすれば、Docker上でGPUを使うことも可能です。今回準備したdocker-compose.yamlwebtop-gpuというGPUに対応した設定を用意しています。具体的な設定はdocker-compose.yamlを確認しましょう。

GPUがセットアップされたPC環境であれば、以下のようにwebtopwebtop-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-composedocker 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の大森さんが、とても分かりやすい記事を書いてくださっています。

https://zenn.dev/elith/articles/e4dbbb62752e04

また、私もWeb上に公開されている様々なLLMをDocker環境で動かすためのソフトを個人的に公開しています。

https://github.com/karaage0703/ChatLLM

興味ある方はこれらのDockerfiledocker-compose.yamlの設定例なども参考にしてみてください。

まとめ

GUIと日本語環境が使えるお手軽Docker環境の紹介に加えて、Dockerfile、Docker Composeに関して説明しました。AIエージェントや、GUIが必要なソフト(シミュレータ等)を動かすケースでは、今回紹介したGUIが使えるDocker環境が役立つのではないかと思います。

また、目的に合わせた環境構築は、開発を加速するために非常に重要です。本記事の内容がそのための参考になれば幸いです。

謝辞

WebtopはTatsuya Ishikawaさんに教えていただきました。感謝いたします。

参考記事

https://synamon.hatenablog.com/entry/2023/03/17/125933

関連記事

https://zenn.dev/karaage0703/articles/5917040338efa6

松尾研究所テックブログ

Discussion

M_R_K_WM_R_K_W

超初心者質問で申し訳ありません。
この記事で記載されているAIエージェントを動かすためには、ホストPCでGPUは必要なのでしょうか?(Docker入れたらGPU要らないということではないですよね?もしくは、CPUだけのPCでも動くには動くけど永遠に終わらないとか?)

かなり低次元な質問をしているかもしれませんが、もし宜しければご教示頂けると幸いです。

karaage0703karaage0703

この記事では、OpenAIのAPIを使っているので、GPUは不要です。
エージェントはかなりトークン数使うので、API料金は少し気にしたほうが良いかもしれません。
OpenAIのサイトの設定で制限をかけるのがオススメです。

M_R_K_WM_R_K_W

ご返信ありがとうございます!
GPU不要で、API料金に注意、ですね、承知しました!
APIはいったん10ドル以内にしてあります。
こちらのやり方、トライしてみます!!

Hiroshi KoyamaHiroshi Koyama

日本語の入力、確かにコピペで割り切るのが楽ですよね。
ところで、最新の 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 にしていこうと考えているところです。

karaage0703karaage0703

compose.yamlに関しては知らなかったです。ありがとうございます。

ただ、Dockerに関しては悩ましいのですが推奨よりデファクトを重視して記事を書こうと思いますので、いったんこのままにして補足として説明を追記しようと思います。

例えばこちらの新旧のdockerコマンドに関して(docker run vs docker container run)にも書いているのですが、Dockerの推奨あんまり使われてないから、推奨で説明すると逆に分かりづらそうですので。

Hiroshi KoyamaHiroshi Koyama

周辺環境が追随できていないこともあるので、切り替え時期は悩ましいですよね。VS Code の Docker 拡張が以前は対応していなかったのですが、最近のものは問題がないので、自分はそろそろ compose.yaml にしつつあります。